イベント

GitHub、さまざまなワークフローを自動化するツール「GitHub Actions」を発表

GitHub Universe 2018レポート

 コード共有サイトのGitHubは、年次イベント「GitHub Universe 2018」を10月16~17日に開催した。会場はサンフランシスコのパレス・オブ・ファイン・アート。

 初日の基調講演では、テストやデプロイなどGitHubにホストされるコードのワークフローを自動化する機能「Actions(GitHub Actions)」など、いくつかの新機能が発表された。本記事では、このGitHub Actionsの発表についてレポートする。

CI/CDやissue対応などさまざまなワークフローを自動化

 まずSam Lambert氏(Head of Platform)が背景として、大手サービスとのプラットフォーム連動機能を最近進めていることを紹介。7月にはGoogle Cloud Buildとの統合を、9月にはAzure Pipelinesとの統合を、つい最近ではイシュートラッカーのJiraとの統合を発表している。

 そしてLambert氏は、「開発者は毎日、無駄なワークフローで時間と手間を費やしている」と語った。

 これらを背景に、「Actions(GitHub Actions)」が紹介された。GitHub Actionを使うと、一連の作業を自動化するワークフローを、GUIでビジュアルに作成し、それをGitHub上で実行したりシェアしたりできる。これにより、CI/CDパイプラインのように一連の作業を自動化できるわけだ。

 GitHub Actionsの具体的な機能については、Kyle Daigle氏(Director, Ecosystem)がデモをまじえて解説した。

 Daigle氏による1つめの例は、npmモジュールにタグの打たれたコミットがプッシュされたら、自動的にテストを実行し、問題がなければnpmリポジトリで公開するワークフローを作成するデモだ。GUIのドラッグ&ドロップでアクションを1つずつ追加する。

 まずGitHubのリポジトリからタグでフィルターするアクションを追加する。次に、テストを実行するアクションとして、npmコマンドを実行するアクションを追加してつなげ、引数として「test」を指定する。さらにnpmリポジトリに公開するアクションをつなげる。ちなみに、npmのシークレットトークンは暗号化されて、コードとは別に保存される。

 これにより、ローカルのgitでタグを打ってgit pushすることで、テストが実行され、それが成功してnpmリポジトリに公開されるところがデモされた。

 2つめの例は、issueに対してメッセージを送るワークフローが紹介された。重複したissueにその旨をコメントしたりできる。

 3つめの例は、簡単なNode.jsアプリケーションからDockerイメージを作り、複数のクラウドに並列でデプロイするものだ。Zeit、Heroku、Azure、Google Cloud、AWSにデプロイするものだ。実際にデモがなされ、各サービスのURLで同じアプリケーションの画面が表示されるところが見せられた。

 GitHub Actionsはベータバージョンとして公開を開始し、サイト上でベータテスターを募集している。すでに、さまざまなアクションや、ワークフローのサンプルがGitHubで公開されている。

ワークフローの例。これはブレークアウトセッションでデモされたもので、テストと文法チェックが並列で実行される(以下、写真はブレークアウトセッションのもの)
プルリクエストからワークフローを実行する

ワークフローをコードで書く方法やアクションの作り方も解説

 作成したワークフローは、HCL(HashiCorp Configuration Language)形式のテキストベースのコードで保存される。そのため、最初からGUIでなくコードで書くこともできる。

 Gudmundur Olafsson氏(Software Engineer)によるブレークアウトセッションでは、この書き方も紹介された。基本的には各アクションを「action」で定義し、その中で「uses =」という文で実体する内容を指定する。そのほか、引数を指定する「args =」や、環境変数を指定する「env =」などがあるという。

上の写真で示したワークフローに対応するコード
アクションの形式

 なお、各アクションは、Dockerコンテナとして実行される。アクションの実体はDockerイメージに入っているLinuxコマンドであり、Actionの実行はそのコマンドを実行することになるわけだ。

 このアクションの作り方として、アクションを作るためのDockerfileの書き方も解説された。実例は前述したGitHub上で公開されたアクションで見ることができる。

 アクションのDockerfileでは、アクションを説明するさまざまな情報を「LABE」文で指定する。そのうえで、実行するLinuxコマンドを「ENTRYPOINT」で指定する。

 コンテナには、環境変数によって実行環境にはさまざまな情報が渡ってくる。この環境変数には「immutable environment(不変の環境情報)」と「mutable environment(変わる環境情報)」の値がある。mutable environmentにはリポジトリ名やアクション名などのアクション共通の値が、mutable environmentには設定やクレデンシャル情報(認証のための情報)などがあるという。

 なお、このセッションは「Connecting your software lifecycle with GitHub's platform」というタイトルだけ事前公開されていたが、基調講演でGithub Actionが公開された後は、多くの参加者でにぎわっていた。

アクションのDockerfileの例
環境変数(immutable environment)の例