GitHub Actionsを使ってWordPressテーマを更新する[第1回]の続きになります。

前回はGitHub Actionsの紹介と初めの一歩として動かすことを紹介しました。今回は作成したGitHub Actionsの説明と作成されたファイルについての紹介をします。

GitHub Actionsで生成されたファイル

第1回でGitHubでやった作業は、下記のように .github ディレクトリが作成されてリポジトリに保存されます。

% tree -a
.
└── .github
    └── workflows
        └── main.yml

.githubディレクトリ内にworkflowsディレクトリが作成されその中にGitHubで作成したmain.ymlが存在します。

workflowディレクトリ内にあるYAMLファイルを編集したり追加したりしてコミットしそれをGitHubにプッシュすることでGitHub Actionsがworkflow内にあるファイルの内容に沿ってイベントが実行される形になっています。

GitHub Actionsで出てくる単語について

他のサービス同様にGitHub Actionsには出てくる単語がいくつか存在し出てくる単語を理解しないとGitHub Actionsを理解するのに時間がかかります。

基本的にはGitHub Actionsのドキュメントをみていただいたほうがいいですが、ドキュメントをみての私なりの解釈を説明します。

ワークフロー (Workflow)

ワークフローは、リポジトリに追加する自動化された手順です。 ワークフローは 1 つ以上のジョブで構成されており、スケジュールまたはイベントによってトリガーできます。 ワークフローを使用して、GitHub でプロジェクトをビルド、テスト、パッケージ、リリース、またはデプロイできます。

GitHub Actions 入門

こう書かれていますが、先ほど説明したGitHub Actionsで作成されたYAMLファイルのことだと認識しています。GitHub Actionsの場合、ワークフローは複数作成してそれぞれのファイルの内容に沿ったイベントからジョブが実行されます。

イベント (Event)

GitHub Actionsが実行されるタイミングのことです。手動実行だったり、GitHubにプッシュされたタイミングだったりをイベントとして呼んでいます。

ジョブ (Job)

後述するステップ、アクション、ランナーの定義のまとまりのことです。ワークフローのところで説明されている1つ以上のジョブがワークフローに書かれています。複数のジョブがある場合、並列にジョブが実行されますが、ジョブの順番を設定して実行できたりします。

ステップ (Step)

後述するアクションをどの順番で実行するかを定義するのがステップです。ステップに沿って同じランナーで実行されます。同じランナーで実行される関係上、アクションでの実行結果はステップ内で共有されます。

アクション (Action)

個々の実行定義です。コマンドだったり後ほど紹介するmarketplaceのパッケージだったりします。

ランナー (Runner)

GitHub Actionsが実行されるサーバーのことでジョブで定義してあるランナーのホストサーバーのOSによって仮想環境上で実行されます。ジョブごとにランナーがあるので、ジョブで説明したような複数のジョブがある場合、並列にランナーが動くような形になります。

ワークフロー(YAMLファイル)について

最初に作成したワークフローについて説明します。下記のコードは最初に作成したワークフローの中身のコメントを日本語化したものです。

main.yml
# ワークフロー
name: CI

# イベント 
on:
  # GitHubにプッシュされた時
  push:
    branches: [ main ]
  # GitHubでプルリクエストが作られた時
  pull_request:
    branches: [ main ]
  # 手動実行
  workflow_dispatch:

# ジョブ
jobs:
  # ジョブ名
  build:
    # ランナー
    runs-on: ubuntu-latest

    # ステップ
    steps:
      # アクション1。リポジトリのソースをチェックアウトする
      - uses: actions/checkout@v2

      # アクション2。コマンドラインの出力
      - name: Run a one-line script
        run: echo Hello, world!

      # アクション3。複数行にわたるコマンドラインの出力
      - name: Run a multi-line script
        run: |
          echo Add other actions to build,
          echo test, and deploy your project.

最初に作ったワークフローはサンプルなのでジョブはコマンドラインでの出力のみになっています。みた感じでサクッとわかるような形で作られているのでわかりやすいのではないでしょうか?

ジョブを増やしてみる

試しに同じワークフローでジョブを2つにする場合はこんな感じになります。

main.yml
# ワークフロー
name: CI

# イベント 
on:
  # GitHubにプッシュされた時
  push:
    branches: [ main ]
  # GitHubでプルリクエストが作られた時
  pull_request:
    branches: [ main ]
  # 手動実行
  workflow_dispatch:

# ジョブ
jobs:
  # ジョブ名
  build1:
    # ランナー
    runs-on: ubuntu-latest

    # ステップ
    steps:
      # アクション1。リポジトリのソースをチェックアウトする
      - uses: actions/checkout@v2

      # アクション2。コマンドラインの出力
      - name: Run a one-line script
        run: echo Hello, world!

      # アクション3。複数行にわたるコマンドラインの出力
      - name: Run a multi-line script
        run: |
          echo Add other actions to build,
          echo test, and deploy your project.
  # ジョブ名
  build2:
    # ランナー
    runs-on: ubuntu-latest

    # ステップ
    steps:
      # アクション1。リポジトリのソースをチェックアウトする
      - uses: actions/checkout@v2

      # アクション2。コマンドラインの出力
      - name: Run a one-line script
        run: echo Hello, world!

      # アクション3。複数行にわたるコマンドラインの出力
      - name: Run a multi-line script
        run: |
          echo Add other actions to build,
          echo test, and deploy your project.

ジョブの順番を定義していないのでbuild1, build2が並列で動作するようになっています。

イベントのみかた

イベントには「プッシュされた時」「プルリクエストが作られた時」など様々なタイミングのトリガーを元に設定することができます。

またトリガーでもGitリポジトリの制限を入れることができるので「mainブランチでプッシュされた時」のみ実行するみたいな設定もできます。

先ほどのファイルのイベントをもっと詳しく書くとこんな感じです。

# イベント 
on:
  # GitHubにあるmainブランチに向けてプッシュされた時
  push:
    branches: [ main ]
  # GitHubでmainブランチでプルリクエストが作られた時
  pull_request:
    branches: [ main ]
  # 手動実行
  workflow_dispatch:

サンプルだとこの程度ですが、もっといろんなパターンでイベントのトリガーを設定できるのであのパターンでできないかなといった場合はドキュメントをみるのをおすすめします。

ワークフローをトリガーするイベント

まとめ

今回は、GitHub Actionsの用語の説明とワークフローについて紹介しました。次回は、GitHub Actionsを使ってWordPressテーマをサーバにアップするワークフローを作って動かすことを紹介します。