Xcode(Swift)のビルドを高速化した話
以前にSwiftのビルドの遅さに困っていまして、こんな事を書きました。
Swiftのコンパイルが遅い
あれから1年半くらいの月日が経ち、この問題は大幅に改善しました。
ビルドを速くする事を意識したというより、
コードのメンテナンスのしやすさ、可読性を意識したら
自然と改善してしまったという感じです。
今は開発中にビルドが遅くてストレスを感じることはほとんどありません。
XcodeやSwiftの進化のおかげもあると思いますが、
速度が向上した理由として考えられる事をリストアップしていきます。
Embedded Frameworkを導入
機能ごとに(モジュールと呼んでいる)、Embedded Frameworkを作るようにしました。
メリットは
- レイヤーを分割できる
- 依存関係がわかりやすくなる
- テストコードをモジュールごとに書ける
ビルド速度への効果は?
少しコードを修正しただけでプロジェクト全体をビルドしてしまうのを防ぐことができました!
差分コンパイルができているということですね。
MVPアーキテクチャを導入
弊社エンジニアが以前に書いた記事です。EAP MVPアーキテクチャの取り組み
この取組により下記の問題を解決する事ができました。
引用:
・ViewControllerに役割が大きくなりがちだった(FatViewController)
・チームメンバーで作りにばらつきが出てしまい、可読性が低くなっていた
・作りが統一されていないため、2次、3次に続くエンハンスがしにくい
(ソースコードの理解や修正方針検討に時間がかかる)
ビルド速度への効果は?
ちゃんと計測したわけではありませんが、
ViewControllerに書かれていたロジックがPresenterに分離され、
各メソッドの行数が短くなった事により
ビルド速度にいい影響が出ていると思われます。
1 Storyboard 1 ViewController
以前は1つのStoryboardで複数のViewControllerを配置して
画面のレイアウト、遷移を作っていました。
この時、以下のような問題がありました。
- Storyboardを開くのに時間がかかりストレスを感じる
- ビルドプロセスを見るとStoryboardのところで時間がかかっている
そこで、
- 1つのStoryboardに配置するViewcontrollerは1つだけ
- 画面遷移はコードで書く
というルールで進める事にしました。
この結果、XcodeでStoryboardを開く時に時間がかからなくなりました!
ビルド速度への効果は?
Storyboardファイルが増えるので、むしろビルド速度は遅くなるのでは?
という考えもありましたが、1ファイルが軽いので、
こちらもビルド速度にいい影響が出ていると思われます。
New Build Systemを使用
Xcode 9から導入されたNew Build Systemを使うことより
以前より10〜20%速くなります。
ハイスペックマシン導入
弊社アプリエンジニアは全員Mac Book Proで開発しています。
もはやこれがないと仕事になりません。
これ以上の解決方法はないかもしれません。
余談ですが、アプリエンジニア積極採用中です!
→ ⭐️採用情報⭐️
入社時にはご希望のマシンを用意いたします!
その他
やはり型推論でOK
Swiftのメリットである型推論。
これを使わないとビルドが速くなるという話があり、
一時期は明示的に型を書いていたのですが、
あまり効果を感じないし、今は気にならないくらい速くなったので型推論使ってます。
CocoaPods? Carthage?
一時期はCocoapodsとCarthage両方を使っていた時期があります。
実際Carthageの方がビルド速度は上がると思いますが、Carthageは扱いづらいと感じていました。
今は全体としては気にならないくらいの速度が出ているので
Cocoapodsのみ使うにことにしました。
まとめ
いろいろ書きましたが、ちゃんと計測していない部分もあるので、
全てオススメと言い切れませんが、
ビルド時間に悩まされている方の参考になればと思います。
TAG
素晴らしいアプリを開発して世の中をもっとハッピーにしたい! ビール大好き!卓球大好き!音楽大好き! 最近は子供とおかあさんといっしょを見てるせいで「ブンバボーン」の脳内再生が止まりません。
TAG
- Android
- AWS
- Bitrise
- CodePipeline
- Firebase
- HTML
- iOS
- IoT
- JavaScript
- KPI
- Linux
- Mac
- Memcached
- MGRe
- MGReのゆるガチエンジニアブログ
- MySQL
- PHP
- PICK UP
- PR
- Python
- Ruby
- Ruby on Rails
- SEO
- Swift
- TIPS
- UI/UX
- VirtualBox
- Wantedly
- Windows
- アクセス解析
- イベントレポート
- エンジニアブログ
- ガジェット
- カスタマーサクセス
- サーバ技術
- サービス
- セキュリティ
- セミナー・展示会
- テクノロジー
- デザイン
- プレスリリース
- マーケティング施策
- マネジメント
- ラボ
- リーンスタートアップ
- 企画
- 会社紹介
- 会社紹介資料
- 勉強会
- 実績紹介
- 拡張性
- 採用
- 日常
- 書籍紹介
- 歓迎会
- 社内イベント
- 社員インタビュー
- 社長ブログ
- 視察
- 開発環境