はじめに
GitHub Actionsは単純なCI/CDツールから包括的な自動化プラットフォームへと進化しました。基本的なワークフローはよく文書化されていますが、再利用可能ワークフロー、コンポジットアクション、マトリックス戦略、デプロイパターンなどの高度機能により、洗練された自動化パイプラインが構築可能です。本記事では、複雑なCI/CDシステムを構築するチーム向けにこれらの高度機能を解説します。
再利用可能ワークフロー
再利用可能ワークフローは、1つのリポジトリで定義したワークフローを他のリポジトリから呼び出せるようにし、DRY原則を実現します。workflow_callトリガーで定義し、inputsとsecretsを受け入れます。
# .github/workflows/ci.yml(再利用可能)
on:
workflow_call:
inputs:
node-version:
required: true
type: string
secrets:
NPM_TOKEN:
required: true
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ inputs.node-version }}
呼び出し側:
jobs:
call-workflow:
uses: org/repo/.github/workflows/ci.yml@main
with:
node-version: "20"
secrets:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
ベストプラクティスとして、semverタグやコミットSHAによるバージョン固定、入力検証、シークレット管理、組織全体のワークフローカタログの整備が重要です。
コンポジットアクション
コンポジットアクションは、DockerコンテナやJavaScriptを記述せずに複数のステップを1つのアクションにバンドルします。action.ymlで定義します:
# action.yml
name: "Cloud Runにデプロイ"
description: "Google Cloud Runへコンテナをデプロイ"
inputs:
service-name:
description: "Cloud Runサービス名"
required: true
runs:
using: "composite"
steps:
- id: auth
uses: google-github-actions/auth@v2
- id: deploy
uses: google-github-actions/deploy-cloudrun@v2
with:
service: ${{ inputs.service-name }}
コンポジットアクションは複数のサービスやチーム間でデプロイ手順を標準化するのに最適です。GitHub Marketplaceに公開して組織全体で再利用することも可能です。
マトリックス戦略
マトリックス戦略により、複数の設定で並行ジョブを実行できます:
jobs:
test:
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
node: [18, 20, 22]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
高度なパターンとして、JSON出力からの動的マトリックス生成、include/excludeルール、最大並列数制御、fail-fast: falseによる全設定の結果収集があります。
環境保護ルール
GitHub Environmentsはデプロイメントゲートを提供します:
| ルール | 説明 |
|---|---|
| 必須レビューア | 指定された承認者の承認が必要 |
| ウェイトタイマー | デプロイ前の強制待機時間 |
| デプロイブランチ制限 | 特定ブランチのみにデプロイ制限 |
deploy-production:
runs-on: ubuntu-latest
environment:
name: production
url: https://example.com
steps:
- run: echo "本番環境にデプロイ"
環境単位でのシークレットスコーピングにより、シークレットの誤用を防止できます。
OIDC認証
OpenID Connectにより、長期間有効なシークレットを保存せずにクラウドプロバイダーへ認証できます:
jobs:
deploy:
permissions:
id-token: write
contents: read
steps:
- id: auth
uses: google-github-actions/auth@v2
with:
workload_identity_provider: "projects/.../locations/.../workloadIdentityPools/..."
- run: gcloud deploy ...
OIDCはAWS、Azure、GCP、HashiCorp Vault向けの静的サービスアカウントキーを排除し、ワークフロー実行ごとに短期トークンを発行することでセキュリティを大幅に向上させます。
デプロイメントパターン
GitHub Actionsがサポートする主なデプロイパターンには、カナリアデプロイによる段階的なトラフィック移行(プログレッシブデリバリー)、2つの同一環境間でトラフィックを切り替えるBlue-Greenデプロイ、Argo CDとの統合によるGitOps、ビルド一回でdev→staging→productionへ昇格させる環境プロモーション、ヘルスチェックに基づく自動ロールバックがあります。
結論
高度なGitHub Actionsパターンは、CI/CDを単純なビルド・テストパイプラインから堅牢でセキュアなデプロイプラットフォームへと変貌させます。再利用可能ワークフローとコンポジットアクションは組織全体の一貫性を強化し、マトリックス戦略とOIDC認証は複雑さとセキュリティを大規模に処理します。これらのパターンを習得することで、インフラストラクチャのニーズとともに成長する洗練された自動化を構築できます。
