Table of Contents
Node.jsのパッケージ管理ツールである npm(Node Package Manager) の役割や、package.json と package-lock.json の違い、npm install 時の内部動作について初心者にも分かりやすく解説します。
1. npm とは
- Node Package Manager の略。
- Node.jsのパッケージ(ライブラリ)を管理するためのツール。
- 世界中の開発者が公開した便利なプログラムを、コマンド一つで自分のプロジェクトに取り込むことができる。
2. 主要な管理ファイルとその役割
npmを利用すると、プロジェクト内に2つの重要なファイルが作成されます。これらは似ていますが、役割は明確に異なります。
① package.json(「欲しいものリスト」)
-
プロジェクトが必要とするパッケージのリストと、大まかなバージョンの指定を記録。
-
バージョンの指定方法(チルダとキャレット):
^1.2.3(キャレット): メジャーバージョンを固定し、マイナー・パッチバージョンは更新を許可。~1.2.3(チルダ): マイナーバージョンまで固定し、パッチバージョンのみ更新を許可。
-
課題: バージョン指定に幅があるため、インストールするタイミングによって異なるバージョンがインストールされる可能性がある。
② package-lock.json(「確定リスト」)
- 実際にインストールされたパッケージの正確なバージョンを記録。
- ダウンロード元のURLや、改ざん防止のためのハッシュ値(整合性チェック用)も含まれる。
- メリット: チーム全員が全く同じ環境(バージョン)を再現できるため、「自分の環境では動くのに」というトラブルを防げる。
3. npm install の内部動作
コマンドを実行した際、裏側では以下のステップが自動で行われています。
- package.json の読み込み: 必要なパッケージのリストを確認。
- 依存関係の解決: 指定したパッケージが依存している「他のパッケージ」もすべて洗い出す。
- ダウンロード: パッケージ本体をレジストリから取得。
- node_modules/ への保存: ダウンロードしたファイルを展開して配置。
- package-lock.json の更新: 最終的にインストールされた詳細情報を記録。

4. npm のパッケージ保存方式(コピー方式)
- npmは各プロジェクトごとに、必要なパッケージをすべて
node_modules/フォルダ内にコピーして保持します。 - プロジェクトが独立して動作できる一方で、複数のプロジェクトで同じパッケージを使っている場合、ディスク容量をその分消費するという特徴があります。
5. まとめ
- npm は開発を効率化する不可欠なツール。
- package.json は「だいたいこのバージョンが欲しい」という設計図。
- package-lock.json は「実際にこのバージョンを入れた」という確定記録。
- これらが組み合わさることで、多人数開発でも環境の一貫性が保たれる。


コメント