Xcode8でのSwiftのビルドが遅い

More than 1 year has passed since last update.


この記事の目的

どんな環境で、どれくらいのファイル数のプロジェクトをビルドしたら、とりあえずどのくらいの時間がかかってるのかを知りたい。あと、Swiftのビルドは遅いっての知っておいて欲しい。

Swift書き出したら気持ちいいんだけど、ビルド遅いのはもうやだ。他の人どんな感じなん?

という膜に包んだ愚痴。


解決策を求めてぐぐった→良策なし

仕事に差し支えるレベルで遅いので、とりあえずググった結果、具体的な解決になるような情報はなく(型推論なくせとか・・・)、とりあえずスペックの高いMac買えという結論でした。強力な型推論が強力すぎてマシンを殺す。

差分ビルドも早かったりすごい時間かかったり。


遅いのは遅い

ビルドが遅いのはもうこれ単純にスペック不足なんでしょうね。

n%速くなったっていっても相対的なもんだしね。20分かかるのが10分になったところで、10分もかかってるんですよ。

速いMac買えればそれに越したことはないんですけどね、そうもいかん。


どのくらい時間かかってるのか

とりあえず手元の具体的な環境と、プロジェクトのファイル数とともにビルド経過時間をアップします。


計測の手順


Xcodeにビルド時間を表示するように設定。


terminal

% defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES



Coreの数の確認


terminal

% system_profiler SPHardwareDataType

Hardware:

Hardware Overview:

Model Name: MacBook Air
Model Identifier: MacBookAir7,2
Processor Name: Intel Core i7
Processor Speed: 2.2 GHz
Number of Processors: 1
Total Number of Cores: 2
L2 Cache (per Core): 256 KB
L3 Cache: 4 MB
Memory: 8 GB
Boot ROM Version: ***********
SMC Version (system): *********
Serial Number (system): ************
Hardware UUID: ********************************


Boot ROM以下の情報は不要。


Xcodeが使用するCoreの数を指定する


terminal

% defaults write com.apple.dt.Xcode IDEBuildOperationMaxNumberOfConcurrentCompileTasks 2


このMacだとCoreの数が2なので2。


Xcodeでビルド

Cmd+opt+cleanでクリーンしてから、Cmd+Bでビルド。


手元の環境での結果


プロジェクトのファイル数

Storyboardとか他のバンドル関係とか、ライブラル類もあったりするけど(Podsは別ディレクトリ)、ざっくり1,000ファイルほどのプロジェクト。

スクリーンショット 2016-10-19 11.24.58.png

この環境で(2core)

スクリーンショット-2016-10-12-18.47.png

これ。

もうひとつ。

スクリーンショット 2016-10-19 11.26.23.png

この環境で(2core)

Screen-Shot-2016-10-18-at-17.59.png

これ。

(2016/12/5追記)

MacBook 2016Early

スクリーンショット 2016-12-05 17.30.21.png

1.1GHz Core2 m3

スクリーンショット 2016-12-05 17.29.50.png

MBA13inchよりも速いだと…?

iMac27inch 2011Mid Quad i7 3.4GHz

スクリーンショット-2016-12-05-15.1.png

この環境(4core)

スクリーンショット-2016-12-05-15.09.png

これ。

同じマシンをSSDに換装したら、さらに速くなりました。

スクリーンショット-2016-12-10-07.32.09.png

コア数とアクセス速度は正義。


参考にObjective-Cのビルド時間

2,000ファイルのプロジェクト(ObjCなのでファイルの数だけは多い)

スクリーンショット 2016-10-19 11.24.58.png

この環境で

スクリーンショット-2016-10-19-11.37.28.png

これ。

なにこの差


開発者への負担

このビルド速度の差は念頭に置いといたほうがいいです。

Swiftのビルドは遅い

プロジェクトは肥大化する(コントロールしたいけどこれは理想)

遅い遅いと言っても周りに伝わりにくい(定量的な数字が必要)

小手先の工夫で速くなるなんてのは気休めレベル(相対的なものでしかない)

開発者的にSwiftはいいけど、プロジェクトの進行に支障を来す場面が出てくる


もっとも効果的な解決方法

クックさん<MacPro買え。


まとめ

細かいことしないでビルドなんかさっさと終わって欲しい。

なんでもかんでもさくさくPlaygroundがいい。


追記

開発者の方はアドバイスいただけるの嬉しいのですが、お手元の環境+ビルド時間をそっと書いてもらえると助かります。

開発経験全然ないマネージャの方とかもいらっしゃいますので、そういう方に「ビルドってのは時間かかるんだ、具体的にこんな具合に」ということを俯瞰してもらいたいところです。

Swiftのコンパイルそのものがなかなかヘヴィなものなので、開発速度を上げる=速いMacが必要っていう認知もして欲しいですしね。そのためには相対的なものじゃなくて絶対数があるといいよね、っていう記事です。

(スクショ内にcore数出てなかったので追記)


参考資料(追記)

Xcode Hardware Performance

https://github.com/ashfurrow/xcode-hardware-performance#xcode-hardware-performance

コメントで教えていただいたここで、ざくっと速度の比較が一覧できます!

これは良い・・・・。


追記2

2016年12月5日に iMac 2011Mid と MacBook Early 2016 でのビルド結果を追加。


追記3

2016年12月10日に、上記iMacをSSDに換装したのでビルド結果を追加。