CI/CD
コードの変更を自動的にビルド・テスト・デプロイするパイプライン
DevOps自動化
CI/CD とは
CI (Continuous Integration) はコードの変更を頻繁に統合し自動テストする手法、CD (Continuous Delivery/Deployment) はテスト済みのコードを自動的にデプロイする手法である。
CI vs CD
| 概念 | 説明 |
|---|---|
| CI (継続的インテグレーション) | コミットごとに自動ビルド・テスト |
| CD (継続的デリバリー) | 本番デプロイ可能な状態を常に維持 (手動承認) |
| CD (継続的デプロイメント) | テスト通過で自動的に本番デプロイ |
パイプラインの例
# GitHub Actions
name: CI/CD
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 22, cache: npm }
- run: npm ci
- run: npm run lint
- run: npm run typecheck
- run: npm test
deploy:
needs: test
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: ap-northeast-1
- run: sam build && sam deploy --no-confirm-changeset
CI/CD のメリット
コミットごとにテストが実行されるため、バグを早期に検出できる。デプロイが自動化されて手動作業が排除され、リリース頻度が向上する (DORA メトリクスの改善)。毎回同じ手順でデプロイされるため一貫性も担保される。
AWS での CI/CD
| ツール | 用途 |
|---|---|
| GitHub Actions | GitHub 統合、汎用 |
| CodePipeline + CodeBuild | AWS ネイティブ |
| SAM Pipeline | サーバーレス CI/CD |
CI/CD のベストプラクティス
CI は 5 分以内に完了させ、ブランチ保護で CI 通過を必須にする。手動テストに依存せず自動テストを充実させ、アクセスキーではなく OIDC 認証を使う。コードは同一にして環境変数で設定を切り替える。
SAM でのデプロイ
sam build && sam deploy --no-confirm-changeset \
--stack-name myapp-dev --parameter-overrides Environment=dev
現場での応用を知るには関連書籍も役立つ。