GitHub Actionsのβ版が利用できるようになったので、実際にさわりながら確認してみました。
CIツールを選定する際に気にしている観点でGitHub Actions、Travis CI、CircleCIを比較してみました。
(主に個人開発時のCIツールとしての観点が強いかと思います)
なお、いずれのCIツールも機能や仕様は本記事作成時点のものなのでご了承ください。
間違っている部分はコメント等で指摘いただけると助かります。
料金
個人開発だと気になる料金です。
GitHub Actions
publicリポジトリ:無料
privateリポジトリ:月2000分まで無料
Travis CI
publicリポジトリ:無料
privateリポジトリ:料金プラン
CircleCI
無料プラン:2500クレジット/週 = 2000分/月 (1vCPU/2GBのスペックの場合)
料金プラン
並列ジョブ数
DependabotによりPRが量産されるので、意外と重要だと思います。
GitHub Actions
1リポジトリ20ワークフローまで可能
Travis CI
記述をドキュメントから見つけられず
状況次第という記述あり
CircleCI
無料プランなら1並列まで
OS
各サービスとも、Linux, macOS, Windowsに対応しているようです。
(個人的には最新と1個前のLinuxに対応しているなら十分ですが)
GitHub Actions
-
ubuntu-latest
,ubuntu-18.04
, orubuntu-16.04
-
windows-latest
,windows-2019
, orwindows-2016
-
macOS-latest
ormacOS-10.14
Travis CI
CircleCI
- Linux(Docker or Machine)
- macOS
- windows: 2019/08からサポートされ始めたようです blog
各言語の実行環境
プログラミング言語の実行環境のサポート状況です。
これも個人開発ならメジャーな言語の最新版がサポートされていれば十分といったところ。
設定が楽かどうかも重要です。
GitHub Actions
下記のようにstep内で言語のセットアップを実施する。
jobs:
test:
name: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: actions/setup-node@v1
Travis CI
かなりの数に対応している。
指定方法も下記のようにシンプル。
language: node_js
CircleCI
それなりの数がサポートされている。
指定はDockerのイメージで指定する。
jobs:
build:
docker:
- image: circleci/python:3.6.2-stretch-browsers
Slack通知
CI結果は当然Slackに通知したいですよね。
Incoming webhookのURLの管理方法が楽だと嬉しい。
GitHub Actions
デファクトスタンダードは未だ無さそう。
公式での対応が待たれる。
いちおう、いくつか調べた範囲では下記ブログで紹介されているプラグインがよさそう。
GitHub Actions(beta)向けにslack通知プラグインを作った
webhookのURLはGitHubのリポジトリにSecretを登録する機能があり、それをGitHub Actionsから参照できる。
Travis CI
SlackにTravisCIのアプリを追加し、tokenを発行する。
travisのUI上 or CLIからtokenを暗号化し、yaml中に指定する。
下記のようにシンプルに記述できる。
notifications:
email: false
slack:
secure: <暗号化されたtoken>
CircleCI
WebUIからIncoming Webhook URLを指定する。
まとめ
- GitHub ActionsはIssueやPRといったGitHubの要素とCIを連携しないなら、いまのところそんなにメリットなさそう
- 設定ファイルのシンプルさではTravis CIが一歩リード
- publicリポジトリで個人開発する範囲ならCircleCIの並列数がちょっと弱い
- CircleCIにはorbsというレシピの共有機能があるので、これをいかに活用するか次第
ということで、個人的にはまだしばらくTravis CIメインでいいかなと思ってます。