Macのスペック上げたらSwiftビルド時間が5分から1分になりました

  • 19
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

株式会社Nanameue(http://nanameue.jp/?lang=ja)
iOSエンジニアのbatiです

Objective -CからSwiftに乗り変えて2か月。
今は新規プロジェクトをPure Swift でやっている状況で、
そろそろ、Swift最高じゃんもうObjective-Cには戻れないわ
と感じている頃です。

Swiftは非常に便利なのですが、プロジェクトが大きくなるとコンパイルに時間がかかる時がかかることがしばしばあることが問題視されています。

具体的な状況

・ 環境 Macbook Air メモリ8G
・ Xcode version 7.3
・ 言語 Swift2.2
・ Swiftファイル200(リリース時期になるとおそらく250くらいにはなるでしょう、今後アップデートも含めると最高300にはなりそうです)

ググった結果

こういう時はググりましょう
ということでググった結果以下の記事が出てきました

型推論をなくそう系
http://cocopon.me/blog/?p=5447
http://qiita.com/rizumita/items/913b05d799b3712260f6

複数のmoduleにしてみたら系
https://developers.eure.jp/ios/advent-calendar-18/

いやいや全てを一つのSwift.fileで書いてみたら系
https://speakerdeck.com/mpon/swift-compile-time-is-so-slow

一通りやってみた結果

型推論をなくそう系
とりあえず、わかりきってる型でも型推論allなしでしてみた結果 20秒短縮

複数のmoduleにしてみたら系
これはそもそもめんどくさい

いやいや全てを一つのSwift.fileで書いてみたら系
これは全体の1/10くらいで挫折しましたが、ビルド時間3秒でした

まあ、ググってやってみたが、そんなに効果はない

そもそもなぜObjective-Cに比べて遅いのか

Swiftにはクラスをimportするという概念がないからです。importするのはmoduleだけで、
publicなクラスを作った時点で、全てのfileからアクセスできます。
つまり、全てのfileからアクセスできるようにするのに、時間がかかるということです。

またSwiftのコンパイラの仕組みは以下の記事が非常に参考になりました

http://qiita.com/demmy/items/f08a65298d2f2caf1360

ではどうやって解決すればいいのか

このままでは、Swift.file300に到達してしまいます。

そんな状態でarchiveしたらどうなるでしょう。。。

そこで弊社社長のツルの一声

Mac Proにしたら良くなると思うよ、買ってあげようか

なんてホワイトなベンチャー企業でしょうか

会社の金で買っていただいた27万のMac Proで早速試したところ、

build時間が5分→1分に!!!!!!

ということで、皆さんもこれを機にMac Proにしてみましょう