Insights

技術情報

npm install と npm ci の違い

Node.js のプロジェクトを触っていると、ほぼ無意識に叩いているコマンドがあります。

npm install

一方で、CI や README には次のコマンドも書かれています。

npm ci

「どちらも依存関係を入れるコマンドでしょ?」くらいの理解で使っている人も多いと思います。私自身も最初はそうでした。

ただ、Node.js の管理や CI 運用を整理する中で、この2つは用途がまったく違うコマンドだと分かってきました。


結論:役割が違う

同じ「インストール」に見えますが、目的がまったく異なります。

  • npm install:依存関係を「調整・更新」するためのコマンド
  • npm ci:依存関係を「完全に再現」するためのコマンド

npm install は「開発用」

npm install は、開発中に依存関係を変更するためのコマンドです。主な特徴は以下のとおりです。

  • package.json をもとに依存関係を解決する
  • package-lock.json があれば参考にする
  • 必要に応じて lockfile を更新する
  • 既存の node_modules を使い回す

依存関係を追加・更新するためのコマンド

npm install は lockfile を尊重しますが、package.json と package-lock.json の内容が一致していない場合は lockfile を更新して整合を取ります。たとえば package.json の依存バージョンだけを変更して実行すると、解決された依存関係が package-lock.json に反映されます。


npm ci は「再現用」

一方、npm ci は環境を再現するためのコマンドです。

  • package-lock.json が必須
  • package.json と lockfile がズレていたら即エラー
  • node_modules を一度削除してから入れ直す
  • lockfile は一切変更しない

package.json と package-lock.json が一致していない状態では、npm ci はエラーで停止します。実務では、依存関係を変更したときだけ npm install で lockfile を更新し、通常作業や CI では npm ci を使うよう役割分担しておくと混乱を防げます。


まとめ

  • npm install:依存関係を変更するためのコマンド
  • npm ci:環境を正確に再現するためのコマンド

実務では、次のルールだけ覚えておけば十分です。

変更するときだけ install、それ以外は ci

お問い合わせ・お見積もりはお気軽に

内容に応じたお見積もりも無料で行います。