1. 導入:なぜデプロイに「人間」の承認が必要なのか
CI/CDの最大のメリットは自動化によるスピードですが、本番環境へのリリースにおいて「自動化=無条件」とすることはリスクを伴います。予期せぬバグや設定ミスが自動的に反映されるのを防ぐため、パイプラインの途中に「人間による承認(Deployment Gates)」を挟むことは、エンタープライズ開発における必須のガードレールです。本記事では、GitHub ActionsのEnvironments機能を使って、安全なデプロイフローを構築する方法を解説します。
2. 基礎知識:GitHub Environmentsとは
GitHub Environmentsは、リポジトリ内の環境(staging, productionなど)を定義し、それぞれに対して個別の保護ルールを設定できる機能です。
Environment Protection Rules(環境保護ルール)を使うことで、特定のブランチからしかデプロイできないようにしたり、デプロイ前に承認者の承認を必須にしたりすることが可能です。これにより、コードがテストを通過したとしても、運用者が「今、リリースしても問題ないか」を確認するプロセスを強制できます。
3. 実装/解決策:承認フローの構築手順
実装は以下の2ステップで行います。
1. GitHubリポジトリの「Settings」>「Environments」から「production」環境を作成し、「Required reviewers」を有効にして承認者を指定します。
2. GitHub Actionsのワークフローファイル(YAML)で、デプロイジョブに対して作成した環境を指定します。
4. サンプルプログラム:承認フロー付きデプロイ設定
以下のYAMLコードを `.github/workflows/deploy.yml` として保存してください。`environment: production` と指定することで、このジョブが実行される前に自動的に承認待ち状態になります。
name: Production Deployment
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
# ここで事前に作成した環境を指定します
environment: production
steps:
- name: コードのチェックアウト
- name: デプロイ処理の実行
5. 応用・注意点:現場で役立つ運用のコツ
・承認待ちのタイムアウト設定
GitHubの環境設定では、承認待ちの最大有効期限(Wait timer)を設定できます。長時間放置されたデプロイは自動でキャンセルされるように設定しておくことで、古いコードの誤デプロイを防止できます。
・Slack連携の重要性
承認依頼がGitHubの画面上だけで完結すると、担当者が気づかないリスクがあります。GitHub ActionsのマーケットプレイスにあるSlack連携用のActionを組み合わせ、承認待ちが発生した際にSlackチャンネルへ通知を飛ばす運用を強く推奨します。
・陥りやすいバグ
よくある失敗として、承認ルールを設定したにもかかわらず、ブランチ保護ルール(Branch Protection Rules)が正しく設定されていないケースがあります。承認フローと併せて、ブランチの直接プッシュを禁止する設定も必ず有効化しておきましょう。

コメント