はじめに
Node.jsプロジェクトの依存関係をインストールする際に、よく使うコマンドが npm install(または略して npm i)です。
しかし、もうひとつの選択肢である npm ci をご存知でしょうか?
この記事では、npm install と npm ci の違いと、それぞれの使い分けポイントを分かりやすく解説します。
なぜ npm ci が重要なの?
CI(継続的インテグレーション)環境では、「昨日は成功したのに今日は失敗した」という事故を防ぐため、毎回まっさらな状態で、完全に同じ依存環境を構築する必要があります。
npm install だと、微妙に異なるバージョンが入ってしまうことがありますが、npm ci を使えば、確実に同じ状態でビルドが再現できます。
npm install とは?
npm install
✅ 主な特徴
package.jsonをもとに依存関係をインストールpackage-lock.jsonがあれば参照されるが、厳密には一致しない- 開発中に使うことが多い
📌 具体的な動作
node_modulesがなければ新しく作成- 依存パッケージのバージョンは
package.jsonの範囲(^1.0.0など)で柔軟にインストールpackage-lock.jsonは更新される可能性がある
npm ci とは?
npm ci
✅ 主な特徴
ciは “clean install” の略package-lock.jsonに厳密に一致するようにインストール- CI/CD環境や本番ビルド向け
📌 具体的な動作
- まず
node_modulesを完全に削除するpackage-lock.jsonを厳密に再現package.jsonとpackage-lock.jsonに不一致があるとエラー
違いを比較表で整理
| 項目 | npm install |
npm ci |
|---|---|---|
| 用途 | 開発中に便利 | 本番・CI環境向け |
node_modules |
存在すれば再利用 | 必ず削除して再構築 |
| バージョンの柔軟性 |
^1.0.0 → 1.1.0 もOK |
lockファイルと完全一致 |
| lockファイルの更新 | されることがある | 一切更新されない |
| 初回インストール速度 | やや遅い | 高速 |
| 再現性 | 低い | 非常に高い |
使い分け
| シーン | 使うべきコマンド |
|---|---|
| ローカル開発 | npm install |
| 初期セットアップや依存追加 | npm install |
| CI/CD パイプライン | npm ci |
| 本番環境デプロイ時 | npm ci |
| lockファイルに忠実な環境再現が必要なとき | npm ci |
おわりに
依存関係の管理はプロジェクトの安定性に直結します。
今後は、ただなんとなく npm install を使うのではなく、 「目的に応じたコマンド選び」 を意識してみてください!