だらだら更新していきたい技術ブログ

CIサービスを比較したい

巷にはCIサービスが色々あるそうですね。せっかくなのでいくつかのサービスを齧って比較してみましょう。
今回は個人開発利用をターゲットとして、CIまでの手順とビルド時間当たりの料金についてみていきたいと思います。

※2019年7月31日現在の情報を元にしています。

始めに

試してみたサービス一覧

  • Travis CI
  • CircleCI
  • CodeShip

また、手前味噌ですがGitLabは以前試してみてQiita記事を書いているので、そちらをご覧ください。

対象読者

  • 個人開発でCIサービスを使ってみたい人
  • とにかく楽にCIしたい人
  • 必要な手順や金額をなんとなく知りたい人

今回CIするプロジェクトについて

create-react-appしてstorybookを追加しただけの簡単なReactアプリを使います。自動生成されたテストをそのまま利用。
なのでnode環境さえあれば以下の2コマンドでテストが実施できます。

npm install  # yarn install  
npm test  # yarn test  

ビルド → テストができることを目標にします。
(通常の業務ではさらにデプロイの必要がありますが、今回は行いません)

Travis CI

Travis CIはGitHubプロジェクト専門のCIサービスのようです。
簡単なプロジェクトならサクッとCI実装できるみたいですね。

CIまでの手順

Travis CIのHPからサインアップします。GitHubのOAuth認証画面に遷移するのでOKしましょう。
リダイレクトされた画面で少し待つと、自分のアカウントが管理するリポジトリが一覧表示されます。CIしたいリポジトリを有効にしましょう。
最後に左上のTravisCIをクリックするとホーム画面に遷移できます。Travis CI側の準備はこれで完了です。

次にリポジトリ側でCI設定ファイルを作成します。Getting Startedはこちら
リポジトリ配下の最上位に.travis.ymlファイルを作成します。今回はReactアプリを使うため、言語はnodejsを選択します。

language: node_js  
node_js:  
  - "node"  # 最新バージョンのnodejsを自動で選択  

ね、簡単でしょう?
あとはいつものコミット&プッシュでOKです。Travis CIが勝手にプッシュを検知してジョブを実行してくれます。

nodejsの場合、Travis CIはデフォルトでnpm installnpm testを実行してくれます。
また、リポジトリにyarn.lockが含まれている場合はnpmの代わりにyarnを使ってくれます。賢い。

これらの手順をまとめると以下の通りになります。

javascript(node.js)プロジェクトをTravis CIでCIする

  1. GitHub連携でTravis CIにサインアップする
  2. CI対象のリポジトリを有効にする
  3. リポジトリに.travis.ymlファイルを作成する
  4. .travis.ymlファイルでnode.jsの最新バージョンを利用するように指定する
  5. コミットしてリポジトリにプッシュする

これだけ。ね、簡単でしょう?

なんでこれだけで動くの?

Travis CIにはジョブライフサイクルが規定されていて、順番にしたがってジョブが実行されます。
詳細は公式のドキュメントを見てほしいのですが、おおざっぱに分けるとinstall -> scriptの順に実行されます。
そして言語によってそれぞれのデフォルト値が与えられます。nodejsの場合はこちらに書いてある通りinstall: npm installscript: npm testです。
もちろんそれぞれのジョブを各人で自由に変更可能なので、決して自由度が低いということはありません。

料金形態

Travis CIの料金形態はこちら。簡単にまとめると以下の通り。

  • オープンソースプロジェクトの場合は完全無料
  • 他プランは $69/月~
    • 料金形態は並行ジョブ数で変化し、最低プランだと1
  • いずれもビルド時間、リポジトリ数、ユーザー数は無制限

オープンソースプロジェクト(publicリポジトリ)の場合、これといった制限は無さそうです。おそらく個人開発なら十分でしょう。
privateリポジトリの場合は無料プランは無く、最低でも$69/月。ビルド時間等に制限がないことが魅力ですが、月々7000円は尻込みしてしまいますね。ちなみに年間プランだと11か月分の料金で済むそうです。
ところで公式から料金形態ページへのリンクが全然見つからないのは私だけでしょうか。

CircleCI

CIサービスというとCircleCIとTravis CIの二つがメジャーな気がします。
ちなみにTravis CIと同じく、CircleCIもオープンソースプロジェクトなら無料で利用できるようです
大半のCIサービスはオープンソースプロジェクトにおける利用を無料化しているようですね。

CIまでの手順

CircleCIのHPからサインアップします。
今回はGitHubリポジトリを利用するので、Sign Up with GitHubを選択します。この時に連携するリポジトリをpublicのみにするかどうか選択できます。

新規にプロジェクトを開始するか、既存のプロジェクトに参画するかを選べるようです。今回は新規プロジェクトなので左下のStart a Projectを選択します。
次のページはOSとリポジトリの選択ですね。LinuxとmacOSが選べますが、理由が無ければデフォルトのLinuxでいいでしょう。CIを行うリポジトリのSet Up Projectを選択します。

次はプロジェクト設定画面です。ここではOSと言語が選択できるようですが、OSは先ほどと同じくLinux、言語はNodeを選択します。言語を選択した時点でCircleCIにおける設定ファイルのconfig.ymlサンプルが表示されます。
最後にStart buildingをクリックします。最初にmasterブランチのビルドが走りますが、設定ファイルが無いため当然失敗します。気になる方は先にmasterブランチに設定ファイルをコミットしておきましょう。
これでCircleCI側の準備は完了のようですね。

では、リポジトリ側で設定ファイルを作成しましょう。リポジトリのトップに.circleciディレクトリを作成し、その中にconfig.ymlファイルを作成します。
config.ymlファイルはサンプルをそのままコピペしましょう。ちなみにnodeの場合は以下の通りです。

# Javascript Node CircleCI 2.0 configuration file  
#  
# Check https://circleci.com/docs/2.0/language-javascript/ for more details  
#  
version: 2  
jobs:  
  build:  
    docker:  
      # specify the version you desire here  
      - image: circleci/node:7.10  

      # Specify service dependencies here if necessary  
      # CircleCI maintains a library of pre-built images  
      # documented at https://circleci.com/docs/2.0/circleci-images/  
      # - image: circleci/mongo:3.4.4  

    working_directory: ~/repo  

    steps:  
      - checkout  

      # Download and cache dependencies  
      - restore_cache:  
          keys:  
            - v1-dependencies-{{ checksum "package.json" }}  
            # fallback to using the latest cache if no exact match is found  
            - v1-dependencies-  

      - run: yarn install  

      - save_cache:  
          paths:  
            - node_modules  
          key: v1-dependencies-{{ checksum "package.json" }}  

      # run tests!  
      - run: yarn test  

内容は読めばだいたいわかりますね。
変更をコミット&プッシュすることでCIが走ります。これでCIできるようになりました!

javascript(node.js)プロジェクトをCircleCIでCIする

  1. GitHub連携でCircleCIにサインアップする
  2. CI対象のリポジトリを選択する
  3. 言語を選択し、設定ファイルテンプレートをコピーする
  4. リポジトリに.circleci/config.ymlファイルを作成する
  5. 上記.circleci/config.ymlファイルにコピーしたテンプレートを張り付ける
  6. コミットしてリポジトリにプッシュする

画面に従うだけなので難しくないと思いますが、途中で設定画面があるので拒否反応を示す人もいるかもしれません。

料金形態

まず、オープンソースプロジェクトの場合は4コンテナを自由に利用できます。今回行ったビルドもpublicリポジトリだったため、自動でオープンソースプロジェクト扱いされたようです。個人開発ならこれで十分でしょう。
他のプランについては、最近になって新しい料金形態が追加されたようです。今回はこちらを簡単にまとめようと思います。

  • オープンソースプロジェクトの場合、コンテナ数は4、他は無制限
  • 他のプランは $0/月~
    • 無料プランだと 2,500クレジット(250分)/週 、ユーザー数3、並列ジョブ数1
    • 有料プランでは最低 $23/月 、25,000クレジット/$15 、$8/ユーザー (最大25ユーザー)、並列ジョブ数5

詳細については公式ページを直接ご確認ください。
最大の特徴はクレジット制であること。無料プランでは毎週2,500クレジットまで無料利用できます。これは無料プランにおける250分に該当するため、実質 250分/週 まで無料利用できると考えていいでしょう。Docker層のキャッシュを保存する場合は 200クレジット/ビルド かかるので注意。
有料プランの場合は最低 $23/月 ですが、これとは別にクレジットを購入する必要があるようです。実際には試していないので推測になりますが、必要な時間の分だけクレジットを購入すればいいようです。また、月々25,000クレジット単位で自動購入する設定も可能なようです。

旧料金形態はこちら。こちらにも無料プランと有料プランがありますね。
無料プランは 1000分/月 まで無料、かつユーザー数無制限なので、利用方法によってはこちらの方が適切かもしれません。
有料プランは最低でも $50/月 かかります。ビルド時間等が無制限になりますが、おそらく新プランの方がリーズナブルに利用できるかと思います。

CodeShip

CodeShipの公式はこちら。
特にオープンソースだから無料とか言ったことは無いようです。

CIまでの手順

いつものGitHub連携サインアップから始めます。Create New Organizationと言われるので、任意の名前でOrganizationを作りましょう。

次は……利用情報の収集許可でしょうか。とりあえずNo thanksで。
ダッシュボード画面が表示されるので、画面中央のNew Projectを押しましょう。SCM選択を要求されますが、今回はGitHubを選択します。

GitHubリポジトリとの接続画面になりますが、このままでは何もできません。文中のinstall our GitHub AppリンクをクリックしてGitHubにCodeShipをインストールしましょう。
完了したら元の画面に遷移しますが、今度はセレクトボックスを選択できるようになっているはずです。CI対象のリポジトリを選択しましょう。
次にプロジェクトタイプを選択します。今回は手っ取り早く動きそうなBasicにしましょう。

CodeShipはブラウザ上からビルド・テストの設定を行うようです。
まずは画面下部のAdd Pipelineをクリックします。
一度別画面に移ってから再びテスト設定画面に戻るとパイプラインの入力画面が出てきます。今回はReactプロジェクトなのでnpmを利用することを勧められますが、yarnサポートもされているようなので以下の通りに書き加えましょう。

yarn install  
yarn test  

リポジトリ側ですが、特に何もする必要がありません。設定ファイルは不要です。
あとはBuild Triggers設定に基づいてビルドが勝手に走ります。

javascript(node.js)プロジェクトをCodeShipでCIする

  1. GitHub連携でCodeShipにサインアップする
  2. Organization、およびProjectを作成する
  3. GitHubにCodeShipをインスト―ルし、CI対象のリポジトリおよびプロジェクトタイプを選択する
  4. 新規パイプラインを作成し、ビルド・テストコードを入力する
  5. コミットしてリポジトリにプッシュする

ブラウザですべて完結するのは珍しいかもしれません。
リポジトリを汚さずに済みますが、ビルド・テスト手順をバージョン管理できないと考えると一長一短でしょうか。

料金形態

CodeShipの料金形態Pro版Basic版で違うようですが、とりあえず今回はBasic版を見ていきましょう。

  • 無料プランの場合、100ビルド/月 まで
  • 有料プランの場合、ビルド無制限、$49/月~
  • いずれもユーザー数、プロジェクト数は無制限

わかりやすいですね。
無料プランの 100ビルド/月 は少々物足りない気がします。土日に個人の趣味でちょこちょこ動かす程度なら十分かとは思いますが……
有料プランは $49/月 から。ビルド無制限なので個人開発なら十分でしょう。どうやら $50/月 あたりが有料プランの最安値平均値みたいですね。

GitLab CI

こちらは以前に利用したことがあるので、今回は料金についてだけ見ていきましょう

使用感

試してみた雑感を書いていきます。

  • Travis CI
    • 言語設定だけでデフォルトのビルドとテストが動くようになるのでとにかく楽
    • とりあえずこれ使っとけ感
  • CircleCI
    • 画面やら設定やらゴチャッとしててわかりにくく感じる
    • 設定ファイルのテンプレートを用意してくれているので後々の編集が楽そう
  • CodeShip
    • 全部ブラウザでできるのでエディター開きたくないマンにオススメ
    • コードは結局書かないといけない

まとめ

  • とにかく早く動く状態にしたい → TravisCI
  • オープンソースで開発したい → TravisCI、CircleCI
  • privateリポジトリの有料サービスってだいたいいくら? → $50/月

といったところでしょうか。
個人的にオープンソースならTravisCI、privateリポジトリで開発するならGitLab CIを使えば十分かと感じました。
もちろん他にもCIサービスはここに載せた以外にもまだまだあるようなので、気になる方はぜひ調べてみてください。

参考文献

C++初心者のみんな、単体テストとCIを組めるようになって君もライブラリ製作者の仲間入りしよう!
Travis CI
CircleCI
CodeShip
GitLab

この記事へのコメント

まだコメントはありません