GitHub Actions の紹介と基本的な使い方

ソフトウェア開発を効率化する CI/CD が注目される中、GitHub Actions は GitHub で CI/CD を実現できるツールであり、無料で利用できるだけでなく、ほかの CI/CD ツールに劣らない機能を提供する。この記事では、GitHub Actions の概要から、活用時の利点と注意点、利用例までを整理する。

GitHub Actions

GitHub Actions とは? ワークフロー自動化を実現する機能

GitHub Actions は、あらかじめ定義した処理と条件の組み合わせ、つまりワークフローを自動化する GitHub 公式機能である。
GitHub Actions では、リポジトリへの push などの処理をトリガーとして、専用 Workflow に定義した処理を自動で実行する。
GitHub Actions を使うと、開発で注目されている CI/CD を実現できる。

GitHub Actions を構成する主な要素と機能

GitHub Actions は複数の構成要素と機能で構成されている。その中でも主なものは次のとおりである。

Action | あらかじめ定義された作業を実行するカスタムアプリケーション

Action は、あらかじめ定義された作業を実行する GitHub Actions 専用のカスタムアプリケーションである。既存の Action は GitHub Marketplace で探すことができ、自分で Action を作成することもできる。

主な Action

実際にどのような Action があるのか、主な例を見てみよう。

Action の例

Action 説明
checkout リポジトリからファイルをチェックアウトする。
upload-artifact 任意のファイルを成果物として保存する。
download-artifact 成果物として保存されているファイルをダウンロードする。
cache 依存関係やビルド結果をキャッシュして処理速度を上げる。
github-script GitHub API を通じて GitHub の各種機能にアクセスする。
create-release GitHub Release API を通じてリリースを作成する。
stale 一定期間使われていない Issue や Pull Request がある場合に警告したり閉じたりする。
labeler Pull Request にラベルを付与する。
delete-package-versions GitHub Packages からパッケージバージョンを削除する。
setup-node Node.js 環境を構築する。
setup-python Python 環境を構築する。
setup-go Go 環境を構築する。
setup-dotnet .NET CLI 環境を構築する。
setup-java Java 環境を構築する。
toolkit Action を簡単に作成するためのツールキットを利用できるようにする。
javascript-action JavaScript Action を作成する。
typescript-action TypeScript Action を作成する。

Workflow | 実行する処理とその条件をまとめたプロセス

Workflow は、実行する処理と、その処理を実行する条件をまとめたプロセスである。複数の Action を組み合わせて Workflow を作成することもできる。

Runner | ワークフローを実行するサーバー

GitHub では、Workflow を実行するサーバーまたは環境を Runner と呼ぶ。GitHub Actions を利用するときは、GitHub 公式が提供する仮想マシンを Runner として利用できる。自分で Runner を準備して使用することもできる。

Job | 同じ Runner で実行されるワークフローの段階

Job は、同じ Runner で実行されるワークフロー内の段階を意味する。Job はほかの Job との依存関係を設定することもできる。基本的に Job は、Job 間の依存関係がなければ並列で実行される。

GitHub Actions を使う利点

GitHub Actions 以外にも、CI/CD のような自動化を実現するツールは存在する。その中でも GitHub Actions の最大の利点は、GitHub が提供する仮想サーバーを利用できる点である。

GitHub Actions を使うと、ユーザーが自分でサーバーを準備する必要がない。また、仮想サーバーではなく物理サーバーを使う必要がある場合は、ユーザーが自分でサーバーを準備して GitHub Actions を使用することもできる。

さらに、GitHub 関連の処理の自動化は公式機能であるため、GitHub Actions を通じてスムーズに実装できる。これは、ほかのツールにはない GitHub Actions ならではの利点である。

GitHub Actions 利用時の注意点

GitHub Actions には、利用プランに応じて次のような機能制限がある。

プラン 最大同時 Job 数 最大同時 Job 数 (macOS) 利用可能な時間制限 利用可能な保存容量
Free 20 5 2,000 分/月 500 MB
Pro 40 5 3,000 分/月 1 GB
Team 60 5 10,000 分/月 2 GB
Enterprise 180 50 50,000 分/月 50 GB

また、GitHub Actions は利用ポリシーの範囲内でのみ使用できる。GitHub の各プランと利用規約の詳細は、次の公式サイトで確認できる。

GitHub Actions の活用例

GitHub Actions はさまざまな用途に活用できる。以下に、参考になる利用例をいくつか紹介する。

  • リリースノートやリリース Source などを自動生成して、ソフトウェアリリース作業を効率化する。
  • Java や Python などの環境を自動的に構築する。
  • Pull Request の内容などを Slack やメールで自動通知する。
  • push のたびに JavaScript Lint を実行する。

ここで紹介したもの以外にも、GitHub Actions のさまざまな活用例を考えられる。

GitHub Actions の基本的な使用例

ここでは GitHub Actions を実際に設定しながら、基本的な使い方を確認する。

Git のインストール、GitHub アカウント作成など、GitHub 関連の初期設定は完了しているものとする。

まず、GitHub 管理画面で GitHub Actions を設定する専用リポジトリを作成する。GitHub 管理画面で ‘New’ をクリックする。

GitHub Actions 用リポジトリ

リポジトリ作成画面が表示される。リポジトリ名(‘Repository name’)に任意の名前を入力し、‘Create repository’ をクリックする。

リポジトリ名入力

Git bash などで次のコマンドを実行し、作成したリポジトリをローカルに clone する。

HTTP:
git clone https://github.com/[ユーザー名]/[リポジトリ名].git

SSH:
git clone git@github.com:[ユーザー名]/[リポジトリ名].git

ユーザー名が devkuma、リポジトリ名が test の場合、次のようなコマンドになる。

HTTP:
git clone https://github.com/user/git-actions.git

SSH:
git clone git@github.com:devkuma/git-actions.git
% git clone git@github.com:devkuma/git-actions.git
Cloning into 'git-actions'...
warning: You appear to have cloned an empty repository.

clone したローカルリポジトリ内に .github/workflows というフォルダを作成し、そのフォルダ内に actions-test.yml というファイルを 1 つ作成する。この actions-test.yml が GitHub Actions のワークフローになる。

% cd git-actions
% mkdir -p .github/workflows
% cd .github/workflows
% touch actions-test.yml

GitHub Actions のワークフローは .github/workflows というディレクトリに保存する。 workflow は YAML 形式(.yml)で作成する。

次に、任意のテキストエディタで actions-test.yml を次のように編集する。

name: actions-test
on: [push]
jobs:
  check-bats-version:
    runs-on: ubuntu-latest
    steps:
      - run: echo "Hello World"

このファイルの意味は次のとおりである。

コード 説明
name: actions-test actions-test という名前のワークフローを作成する。
on: [push] push が実行されたとき。
runs-on: ubuntu-latest 最新版の Ubuntu 環境を準備する。
run: echo "Hello World" echo "Hello World" コマンドを実行する。

これで GitHub Actions のワークフローファイルが作成された。ファイル作成後、次の順序でファイル追加、コミット、push を実行する。

git add .
git commit -m "[Add] actions test"
git push

この push が実行されると workflow が実行される。

実際にワークフローが実行されるか確認してみよう。GitHub 管理画面で先ほど作成したリポジトリへ移動し、‘Actions’ メニューを開く。

Actions メニューの位置

GitHub Actions の管理画面が表示される。次のように git commit で指定したコメント名で GitHub Actions のログが記録されているため、このログをクリックして確認する。

GitHub Actions ログ

次に、次の順序でクリックする。

Step 案内

Step 実行

次のような画面が表示され、workflow で指定したとおりに Run echo "Hello world!" というコマンドが実行されたことを確認できる。

コマンド実行確認位置

今回紹介した例から分かるように、GitHub Actions の workflow では Ubuntu 環境を準備し、Ubuntu 内でさまざまなコマンドを実行することもできる。

まとめ

GitHub Actions を使うと、Push などの操作をトリガーとして指定した作業を自動実行でき、GitHub Actions を通じて CI/CD も実現できる。

GitHub Actions では GitHub が提供する仮想サーバーを利用できるため、ユーザーが実行環境を別途準備して運用する必要がない。また、GitHub 公式機能であるため GitHub との連携が容易である点も、ほかの CI/CD ツールにはない利点である。

GitHub Actions は、リリースノートの自動生成、push のたびに JavaScript Lint を自動実行するなど、さまざまな用途で便利に使える。一方で、Free プランでは同時実行できる最大 Job 数が 20 個までに制限されている点、GitHub Actions を使用するときは公式サイトにまとめられた利用規約を遵守する必要がある点にも注意する。