人気CIツール比較まとめ【2015年12月版】

# 概要

こんにちは。本日の担当の@hiro_kobaです。リブセンスでアクセスログ分析基盤の開発等をやっております。
本日は最近人気のある5個のCIツールを、色んな角度から比較してみようと思います。

# 背景

テスト環境でテストを実行し、通ったらステージングにデプロイ、その後動作が確認できたら本番デプロイ。
日々のオペレーションでよくある光景かと思いますが、手動での手順が多いためミスが発生しやすく、かつ手間も掛かるため、課題を感じておりました。

これらの継続的な運用フローを自動化してくれる仕組みとして、CIツールがあります。
CIツールは大きく分けて、以下3つに分類されるようです。[参考](http://www.slideshare.net/SumiKoichiro/ci-continuous-integration-servicematome)

- Everything（全方位型）
- Build, Test and Delivery（ビルド・テスト・デプロイ特化型）
- Specialization（その他特化型）

今回の問題には「Build, Test and Delivery」を使うと良さそうでしたので、その中でも人気ランキングの上位から、5つを選定して比較検討することにしました。

# 今回書くこと

最近人気のCIツールを対象に比較されている情報が思ったより少なかったため、よく比較されている項目などを元に、各種サービスのドキュメントなどを参考に比較してみました。
同じように比較検討をされている方の助けになれば幸いです。
また、CIツール初心者で勘違いしているところがあるかもしれませんが、適宜ご指摘頂けると助かります。

# 比較対象ツール

[stackshare.ioのランキング](http://stackshare.io/continuous-integration)で、上位5位以内のCIツールとして、以下5つを選定しました。
※JenkinsはEverythingタイプに分類されるため、比較対象外
※TeamCityはまとめ始めた当初はランキング外だったため、比較対象外

- [TravisCI](https://travis-ci.com/)
- [Codeship](https://codeship.com/)
- [CircleCI](https://circleci.com/)
- [Wercker](http://wercker.com/)
- [drone.io](https://drone.io/)

※TravisCIとdrone.ioはホスティング版とOSS版がありますが、今回はホスティング版を対象としています。

# 料金比較

- 月額料金
- 課金形態
- 無料枠

を比較しました。
殆どのサービスは同時実行数（コンテナ数）によって課金されるため、月額料金は同時実行数をスケールさせた場合の比較も行いました。

| サービス                           | 同時実行数1                         | 同時実行数2           | 同時実行数4            | 同時実行数8             | 課金形態                               | 無料枠                                                                                  |
|------------------------------------|-------------------------------------|-----------------------|------------------------|-------------------------|----------------------------------------|-----------------------------------------------------------------------------------------|
| [TravisCI](https://travis-ci.com/) | 129                                 | 129                   | 249                    | 489                     | コンテナ数                             | OSS版なら無料                                                                           |
| [CODESHIP](https://codeship.com/)  | 49(Personal Plan)                   | 99(Organization Plan) | 399(Organization Plan) | -(同時実行数6で999ドル) | コンテナ数                             | 1コンテナ・並列テスト無しなら無料（ビルド回数・プライベートリポジトリ数などに制限あり） |
| [CircleCI](https://circleci.com/)  | 0                                   | 50                    | 150                    | 350                     | コンテナ数（1コンテナあたり$50）       | 1コンテナなら無料（ビルドの時間等の制限あり）                                           |
| [Wercker](http://wercker.com/)     | 0                                   | -                     | -                      | -                       | 無料プランのみ                         | 無料プランのみ                                                                          |
| [drone.io](https://drone.io/)      | 25(5プロジェクトまで) or 49(無制限) | 99                    | 199                    | 399                     | コンテナ数、プライベートプロジェクト数 | プライベートプロジェクト不可                                                            |

料金表リンク

- [Travis CI](https://travis-ci.com/plans)
- [Codeship](https://codeship.com/pricing)
- [Circle CI](https://circleci.com/pricing)
- [Wercker](http://wercker.com/pricing/)
- [drone.io](https://drone.io/pricing)

# ビルド・テスト機能比較

- 設定方法
    - ビルド設定をカスタマイズする際の方法
- キャッシュ機能
    - ビルド・テストを高速化するための機構有無
- ビルド同時実行
    - 同時にビルド可能な最大数
- 並列テスト
    - テストを並列実行可能か
- ビルド時間制限
    - ビルド時の時間制限（分）
- PR自動ビルド
    - Gitホスティングサービス上でPRをマージしたタイミングで、自動的にビルドを実行可能か
- SSHログイン
    - ビルド環境にログイン可能か
- ビルド環境のOS

| サービス                           | 設定方法 | キャッシュ機能                                                                                | ビルド同時実行 | 並列テスト                                                     | ビルド時間制限(分) | PR自動ビルド | SSHログイン | ビルド環境のOS |
|------------------------------------|------|-----------------------------------------------------------------------------------------------|----------------|----------------------------------------------------------------|--------------|--------------|-------------|----------------|
| [TravisCI](https://travis-ci.com/) | YAML | ◯（[参考](https://docs.travis-ci.com/user/caching/)）                                        | ◯              | ◯（[参考](http://qiita.com/oh_rusty_nail/items/d345e9612a9dc12d0382)） | 50           | ◯            | ✕           | Ubuntu         |
| [Codeship](https://codeship.com/)  | Web  | ◯（[一部プラットフォームのみ](https://blog.codeship.com/dependency-cache-sphinx-codeship/)） | ◯              | ◯                                                              | 50           | ◯            | ◯           | Ubuntu         |
| [CircleCI](https://circleci.com/)  | YAML | ◯                                                                                             | ◯              | ◯                                                              | 20           | ◯            | ◯           | Ubuntu         |
| [Wercker](http://wercker.com/)     | YAML | ◯                                                                                             | ◯              | ✕                                                              | 25           | ◯            | ✕           | Ubuntu         |
| [drone.io](https://drone.io/)      | Web  | ◯                                                                                             | ◯              | ✕                                                              | 15           | ✕            | ✕           | Ubuntu         |

# デプロイ機能比較

デプロイに関する機能を比較しました。
シェルスクリプトなどを駆使すれば大体のことは出来てしまうので、以下の様な評価軸を設けました。

◯ 組み込まれたの機能・機構として実現可能
△ 公式のプラグインや外部ライブラリを利用して実現可能
✕ ゴニョゴニョやらないと無理

| サービス                           | SSH                                                                                    | FTP | Heroku                                                                    | Google App Engine                                                                       | CodeDeploy                                                                        | Elastic Beanstalk                                                                                       | OpsWorks                                                                                 | S3                                                                                 |
|------------------------------------|----------------------------------------------------------------------------------------|-----|---------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|
| [TravisCI](https://travis-ci.com/) | ◯                                                                                      | ◯   | ◯                                                                         | ◯                                                                                       | ◯                                                                                 | ◯                                                                                                       | ◯                                                                                        | ◯                                                                                  |
| [Codeship](https://codeship.com/)  | ◯                                                                                      | ◯   | ◯                                                                         | ◯                                                                                       | ◯（[参考](https://blog.codeship.com/aws-codedeploy-codeship/)）                  | ◯（[参考](https://codeship.com/documentation/continuous-deployment/deployment-to-elastic-beanstalk/)） | ◯（[参考](http://novoit.eu/blog/02-deploying-code-to-amazon-opsworks-using-codeship)）  |                                                                                    |
| [CircleCI](https://circleci.com/)  | ◯                                                                                      | ✕   | ◯（[参考](https://circleci.com/docs/continuous-deployment-with-heroku)） | ◯（[参考](https://circleci.com/docs/deploy-google-app-engine)）                        | ◯（[参考](https://circleci.com/docs/continuous-deployment-with-aws-codedeploy)） | △（ビルド時にEB CLIをインストール）                                                                     | △（[参考](http://shoheik.hatenablog.com/entry/2015/02/07/132155)）                      | ✕                                                                                  |
| [Wercker](http://wercker.com/)     | △（[参考](http://blog.wercker.com/2013/08/22/Simplifying-ssh-based-deployment.html)） | ✕   | ◯                                                                         | △（[参考](http://blog.wercker.com/2013/08/22/Deploying-Go-to-Google-App-Engine.html)） | △（[参考](http://blog.mah-lab.com/2014/06/26/wercker-opsworks-deploy/)）         | △（ビルド時にEB CLIをインストール）                                                                     | △（[参考](https://app.wercker.com/#applications/53747f00bd733d060a0b4802/tab/details)） | △（[参考](http://chocoby.jp/blog/2014/11/19/middleman-s3-deploy-using-wercker/)） |
| [drone.io](https://drone.io/)      | ◯                                                                                      |     | ◯                                                                         | ◯（Beta）                                                                               | △（[参考](http://readme.drone.io/plugins/aws_codedeploy/)）                      | ✕                                                                                                       | △（[参考](http://readme.drone.io/plugins/aws_opsworks/)）                               | △（[参考](http://readme.drone.io/plugins/s3/)）                                   |

# 対応言語比較

環境構築設定等をしなくても、デフォルトで使用できる言語を比較しました。

| サービス                             | PHP     | Ruby    | Python  | Java | Scala | Haskell | Go                                                               | JavaScript | Mobile(Java/Swift) |
|--------------------------------------|---------|---------|---------|------|-------|---------|------------------------------------------------------------------|------------|--------------------|
| [TravisCI](https://travis-ci.com/)   | ◯       | ◯       | ◯       | ◯    | ◯     | ◯       | ◯                                                                | ◯          | ◯                  |
| [CODESHIP](https://codeship.com/)    | ◯       | ◯       | ◯       | ◯    | ◯     | ✕       | ◯                                                                | ◯          | ✕                  |
| [CircleCI](https://circleci.com/)    | ◯       | ◯       | ◯       | ◯    | ◯     | ◯       | △（[参考](https://robots.thoughtbot.com/configure-circleci-for-go)） | ◯          | ◯                  |
| [Wercker](http://wercker.com/) | ✕       | ◯       | ◯       | ✕    | ✕     | ✕       | ◯                                                                | ◯          | ✕                  |
| [drone.io](https://drone.io/)        | △(Beta) | △(Beta) | △(Beta) | ◯    | ◯     | ◯       | ◯                                                                | ◯          | ✕                  |

# リポジトリ・デプロイ機能比較

デフォルトで対応しているリポジトリを比較しました。

| サービス                             | GitHub | Bitbucket | Gitlab                                                                                                            |
|--------------------------------------|--------|-----------|-------------------------------------------------------------------------------------------------------------------|
| [TravisCI](https://travis-ci.com/)   | ◯      | ✕         | ✕                                                                                                                 |
| [CODESHIP](https://codeship.com/)    | ◯      | ◯         | ✕                                                                                                                 |
| [CircleCI](https://circleci.com/)    | ◯      | ✕         | ✕                                                                                                                 |
| [Wercker](http://wercker.com/) | ◯      | ◯         | ✕（[もうすぐ来るかも?](https://wercker.uservoice.com/forums/181077-general/suggestions/4999556-gitlab-support)） |
| [drone.io](https://drone.io/)        | ◯      | ◯         | ✕（[OSS版なら可](http://qiita.com/letusfly85/items/f1f7dd6a86d5a5cade59)）                                        |

# 通知機能比較

| サービス                           | HipChat                 | Slack                   | Flowdock                                                  | Grove.io                                                       | Campfire                                                                                       | メール | Webhook                                                                 |
|------------------------------------|-------------------------|-------------------------|-----------------------------------------------------------|----------------------------------------------------------------|------------------------------------------------------------------------------------------------|--------|-------------------------------------------------------------------------|
| [TravisCI](https://travis-ci.com/) | ◯                       | ◯                       | ◯                                                         | △（[参考](https://github.com/jdoconnor/travis-grove-bridge)） | ◯                                                                                              | ◯      | ◯                                                                       |
| [CODESHIP](https://codeship.com/)  | ◯（メッセージ編集不可） | ◯（メッセージ編集不可） | ◯                                                         | ◯                                                              | ◯                                                                                              | ◯      | ◯（[参考](https://codeship.com/documentation/integrations/webhooks/)） |
| [CircleCI](https://circleci.com/)  | ◯                       | ◯                       | ◯                                                         | ✕                                                              | ◯                                                                                              | ◯      | ◯                                                                       |
| [Wercker](http://wercker.com/)     | ◯                       | ◯                       | △（[プラグイン](https://www.flowdock.com/help/wercker)） | ✕                                                              | △（[プラグイン](https://app.wercker.com/#applications/51f2a3e8df5a46247c000e0d/tab/details)） | ◯      | ◯                                                                       |
| [drone.io](https://drone.io/)      | ✕                       | ✕                       | ✕                                                         | ✕                                                              | ✕                                                                                              | ◯      | ✕                                                                       |

# おわりに

本当はもっと多くの機能やサービスを比較したかったのですが、思ったより情報がまとまっておらず、時間がかかってしまったのでこの辺にします。
実際に各種使ってみて出来ること出来ないことがわかったらアップデートしていきます。