📖
GitHub Actions: 特定のブランチパターンのマージ時にワークフローを実行する方法
はじめに
GitHub Actionsを使用して、特定のパターンのブランチが特定のブランチにマージされた時だけワークフローを実行する方法を解説します。今回は「feature-」から始まるブランチ名からmainブランチへのマージをトリガーとするケースを例に説明します。
ワークフロー設定の解説
まず、完全なワークフロー設定を見てみましょう:
name: Branch Merge Workflow
on:
pull_request:
branches:
- "main"
types: [closed]
jobs:
check-should-run:
runs-on: ubuntu-latest
outputs:
should_run: ${{ steps.check.outputs.should_run }}
steps:
- name: Check should run
id: check
run: |
if [[ "${{ github.event.pull_request.merged }}" == "true" && \
"${{ startsWith(github.head_ref, 'feature-') }}" == "true" && \
"${{ github.base_ref }}" == "main" ]]; then
echo "should_run=true" >> $GITHUB_OUTPUT
else
echo "should_run=false" >> $GITHUB_OUTPUT
fi
重要なポイントの解説
-
トリガー条件の設定
on: pull_request: branches: - "main" types: [closed]
-
pull_request
イベントをトリガーとして使用 -
main
ブランチへのPRが対象 -
types: [closed]
でPRがクローズされた時のみ実行
-
-
実行環境の設定
runs-on: ubuntu-latest
- GitHub提供の標準的なUbuntuランナーを使用
-
条件チェックの実装
if [[ "${{ github.event.pull_request.merged }}" == "true" && \ "${{ startsWith(github.head_ref, 'feature-') }}" == "true" && \ "${{ github.base_ref }}" == "main" ]]; then
-
github.event.pull_request.merged
: PRがマージされたかチェック -
startsWith(github.head_ref, 'feature-')
: ブランチ名が"feature-"で始まるかチェック -
github.base_ref
: マージ先が"main"かチェック
-
-
出力の設定
outputs: should_run: ${{ steps.check.outputs.should_run }}
- 条件に合致した場合は
true
、そうでない場合はfalse
を出力 - この出力は後続のジョブで条件分岐に使用可能
- 条件に合致した場合は
使用方法
-
このワークフローファイルを
.github/workflows/
ディレクトリに配置します(例:branch-merge-workflow.yml
) -
ブランチ名の例:
- ✅
feature-add-login
→ main - ✅
feature-update-ui
→ main - ❌
bugfix-xyz
→ main(実行されない) - ❌
feature-add-login
→ staging(実行されない)
- ✅
カスタマイズのポイント
-
ブランチ名のプレフィックス変更
"${{ startsWith(github.head_ref, 'your-prefix-') }}"
-
feature-
を任意のプレフィックスに変更可能
-
-
ターゲットブランチの変更
branches: - "your-branch"
-
main
を任意のブランチ名に変更可能
-
-
ランナーの変更
runs-on: your-runner
- 必要に応じて適切なランナーを選択
後続ジョブの例
next-job:
needs: check-should-run
if: needs.check-should-run.outputs.should_run == 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
まとめ
このワークフローを使用することで:
- 特定のパターンのブランチからのマージのみを検知
- 不要なワークフロー実行を防止
- 後続ジョブの制御が可能
カスタマイズ可能な部分を適切に設定することで、様々なワークフローに対応できます。
Discussion