CIにおけるnpm ci vs npm install: どちらを使うべきか
CIではほぼ常にnpm installではなくnpm ciを使うべきです - その理由を説明します。
両者は似て見えますが、lockfileと再現性の扱いにおいて異なる挙動を示します。
| npm install | npm ci | |
|---|---|---|
| lockfileの使用 | 更新する場合がある | そこから正確にインストールする |
| node_modules | 再利用/パッチ適用 | 削除してクリーンに再インストール |
| 再現性 | なし | あり |
| lockfileのずれで失敗 | しない | する(設計上) |
CIではnpm ciを使う
npm ciはクリーンで再現性のあるインストールを提供し、package.jsonとlockfileが一致しない場合には明確に失敗します - これはまさにパイプラインで望まれる挙動です。npm installは依存関係を変更する意図があるローカル開発向けです。
結論
CI: 常にnpm ci(lockfileをコミットした状態で)。ローカルでの依存関係の変更: npm install。
関連ガイド
npm ci "can only install with an existing package-lock.json in sync"Fix "npm ci can only install with an existing package-lock.json … in sync with package.json" in CI - caused b…
How to Cache Dependencies in GitHub Actions (Every Ecosystem)Cache dependencies in GitHub Actions with actions/cache - correct keys and paths for npm, yarn, pnpm, pip, Ma…
npm vs Yarn vs pnpm in CI: Speed, Disk & Reliabilitynpm vs Yarn vs pnpm for CI: install speed, disk usage, lockfile behavior, and caching. Which package manager…