push のたびにテストとビルドを自動で行い、本番まで自動で届ける。
CI(継続的インテグレーション)は、push やプルリクエストのたびに、テスト・型の確認・ビルドを自動で行うことです。CD(継続的デリバリー/デプロイ)は、それに通ったものを自動で本番(またはその手前)まで届けることです。
パイプラインの例(GitHub Actions)
on: [pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: pnpm/action-setup@v6
- uses: actions/setup-node@v7
with: { node-version: 24, cache: pnpm }
- run: pnpm install --frozen-lockfile
- run: pnpm lint
- run: pnpm typecheck
- run: pnpm test
- run: pnpm buildアクションの版(@v7 など)と Node.js の版は上がっていくので、使うときに各アクションのリリースと Node.js の LTS の予定を確かめます。流れの例:lint・型の確認・単体テスト(速いものを先に)→ 結合テスト・ビルド → プレビュー環境へデプロイ → E2E → main にマージしたらステージングへ → 本番へ。
- 10分以内を目安に保つ。依存のキャッシュ、変更のあった所だけの実行、並列化で速くする。遅い CI は、まとめて大きな変更を出す原因になる。
- ロックファイルどおりに入れる(
--frozen-lockfile)。 - main ブランチは保護し、CI とレビューを通らないとマージできないようにする。
- 本番への権限は OIDC で一時的な認証にし、長く使える鍵を CI に置かない。
面接ではこう答える
CI は、push やプルリクエストのたびに、lint、型の確認、テスト、ビルドを自動で行うことで、CD はそれに通ったものを自動で本番かその手前まで届けることです。速いチェックを先に流し、全体を10分以内に保つと、小さな変更をこまめに出せます。main は保護して CI とレビューを必須にし、本番への権限は長く使える鍵ではなく OIDC の一時的な認証にします。
Webとの関わり毎日の開発の流れそのもので、リリースの速さと安全性を決める仕組みです。