Featured image of post GitHub Actions高度活用:CI/CDの基本を超えて Featured image of post GitHub Actions高度活用:CI/CDの基本を超えて

GitHub Actions高度活用:CI/CDの基本を超えて

再利用可能ワークフロー、コンポジットアクション、マトリックス戦略、OIDC認証、デプロイパターンなどGitHub Actionsの高度機能を解説。

はじめに

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認証は複雑さとセキュリティを大規模に処理します。これらのパターンを習得することで、インフラストラクチャのニーズとともに成長する洗練された自動化を構築できます。