← 戻る

GitHub Actions デプロイワークフロー設計の知見


environment inputの罠

workflow_dispatch に environment の choice input を用意すると、「Use workflow from」(ブランチ選択UI、削除不可)との組み合わせで 任意ブランチのコードを本番にデプロイできてしまう。デプロイ先はブランチで自動決定し、inputに環境選択を持たせない設計が安全。

# NG: inputで環境を選ばせる
environment: ${{ inputs.environment }}

# OK: ブランチで自動決定
environment: ${{ github.ref == 'refs/heads/master' && 'production' || 'develop' }}

ブランチガードパターン

develop/master 以外からの手動実行をスキップする:

jobs:
  deploy:
    if: github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/master'

concurrency group も同じ式で統一すると一貫性が保てる。

develop push の自動デプロイは慎重に

開発ブランチへの push で自動デプロイすると、他メンバーが個別に Functions 等を反映している場合に競合する。開発環境は手動デプロイの方が安全なケースがある。

Environments の Required Reviewers の制約

承認設定は環境単位で適用される。push 自動デプロイは即時、手動デプロイは承認必須、を分けたい場合は環境名を分ける必要がある(例: production / production-manual)。ただしコードの安全性は PR レビュー、デプロイの安全性はブランチ制約で役割分担すれば、デプロイ時の承認は不要な場合が多い。

新規ワークフロー作成チェックリスト

  1. デプロイ先はブランチで自動決定しているか(environment input 不使用)
  2. develop/master 以外の実行をスキップするガードがあるか
  3. concurrency 設定があるか
  4. timeout-minutes が設定されているか
  5. push トリガーのブランチは適切か(develop の自動デプロイが本当に必要か)
  6. README に手順・パラメータが記載されているか