CI/CDとは何か

CI(継続的インテグレーション)とCD(継続的デリバリー/デプロイ)は、コードの変更を素早く安全に本番環境へ届けるための開発プラクティスです。

CI/CDがもたらすメリット

  • 品質向上:自動テストで問題を早期発見
  • デプロイ頻度の増加:1日複数回のリリースが可能
  • 人的ミスの削減:手動作業の自動化
  • フィードバックの高速化:コミットから数分で結果確認

GitHub Actionsの基本構造

name: CI Pipeline
on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: コードのチェックアウト
        uses: actions/checkout@v4

      - name: Python セットアップ
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'
          cache: 'pip'

      - name: 依存関係インストール
        run: pip install -r requirements.txt

      - name: テスト実行
        run: pytest --cov=src tests/

      - name: カバレッジレポート
        uses: codecov/codecov-action@v3

本番デプロイまでのパイプライン

  deploy:
    needs: test
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    steps:
      - uses: actions/checkout@v4

      - name: Dockerイメージビルド
        run: docker build -t myapp:${{ github.sha }} .

      - name: ECRへプッシュ
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        run: |
          aws ecr get-login-password | docker login --username AWS ...
          docker push myapp:${{ github.sha }}

      - name: ECSタスク更新
        run: aws ecs update-service --cluster prod --service myapp --force-new-deployment

Secretsの管理

GitHubのSecretsはリポジトリ設定から登録し、ワークフロー内で${{ secrets.変数名 }}で参照します。APIキーや認証情報は絶対にコードに直書きしてはいけません。

ステージ設計のベストプラクティス

ステージ 内容 実行タイミング
Lint コードスタイル確認 PR時
Test ユニット・統合テスト PR時
Build イメージ・バイナリ生成 mainマージ後
Deploy Staging ステージング環境反映 mainマージ後
Deploy Prod 本番反映 手動承認後

CI/CDを整備することで、チームの開発速度が劇的に向上します。まず既存プロジェクトへのテスト自動化から始めましょう。