はじめに
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
を使うのではなく、 「目的に応じたコマンド選び」 を意識してみてください!