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





