ワークフロー構文
ここからは、自動化する処理を具体的に記述する際によく利用される構文について学んでいきます。
コンテキスト
第1回でも触れたコンテキストについて説明します。
コンテキストは、ワークフローの実行、変数、ランナーの環境、ジョブ、ステップに関する情報にアクセスする方法です。
GitHub Actionsが保持している情報をコンテキストを通じて参照できます。例えば、このワークフローを実行したイベント、実行しているジョブのステータス、ワークフローへの入力などの情報を参照できます。
コンテキストへは以下の構文でアクセスできます。
${{ <context> }}
次のサンプルコードでは、コンテキストを利用して情報を表示します。イベントはworkflow_dispatchを利用します。
name: Context demo
on:
workflow_dispatch:
inputs:
user_name:
description: 'User Name'
required: true
type: string
jobs:
print-info:
runs-on: ubuntu-latest
steps:
- run: echo "Input Value - ${{ inputs.user_name }}"
- run: echo "Event - ${{ github.event_name }}"
- run: echo "Job Status - ${{ job.status }}"
上記サンプルコードではUser NameをUI上で入力できるようにしました。ワークフローの処理では、入力したUser Name、ワークフローを実行したイベントの名前、ジョブの現在の状態を表示します。それぞれコンテキストを参照しています。
上記サンプルコードのように「情報を表示したい」という場合にも利用できますが、次に説明するように「式と組み合わせて処理を分岐させる」という形での利用も多いです。他にもさまざまなコンテキストがあります。詳しくは公式ドキュメントを参照してください。
式・関数
ワークフロー内で、各種演算子、組み込みの関数などを利用できます。ifキーと組み合わせることでステップを実行すべきかどうかを判断することも可能です。
以下のサンプルコードでは、自動テストを実行し、テストの結果によってSlackへの通知を実行するかどうかが変わるワークフローです(自動テスト実行処理や通知処理の詳細は割愛します)。
name: Expression demo
on:
push:
jobs:
run-unit-test:
runs-on: ubuntu-latest
steps:
- name: Run unit test
id: run-unit-test
run: echo "run unit test"
- name: Notify Slack in case of failure
id: notify-slack
if: ${{ failure() }}
run: echo "notify slack"
1つ目のステップでは自動テスト実行処理、2つ目のステップではSlackへの通知処置を行っています。
GitHub Actionsの組み込み関数には、「ステータスチェック関数」と呼ばれる関数が用意されています。その一つであるfailure()は、前のステップが失敗した場合にtrueを返します。
ifキーを使うと、指定された条件が満たされない場合、ステップを実行しないようにできます。よって上記サンプルコードでは自動テスト実行のステップの結果が「失敗」の場合のみ[1]、Slack通知のステップが実行されます。
このワークフローをこのまま実行すると、自動テスト実行のステップは(ログ表示のみのため)失敗せず、Slack通知のステップも実行されません。失敗の場合を試したい場合は、以下のように自動テスト実行のステップを書き換えて強制的に失敗させてみましょう。
steps:
- name: Run unit test
id: run-unit-test
run: |
echo "run unit test"
exit 1
他にもさまざまな演算子、組み込みの関数があります。最初のうちはワークフローを作成する際には、公式ドキュメントを一度眺めてみて、利用できそうなものがあるかどうか見てみると良いでしょう。
この項目のサンプルコードで初めて登場している、各stepのnameについて簡単に説明します。各ステップにnameを指定して名前をつけることができます。各ステップでどのような処理がされるのかがわかるような名前をつけると良いでしょう。nameに指定した名前はワークフローの実行結果にも表示されます。

-
[1]ステータスとして取りうる値は、成功や失敗の他にもキャンセルなどがあります。例えばワークフローがキャンセルされた場合、
failure()関数の結果はfalseとなります。
