導入
Node系のプロジェクトをセットアップするとき、依存関係のインストールしますが、その際、「npm i」を使用することが多いかと思います。一方で、「npm i」に似たコマンドとして、「npm ci」があります。
この違いがよくわからずに使っていたので、その内容について調べて本記事にまとめました。
正直赤字の2箇所が本記事において重要な部分です。
[npm i] と[npm ci]の違い
npm iとは?
「npm i」は「npm install」の短縮形で、Node.jsプロジェクトの依存関係をインストールするためのコマンドです。このコマンドは、package.json
にリストされているすべての依存関係をインストールしてくれます。
npm iの特徴としては以下の点が挙げられます。
package.json
に基づいて依存関係をインストールします。- 依存関係をインストールする際、
package-lock.json
を更新します。もし、package-lock.json
が存在しない場合、生成してくれます。 - 依存関係がすでにインストールされている場合、
node_modules
フォルダを参照して、必要に応じて更新や追加を行ってくれます。
npm ciとは?
「npm ci」は「npm clean install」の略で、特にCI(継続的インテグレーション)環境やデプロイプロセスで使用されるので、「npm ci」の「ci」をCI(継続的インテグレーション)とご認識されることがしばしばあるとかないとか。
npm ci の特徴としては以下の点が挙げられます。
- 依存関係をインストールする際、
package-lock.json
をしっかりと参照し、記述されているバージョンを正確にインストールしてくれます。そのため、環境差異が生じにくいです。 -
package-lock.json
が存在しない場合、エラーが発生します。 -
node_modules
フォルダを完全に削除してから再インストールするため、前回のインストール状態に依存せず、クリーンな状態を保証します。 -
package-lock.json
に基づいて直接依存関係をインストールするため、npm i
よりも高速にインストールが完了します。
使い分けのポイント
「npm i」と「npm ci」を使い分ける際のポイントは、主に開発環境と本番環境といった環境ごとにおけるニーズによります。
-
開発環境では、柔軟に依存関係を管理するために「npm i」を使用することが多いです。新しいパッケージを追加したり、既存のパッケージを更新したりする際に便利です。
-
CI/CD環境や本番環境では、一貫性とスピードを重視して「npm ci」を使用することが推奨されます。これにより、依存関係のバージョンが確実に固定され、予期せぬエラーを防ぐことができます。
-
また、開発環境においても、開発チーム全体で同じ依存関係を使用するためには、一貫したインストールが重要となるため、「npm ci」を使用することで、チームメンバー間で依存関係のバージョンがズレることを防げます。
最後に
「npm i」と「npm ci」はどちらもNode.jsプロジェクトの依存関係をインストールするための強力なツールですが、それぞれの特性と用途が異なります。
これらの違いを理解して、適切な場面で適切なコマンドを使用することで、プロジェクトの開発と運用をスムーズに進めることができるかと思います。