Help us understand the problem. What is going on with this article?

Xcode(Swift)のビルドを高速化した話

More than 1 year has passed since last update.

以前に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のみ使うにことにしました。

まとめ

いろいろ書きましたが、ちゃんと計測していない部分もあるので、
全てオススメと言い切れませんが、
ビルド時間に悩まされている方の参考になればと思います。

iduchikun
株式会社ランチェスターでMGReというプロダクトの開発をしています。
https://www.lanches.co.jp
lanches
ブランドとファンを繋ぐクラウドプラットフォーム「EAP」の開発をしています。
https://www.lanches.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away