Skyland Ventures tech ブログ

渋谷のVenture Capital Skyland Venturesのいま一番イケてる投資先、nanameue,IncとKaumoの共同技術ブログ

Macのスペック上げたらSwiftビルド時間が5分から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したらどうなるでしょう。。。

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

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

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

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

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

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