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

現場での応用を知るには関連書籍も役立つ。

関連用語