MacProとfastlaneでiOSアプリのCD環境を構築する


最近MacPro Late 2013を購入しました。
はいそうです、[Ryzenで自作したほうがスペックいいよねーﾌﾟｰｸｽｸｽ](http://gigazine.net/amp/20170411-ryzen-pc-vs-mac-pro) と煽られたりしている、あのMacProです。

もともと、ほぼ手動でDistribution用のipaにビルドし、もろもろ整えてapp storeに上げることをしていたのですが、
最近 [Fastlane](https://fastlane.tools/) を導入しまして、slackからコマンドでJenkinsのジョブを開始させ、fastlaneを行う、のような運用に変更しました。

しかし、Macmini Late2012(SSD換装済)ですべてを行っていたので、耐えられないほどビルドに時間を要していました。
皆さんはビルドを待っている間、何をしていますか？Twitter、、最近は[Mastodon](https://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%B9%E3%83%88%E3%83%89%E3%83%B3_(%E3%83%9F%E3%83%8B%E3%83%96%E3%83%AD%E3%82%B0))ですか？それとも、ちょっとコンビニ行ってくるわーって感じですか？
残念ながらチョーっとコンビニ行ってくる、なんて言ってられないほど時間がかかっていました。

なお、ビルドするアプリは、ライブラリを15個ぐらい、アプリ本体は1150ファイル程度のソースファイルが存在する、そこそこ大規模なアプリです。

##Before

```
+------+-------------------------------------+-------------+
|                     fastlane summary                     |
+------+-------------------------------------+-------------+
| Step | Action                              | Time (in s) |
+------+-------------------------------------+-------------+
| 1    | Verifying required fastlane version | 0           |
| 2    | default_platform                    | 0           |
| 3    | slack                               | 0           |
| 4    | cocoapods                           | 37          |
| 5    | slack                               | 0           |
| 6    | slack                               | 0           |
| 7    | gym                                 | 1027        |
| 8    | slack                               | 1           |
| 9    | slack                               | 0           |
| 10   | deliver                             | 219         |
| 11   | slack                               | 1           |
| 12   | slack                               | 0           |
| 13   | clean_build_artifacts               | 0           |
| 14   | slack                               | 0           |
| 15   | slack                               | 0           |
+------+-------------------------------------+-------------+
```

なお、ここの `gym` と書いてある部分がビルドと署名にかかっている時間です。
1027秒…つまり、 **約17分** です。ありえねえええーーーーーー
というわけで、MacProの購入検討を始めたのですが、自分のググり力が低いのか、全くMacProを用いたときの速度検証などがありませんでした。 _きっと誰も購入してないんでしょうね_

##After

というわけで、これが変更後です。
まだ `deliver` はしていないので未測定です。

```
+------+---------------------+-------------+
|             fastlane summary             |
+------+---------------------+-------------+
| Step | Action              | Time (in s) |
+------+---------------------+-------------+
| 1    | Verifying required  | 0           |
|      | fastlane version    |             |
| 2    | default_platform    | 0           |
| 3    | cocoapods           | 10          |
| 4    | gym                 | 215         |
+------+---------------------+-------------+
```

215秒、つまり **約3.5分** です。何この速度の違いいいいいい
![____________________________2017-04-24_11.37.27.png](https://qiita-image-store.s3.amazonaws.com/0/36042/d5903bdb-209d-2098-3502-356b09f8a050.png "____________________________2017-04-24_11.37.27.png")
はい、ビルド時は全コア使い切ってくれています。うれしい！

##何が嬉しいか

17分も待っていると、何をしないといけないのかすっかり忘れてしまいます。
できるだけタスクとタスクの間に時間を開けないほうがいいんです。いわゆるコンテキストスイッチってやつですね。それが短くなるだけでも、かなりの生産性を向上できると思います、、みたいなことを言った気がします。

##結論

- MacProにすることによってビルド時間が1/5になった
- コンテキストスイッチが起きにくい環境が作れた
- たった20万程度でCD環境を劇的に改善できた

ビルドが遅い、CI/CDが遅いと嘆いている皆さん、上記データが参考になれば幸いです。