1. 導入:なぜGitHub Actionsの「式」が重要なのか
GitHub Actionsを使っていると、「特定のブランチの時だけ実行したい」「前のジョブが成功した時だけデプロイしたい」といった複雑な条件分岐が必要になる場面が出てきます。YAMLファイルは単なる設定リストですが、ここに「式(Expressions)」を組み込むことで、パイプラインを状況に応じて判断できる「知的なプログラム」に変えることができます。これを使いこなすと、無駄なジョブの実行を減らし、CI/CDの効率を劇的に改善できます。
2. 基礎知識:式言語の基本ルール
GitHub Actionsの式は、`${{ … }}` という構文で記述します。この中には、GitHubが提供する「コンテキスト(実行時の情報)」や、文字列操作関数、論理演算子などを記述できます。
主要な概念
・コンテキスト:`github.event`(イベント情報)や `job.status`(ジョブの結果)など、実行環境の情報を指します。
・if条件:`if: ${{ … }}` を使うことで、特定の条件が真の時だけステップやジョブを実行できます。
・関数:`contains()`(文字列検索)や `success()`(成功判定)など、条件判定を簡略化する便利な機能が用意されています。
3. 実装:条件付き実行の仕組み
最もよく使われるのは、プルリクエストのタイトルやイベントの内容に応じた条件分岐です。例えば、「特定のキーワードがタイトルに含まれている時だけデプロイする」といった制御が可能です。また、前のジョブの結果を取得する `success()` や `always()` などの関数を使うことで、エラー時のみ通知を送るような制御も簡単に行えます。
4. サンプルプログラム:条件付き実行のYAML
以下のコードは、プルリクエストのタイトルに「deploy」という文字が含まれている場合のみ、デプロイジョブを実行する例です。
jobs:
check-and-deploy:
runs-on: ubuntu-latest
steps:
- name: 条件判定の実行
# github.event.pull_request.title でPRのタイトルを参照
# contains関数で文字列が含まれるかチェック
if: ${{ contains(github.event.pull_request.title, ‘deploy’) }}
run: echo “タイトルにdeployが含まれているため、デプロイ処理を開始します。”
notify-status:
needs: check-and-deploy
runs-on: ubuntu-latest
# 前のジョブが失敗した時だけ実行される(障害通知などに便利)
if: ${{ failure() }}
steps:
- name: エラー通知
run: echo “前のジョブでエラーが発生しました。チームに通知を送信します。”
5. 応用・注意点:現場でハマりやすいポイント
・`${{ }}` は不要な場合がある
`if:` キーワードの中では、GitHub Actionsが自動的に式として評価するため、`${{ }}` を省略して `if: contains(…)` と書くのが推奨されています(公式のベストプラクティスです)。
・型への意識
式の中で文字列と数値を比較する際は注意が必要です。特に環境変数 (`env`) はすべて文字列として扱われるため、数値比較を行う際は明示的な変換が必要になることがあります。
・デバッグのコツ
複雑な式を書くときは、一度 `run: echo “${{ github.event_name }}”` のように、コンテキストの中身を出力して確認する癖をつけると、実装ミスを大幅に減らすことができます。
これらを活用して、柔軟で無駄のないCI/CDパイプラインを構築していきましょう!

コメント