公開日

GitHub Actionsファーストインプレッション 〜v1との違い、導入方法、価格、良い点・悪い点〜

(image)GitHub Actionsファーストインプレッション 〜v1との違い、導入方法、価格、良い点・悪い点〜

GitHub Actions v2(beta)が手元に降ってきたので試してみた記事です。

※まだBeta版なので本エントリに書いてある記述は古くなるなる可能性があります。最新情報は適宜公式ドキュメントを参照してください。

公式ドキュメント: Automating your workflow with GitHub Actions - GitHub Help

TL;DR

  • GitHub Actions v2、間違いなく顧客が求めていたもの
  • 複雑なワークフロー組むにはちょっとまだバギーなので利用は控えとくのがよさげ(シンプルなものなら検討可)

実際に対応してみたPull Request

GitHub Actions v1, GitHub Actions v2がある

まず注意点なのですが、GitHub ActionsにはGitHub社内的にGitHub Actions v1と呼ばれているものとGitHub Actions v2と呼ばれているものの2種類あります1

追記

GitHub Actions v1がDeprecatedになったため、現在はv1の多くのコンテンツがv2の内容で置き換わってます。

それぞれ違いを下記に列挙します。

 GitHub Actions v1GitHub Actions v2
特徴汎用的なワークフロー型の
自動化ソリューション
CI機能を備えた
自動化ソリューション
記述言語HCLYAML(JS拡張可)
公開ステータス2019年9月一杯でdeprecatedになる
Deprecated
public beta
(順次ロールアウト中)
ドキュメントURLdeveloper.github.com
※現在アクセス不可
help.github.com
サポートOSLinuxLinux/Mac/Windows
環境設定Dockerfileを自ら記述用意されたOSを選択して利用
バックエンドインフラ?(おそらくGitHub Cloud?)Azure PipelinesのFork
マーケットプレイスGitHub MarketplaceGitHub Marketplace
※v1と同一URL

2つあるので、「GitHub Actions」というキーワードでGoogle検索したときに古いv1の情報が出てくることもあるので注意してください。v1前提なのかv2前提なのかで全く内容が異なってきます。

またv1が手元で使えるからといってv2が自動的に使えるわけではありません。それぞれ別物なのでv1が使えてたとしても、v2が利用可能対象ユーザーとして降ってくるまでは使えません。

導入方法

設定方法は簡単。GitHub Action v2が使える対象になっていれば、下記のように表示されますので Enable Repository してください。

Enable Repository

有効化されると、下記画面が出てくるのでGUIでポチポチワークフローを設定するもよし。

Enable Repository 2

.github/workflows以下に直接YAMLを置くもよし。動くYAMLサンプルは下記の公式 starter-workflows レポジトリを覗いてみるとよいかと思います。

Accelerating new GitHub Actions workflows: https://github.com/actions/starter-workflows/tree/master/ci

価格

気になる価格はどうでしょう。

pricing

Public Repoは 完全無料。並列数も 20並列 まで使える模様。

TravisCI, CircleCIと比較されることが多いかと思いますが、どちらのCIサービスも同じように無料で使えるものの並列数に制限があったり、CIジョブのキューイング・実行が遅かったりするので、今回のGitHub Actionsは完全にTravisCI, CircleCIを殺しにきたと言えるでしょう。

良い点

  • 主要OSであるLinux/Mac/Windowsはすべて対応
  • イベントをhookしてからジョブが走り出すまでが早い
  • GitHubサービス内で完結する
    • いろんなページを行ったり来たりしなくてよい
  • 並列数がしっかり確保されている
  • GITHUB_TOKENが自動的に発行される
    • 外部CIサービスの場合、新たにTokenを払い出す必要があったので手間だった
  • GitHubとカジュアルに連携できるということで使い方の可能性は無限大…!!!
    • lintしてPRにコメント
    • /x/path に変更あったら xxx のジョブ起動
    • PR/Issueへの自動ラベリング
    • Tagプッシュされたらリリース
    • 何らかの条件でIssueの作成/クローズ
    • GitHubのコメントでチャットボット的な感覚でワークフロー呼び出し
    • などなど

悪い点

  • キャッシュ機構がない
  • Slack通知が公式では用意されていない
  • [ci skip] 機能がない
  • ドキュメントが少ない
  • CI Status Badgeがない
  • Betaなのでまだいろいろとバギー
    • 例: 公式の提供するAction(setup-go,setup-ruby)が一部うまく動いていなかったりする
    • (追記) だいぶ安定してきた感はあります
  • サポート問い合わせてもなかなか返信がこない(おそらくGitHubの中のサポート体制がまだ整っていない)
    • (追記) もうGitHubの中のサポート体制は整ったと思われるので、比較的返事も早く返ってくるようになった模様
  • eventの粒度がちょっと荒め?
    • 例えば create イベントには Branch or Tag のcreateイベントが含まれるけど、ほしいのはtagのみのtag_createイベントなんだよなぁみたいなとき
    • 意図しないイベントを拾ったりする(branch deleteでイベントトリガーされるとか)

しかし今回のGitHub Actions as CI神機能をみんな使わないわけないので、上記の足りない点は近い将来(正式公開前くらいには)、大体直ると考えています。なので僕はGitHub Action as CIとしての機能強化はわりと楽観的にのんびり待っている感じです。

結論

  • GitHub Actions v2、間違いなく顧客が求めていたものと言えます。オープンソースは基本はGitHub ActionsでCIを動かすことになっていくでしょう
  • 上述した悪い点が飲み込めて、沼る覚悟がある方はGitHub Actions v2が利用可能になった時点で導入を前向きに検討しても良いかもしれません。ただCircleCIなどで行っているような複雑なワークフローの移行は、まだ知見も少ない状況なのでなかなか大変な作業だと思います
  • 今後どんどん便利になって、いろんなバリエーションのActionもサポートされていくと思われるので、ガンガン使ってより良いCIライフにしましょう
  1. GitHubのサポートの方がそのようにGitHub Actionsを呼び分けていました。