コンテンツにスキップ

GitHub Actions マルチ環境デプロイメント実践ガイド:Dev/Staging/Prod 完全自動化

この記事の対象者

  • CI/CDの基本を理解している中級開発者(GitHub Actions使用経験がある方)

この記事のポイント

  1. Dev→Staging→Prodの段階的デプロイワークフローを自動化できる
  2. 環境別シークレット管理と承認プロセスを設定できる
  3. デプロイ失敗時の自動ロールバック機能を実装できる

なぜこの問題が今重要か

現代のアプリケーション開発では、複数環境での品質担保が必須です。手動デプロイによる人的ミスやデプロイ時間の増大、環境間の設定差異によるトラブルが頻発しています。GitHub Actionsの活用により、これらの課題を根本的に解決できます。

解決ステップ概要

ステップ内容到達指標
1環境設定とシークレット管理3環境のシークレット設定完了
2段階的デプロイワークフロー作成自動デプロイ実行成功
3承認とロールバック設定手動承認+自動復旧機能動作確認

ステップ1: 環境設定とシークレット管理

リポジトリのEnvironmentsでdev、staging、productionを設定し、各環境専用のシークレットを登録します。

# .github/workflows/multi-env-deploy.yml
name: Multi-Environment Deployment

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  deploy-dev:
    if: github.ref == 'refs/heads/develop'
    runs-on: ubuntu-latest
    environment: dev
    steps:
      - uses: actions/checkout@v4
      - name: Deploy to Dev
        run: |
          echo "Deploying to Dev environment"
          echo "${{ secrets.DEV_API_KEY }}" | head -c 8

ステップ2: 段階的デプロイワークフロー作成

main ブランチへのプッシュ時にstaging → production の順序でデプロイを実行する設定を追加します。

  deploy-staging:
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    environment: staging
    steps:
      - uses: actions/checkout@v4
      - name: Run Tests
        run: npm test
      - name: Deploy to Staging
        run: |
          echo "Deploying to Staging"
          # 実際のデプロイコマンド

  deploy-production:
    needs: deploy-staging
    runs-on: ubuntu-latest
    environment: production
    steps:
      - uses: actions/checkout@v4
      - name: Deploy to Production
        run: echo "Production deployment complete"

ステップ3: 承認とロールバック設定

ProductionとStagingにProtection Rules設定で手動承認を必須にし、デプロイ後のヘルスチェックを実装します。

  health-check:
    needs: deploy-production
    runs-on: ubuntu-latest
    steps:
      - name: Health Check
        run: |
          curl -f ${{ secrets.PROD_URL }}/health || exit 1
      - name: Rollback on Failure
        if: failure()
        run: |
          echo "Health check failed, initiating rollback"
          # 前バージョンへの自動復旧処理

よくある落とし穴と対処

症状原因即時対処
シークレット取得エラーEnvironment未設定Settings > Environments で環境作成
無限待機状態Required reviewers未設定Protection rules でレビュアー指定
デプロイ先接続失敗ネットワーク設定不備VPN設定またはIP制限確認
詳細設定(高度最適化) ### 条件分岐デプロイ
deploy-feature:
  if: startsWith(github.ref, 'refs/heads/feature/')
  environment: dev
  runs-on: ubuntu-latest
  steps:
    - name: Feature Branch Deploy
      run: echo "Feature環境デプロイ"
### 環境変数テンプレート
env:
  NODE_ENV: ${{ github.event.repository.environment == 'production' && 'production' || 'staging' }}
  API_URL: ${{ secrets.API_URL }}
### 詳細なSlack通知
- name: Notify Slack
  uses: 8398a7/action-slack@v3
  with:
    status: ${{ job.status }}
    text: 'Deployment to ${{ github.event.repository.environment }} completed'
  env:
    SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}

次に読む(関連記事)