iOSアプリでCIを始めようとサービスを調べた

皆さん、CI回していますか？ビルド・テスト・デプロイは自動化されていますか？私はしていません:scream:
そんなわけでCIを始めようと思いたち、CIサービスについて調べたのでまとめます。
もしこれからCI始めたいという方の参考になれば幸いです。バリバリCIやってるぜって方は、他にもこんなのあるよとか、これ間違ってるよとか、教えてもらえると助かります:bow:

# 要求・要望
- 基本的にはiOS/Androidを回したいけど、Webアプリも一緒に載せられたら最高
- 自前でサーバ管理とか大変なので、Jenkinsは除外
- 日本語の記事がたくさんあるやつがいいな・・・

# 観点
以下の観点で各サービスを見ていきます。

- ビルドなどの設定方法
- プランごとの値段、制限(ビルド回数、ビルド時間、メンバー数など)
- gitホスティングサービスとの連携
- 配布方法(TestFlight、DeployGate、Crashlystic、iTunesConnectなどとの連携)
- 証明書の扱い ~~(iOSはホントこれが面倒)~~
- ビルドのトリガー
- 結果の通知方法
- Webアプリも扱えるか

# 候補
Travis CI、Circle CI、BITRISE、buddybuildについて見ていきます。
正直に書きます。これ見ました。
[iOSアプリのCIについて調べてみた。](http://qiita.com/bbq-all-stars/items/f55ac0ee3ea974046bf3#_reference-14311132a3c75be614f7)
ここで紹介されている中で、GREENHOUSEだけは日本語の記事があまり見つからないのと(英語難しい:cold_sweat:)、背景紺に赤字が目疲れるなあと思って、そっと候補から外しました:see_no_evil:

## [Travis CI](https://travis-ci.org/)

### ビルドなどの設定方法
`.travis.yml`という設定ファイルをルートディレクトリに置いておくと、それに従って処理を行ってくれます。

### プランごとの値段、制限
https://travis-ci.com/plans
パブリックリポジトリに関しては完全無料！すごいですね。
プライベートリポジトリ向けに幾つかプランがあります。プランによる違いは同時ビルド数だけみたいです。
そんなにたくさんアプリが無いのであれば、一番安いプラン($69,同時ビルド数1)で良さそうです。

### gitホスティングサービスとの連携
githubのみ。
とりあえずは問題無いですけど、bitbucketも使えたらなおいいですよね。

### 配布方法
設定ファイルの中でコマンドを書く感じです。
ビルドだったらxcodebuild、デプロイは各サービスのAPIを叩く、iTunesConnectはaltool(でいいのかな？)を使います。
ここらへんはfastlaneに任せてしまったほうが良さそうです。

### 証明書の扱い
暗号化してリポジトリに含め、設定ファイルにキーチェーンへの登録処理を書いておくみたいです。
これもfastlaneに丸投げした方が良さそう。

### ビルドのトリガ
branchへのpush, pull requestをトリガにできます。
他には毎日、週一、月一でビルドさせることもできるみたいです。

### 結果の通知方法
https://docs.travis-ci.com/user/notifications/
メール、Slackなど、必要なものは一通り揃ってそうです。Webhookもあります。

### Webアプリも扱えるか
https://docs.travis-ci.com/user/languages/
当然扱えます。相当数の言語に対応しています。

### 感想
有名サービスだけあって、機能は柔軟で色々なシーンで活躍してくれそうです。
安いプランでも同時ビルド数以外に制限がないというのは非常に嬉しいです。パブリックならそもそも無料ですしね。
gitホスティングサービスとしてgithubしか選択できないのが気になるといえば気になりますが、問題無いでしょう。

---

### 参考
[人気CIツール比較まとめ【2015年12月版】](http://qiita.com/hiro_koba/items/282e3b2e534f4bc22d64)
[GitHub上のiOSプロジェクトでもTravis CI × CodecovでCIしたい!](http://qiita.com/kagemiku/items/727b9100c66a44b3a38c)
[Travis CI と GitHub を連携して iOS アプリをテストする](http://qiita.com/star__hoshi/items/c9413b8d20e89bdc5f2f)
[Travis-CI上でiOS アプリをビルドしてdeploygateで配布する](http://qiita.com/tarom/items/9b8a3497907d8d4d1390)
[Travis CIで配布可能なIPAを作成して配布する](http://qiita.com/nomadmonad/items/baf089e7d7bcf27ab8ee)
[Travis CIでつくるiOSのCI環境（テスト・アップロード編）](http://qiita.com/akaimo/items/9612041c50b1898dedc0)
[Travis CIで定期的にビルドを実行する](http://sue445.hatenablog.com/entry/2017/05/29/113133)
[TravisCIでiOSの依存ライブラリの更新を自動化する](http://tech.speee.jp/entry/2016/12/01/100253)

---

## [Circle CI](https://circleci.com/)

### ビルドなどの設定方法
`circle.yml`という設定ファイルをルートディレクトリに置いておくと、それに従って処理を行ってくれます。

### プランごとの値段、制限
https://circleci.com/pricing/#build-os-x
iOSアプリのビルドをしたい場合は問答無用で有料プランになります。
安いプランだと1日あたりのビルド数、月あたりのビルド時間の制限が厳しいかなという印象を受けます。

### gitホスティングサービスとの連携
https://circleci.com/docs/2.0/gh-bb-integration/
githubとbitbucketが選べます。

### 配布方法
設定ファイルの中でコマンドを書く感じです。
fastlane案件ですね。

### 証明書の扱い
開発者証明書はアップロードできるみたいです。プロビジョニングファルはリポジトリに含めます。
fastlane案件。

### ビルドのトリガー
branchへのpush, pull requestをトリガにできます。
外からcronとかでAPIを叩くことで定期実行もさせられるみたいです。

### 結果の通知方法
メールかWebhookを使って通知をします。

### Webアプリも扱えるか
https://circleci.com/docs/2.0/demo-apps/
主要な言語は抑えています。何故かここに載ってないですが、swift(objective-C)はちゃんとビルドできます。

### 感想
やりたいことはちゃんとできるし、調べれば参考になるページはたくさん出てきます。
安いプランでのビルド時間制限がきついかなと思います。かと言ってランク上げると結構な料金になってしまうし。。。
お金を勝ち取ることができるならありですね。

---

### 参考
[人気CIツール比較まとめ【2015年12月版】](http://qiita.com/hiro_koba/items/282e3b2e534f4bc22d64)
[受託開発でもfastlaneとCircleCIでiOSアプリを継続的デリバリー](http://qiita.com/noboru_i/items/2e50ddd396a6970033d9)
[新しいCircleCIの機能で、iOSアプリをTestFlightに上げる](http://qiita.com/noboru_i/items/02665d7c565dc51c7fc8)
[[iOS] CircleCI, fastlane, Fabric を用いたCI環境と自動ベータ配布環境の構築【前編】](http://sikmi.com/blog/ios/circleci-fastlane-fabric-1)
[[iOS] CircleCI, fastlane, Fabric を用いたCI環境と自動ベータ配布環境の構築【後編】](http://sikmi.com/blog/ios/circleci-fastlane-fabric-2)

---

## [BITRISE](https://www.bitrise.io/)

### ビルドなどの設定方法
workflowというものをGUIでポチポチ設定します。
ビルドするとかデプロイするとか、それぞれの機能がStepという形で予め用意されていて、それを順番に繋げていきます。
ymlで書くこともできるので、GUIが嫌な場合はそちらを使うのがいいでしょう。

### プランごとの値段、制限
https://www.bitrise.io/pricing
無料版だと1回あたり10分のビルド時間制限と、メンバー2人というのが引っかかりそうなところ。
有料版にすれば制限は気にしなくていいレベルじゃないかと思います。

### gitホスティングサービスとの連携
github/bitbucket/gitlab/sshで任意のリポジトリが選べます。

### 配布方法
https://www.bitrise.io/integrations
Stepの中に、iTunes Connect、Fabric / Crashlytics、TestFairyへのデプロイが予め用意されています。
それ以外にデプロイしたい場合は、スクリプトを実行するStepを使ってやるようです。

### 証明書の扱い
開発者証明書、プロビジョニングファイルともにアップロードします。

### ビルドのトリガー
branchへのpush, pull requestをトリガにできます。

### 結果の通知方法
メールかWebhookを使って通知をします。

### Webアプリも扱えるか
モバイルアプリじゃないとValidationが通りませんでした。色々パターンを試せていないので、たまたまだったのかも知れないです。

### 感想
モバイルアプリ特化なので、よく使う機能がStepとして予め用意されているのは便利だと思います。
ページの読み込みが若干時間かかるかなと思いました。
アプリ追加するたびにGUIでポチポチworkflow作るのは多分面倒なので、使うならymlで書くかなと思います。

---

### 参考
[iOSアプリのCIについて調べてみた。](http://qiita.com/bbq-all-stars/items/f55ac0ee3ea974046bf3#_reference-14311132a3c75be614f7)
[iOS用のCIサービスBitriseを使ってみた](http://qiita.com/keygx/items/ab6149476f43ec51eb5c)
[iOSアプリ用のCI環境を作ろう](http://qiita.com/kou_hon/items/51dda72ad62c0c03a720)
[CircleCIのiOSビルドが有料プラン化するらしいので、Bitriseの無料プランに乗り換えてみた](CircleCIのiOSビルドが有料プラン化するらしいので、Bitriseの無料プランに乗り換えてみた)
[試行錯誤してたどり着いた現在のiOSアプリ自動デプロイ環境（Bitrise、fastlane、Crashlytics、たまにbuddybuild）](試行錯誤してたどり着いた現在のiOSアプリ自動デプロイ環境（Bitrise、fastlane、Crashlytics、たまにbuddybuild）)

---

## [buddybuild](https://www.buddybuild.com/)

### ビルドなどの設定方法
ビルドとデプロイに関しては設定画面があり、そこでポチポチします。
ソースクローン後とビルド前後にスクリプトを実行することができ、それはリポジトリに入れておくみたいです。

### プランごとの値段、制限
https://www.buddybuild.com/pricing/#starter
無料版だと1回のビルド時間20分と登録端末2つが厳しそうです。
Plusまでいけば制限はほとんど気にならなくなりそう。

### gitホスティングサービスとの連携
github/bitbucket/gitlab/sshで任意のリポジトリが選べます。

### 配布方法
buddybuild自体にベータ版配布機能があり、SDKを組み込んでおけば画像とコメントつきのフィードバックを集めたり、クラッシュレポートを集めたりできます。
iTunesConnectへのアップもできます。
それ以外のサービスで配布したい場合はスクリプトを書きます。

### 証明書の扱い
開発者証明書はアップします。
DevCenterと同期することができ、プロビジョニングファイルは自動でとってきてくれるみたいです。

### ビルドのトリガー
branchへのpush, pull requestをトリガにできます。

### 結果の通知方法
メールのほか、slack/HipChat/GitHub Issues/IRA Issues/Pivotal Tracker/Trelloと連携できるみたいです。

### Webアプリも扱えるか
モバイルアプリじゃないとビルドできませんでした。色々パターンを試せていないので、たまたまだったのかも知れないです。

### 感想
ベータ版配布に加え、SDKを入れることでフィードバック・クラッシュレポートの収集ができるので、これ一つで完結できるというのが大きなアドバンテージだと思います。
設定が画面しか無いのがちょっと面倒ですね。テキストでできるようになって欲しいです。

---

### 参考
[iOSアプリのCIについて調べてみた。](http://qiita.com/bbq-all-stars/items/f55ac0ee3ea974046bf3#_reference-14311132a3c75be614f7)
[iOSアプリのデプロイ自動化にbuddybuildを使ってみた話](http://engineering.otobank.co.jp/entry/ios-build-by-buddybuild)

---

# まとめ
今回調べた4つのサービスでは、Webアプリも含めて広く使うなら制限が同時ビルドだけのTravis CI、モバイル特化で使うならこれ一つで完結できるbuddybuildかなと思いました。
どれを使うにしても、fastlaneは習得しておいて損はなさそう:ok_woman:
今のところ調査とかる～く触った程度なので、使い勝手については正直分かっていないです。無料版が使えるものに関しては、それぞれ1ヶ月くらい試してみたいです。
あとはお財布と相談で:purse:
これを機会にハッピーCIライフを始めたいと思います:angel: