Xcode8でのSwiftのビルドが遅い

# この記事の目的
どんな環境で、どれくらいのファイル数のプロジェクトをビルドしたら、とりあえずどのくらいの時間がかかってるのかを知りたい。あと、Swiftのビルドは遅いっての知っておいて欲しい。
Swift書き出したら気持ちいいんだけど、ビルド遅いのはもうやだ。他の人どんな感じなん？
**という膜に包んだ愚痴。**


# 解決策を求めてぐぐった→良策なし
仕事に差し支えるレベルで遅いので、とりあえずググった結果、具体的な解決になるような情報はなく（**型推論なくせとか・・・**）、とりあえず**スペックの高いMac買え**という結論でした。強力な型推論が強力すぎてマシンを殺す。
差分ビルドも早かったりすごい時間かかったり。

# 遅いのは遅い
ビルドが遅いのはもうこれ単純にスペック不足なんでしょうね。
n%速くなったっていっても相対的なもんだしね。20分かかるのが10分になったところで、10分もかかってるんですよ。
速いMac買えればそれに越したことはないんですけどね、そうもいかん。

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

## 計測の手順
### Xcodeにビルド時間を表示するように設定。

```language:terminal
% defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES
```

### Coreの数の確認

```language: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の数を指定する
```language:terminal
% defaults write com.apple.dt.Xcode IDEBuildOperationMaxNumberOfConcurrentCompileTasks 2
```
このMacだとCoreの数が２なので２。

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

# 手元の環境での結果

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

![スクリーンショット 2016-10-19 11.24.58.png](https://qiita-image-store.s3.amazonaws.com/0/2209/6e2b0cd0-6ee6-3ef1-d0a9-163e61ca3877.png)
この環境で（2core）
![スクリーンショット-2016-10-12-18.47.png](https://qiita-image-store.s3.amazonaws.com/0/2209/baa884cd-1064-ead9-944d-e4aa064a8da6.png)
これ。

もうひとつ。

![スクリーンショット 2016-10-19 11.26.23.png](https://qiita-image-store.s3.amazonaws.com/0/2209/04cecec7-21af-17c1-7ae0-ce686b379b19.png)
この環境で(2core)
![Screen-Shot-2016-10-18-at-17.59.png](https://qiita-image-store.s3.amazonaws.com/0/2209/362f0ec1-e9b4-8559-e837-88d9bfeed1a2.png)
これ。


(2016/12/5追記)
MacBook 2016Early
<img width="254" alt="スクリーンショット 2016-12-05 17.30.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/2209/6210c6f4-ab12-06e4-be93-66d3d8d299ab.png">
1.1GHz Core2 m3
<img width="504" alt="スクリーンショット 2016-12-05 17.29.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/2209/86355aa2-b5cf-7e1c-0f5f-8f2b8778f464.png">
MBA13inchよりも速いだと…？


iMac27inch 2011Mid Quad i7 3.4GHz
![スクリーンショット-2016-12-05-15.1.png](https://qiita-image-store.s3.amazonaws.com/0/2209/18aba251-df39-0087-75b3-df24cb9c3e85.png)
この環境（4core）
![スクリーンショット-2016-12-05-15.09.png](https://qiita-image-store.s3.amazonaws.com/0/2209/90719550-222e-ffa0-cb07-3368cc1b7682.png)
これ。


同じマシンをSSDに換装したら、さらに速くなりました。
![スクリーンショット-2016-12-10-07.32.09.png](https://qiita-image-store.s3.amazonaws.com/0/2209/095fee3f-98ea-d140-0deb-996658ffa6da.png)



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

## 参考にObjective-Cのビルド時間
2,000ファイルのプロジェクト（ObjCなのでファイルの数だけは多い）
![スクリーンショット 2016-10-19 11.24.58.png](https://qiita-image-store.s3.amazonaws.com/0/2209/4081d038-378f-efe1-79aa-a509756b17bb.png)
この環境で
![スクリーンショット-2016-10-19-11.37.28.png](https://qiita-image-store.s3.amazonaws.com/0/2209/f8db4a9e-a665-66ef-0602-62e8d34b07b4.png)
これ。

**なにこの差**

# 開発者への負担
このビルド速度の差は念頭に置いといたほうがいいです。
**Swiftのビルドは遅い**
**プロジェクトは肥大化する（コントロールしたいけどこれは理想）**
**遅い遅いと言っても周りに伝わりにくい（定量的な数字が必要）**
**小手先の工夫で速くなるなんてのは気休めレベル（相対的なものでしかない）**
**開発者的にSwiftはいいけど、プロジェクトの進行に支障を来す場面が出てくる**

# もっとも効果的な解決方法
クックさん＜MacPro買え。

# まとめ
細かいことしないでビルドなんかさっさと終わって欲しい。
なんでもかんでもさくさくPlaygroundがいい。

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

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

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

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

# 参考資料（追記）
Xcode Hardware Performance
https://github.com/ashfurrow/xcode-hardware-performance#xcode-hardware-performance
コメントで教えていただいたここで、ざくっと速度の比較が一覧できます！
これは良い・・・・。

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

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