npm - Node.js 標準パッケージマネージャー
npm(Node Package Manager)とは、Node.js に標準搭載されているパッケージマネージャーです。Node.js をインストールすると自動的に使えるようになります。
世界中のエンジニアが作った便利なライブラリを無料で公開している場所(npmjs.com)から、コマンド1行で必要なものをインストールできます。現在 200 万以上のパッケージが公開されており、JavaScript 開発の中心的なエコシステムです。
対象読者: Node.js をインストールしたばかりで、パッケージ管理の方法を学びたい方
学習時間の目安: 読了 10分 + 実践 15分
前提知識: Node.js のインストール済み
npm とは何か
Section titled “npm とは何か”npm は、プロジェクトが使う外部ライブラリ(パッケージ)を自動でインストール・管理するツールです。
npm を使うと、次のようなことがコマンド1行でできます。
- ライブラリのインストール —
express(Web サーバー用)やdayjs(日付操作用)など、他のエンジニアが作ったコードを取得できる - 依存関係の管理 — プロジェクトに必要なパッケージとそのバージョンを
package.jsonで一元管理できる - スクリプトの実行 —
npm run devでローカルサーバーを起動するなど、よく使うコマンドをショートカット登録できる
npm が解決している課題は「ライブラリの手動管理の煩雑さ」です。パッケージマネージャーがない時代は、必要なライブラリを手動でダウンロードし、バージョン管理も自分で行う必要がありました。npm はこの作業をすべて自動化します。
インストール確認
Section titled “インストール確認”npm は Node.js に同梱されているため、Node.js をインストール済みであればすぐに使えます。
node -v # Node.js のバージョンを確認
npm -v # npm のバージョンを確認package.json の読み方
Section titled “package.json の読み方”package.json は、プロジェクトの「設定書」です。プロジェクト名、バージョン、使用するパッケージの一覧などが記載されています。
{
"name": "my-project",
"version": "1.0.0",
"scripts": {
"dev": "node index.js",
"build": "webpack --mode production"
},
"dependencies": {
"express": "^4.18.0"
},
"devDependencies": {
"prettier": "^3.0.0"
}
}各項目の意味
Section titled “各項目の意味”| 項目 | 説明 |
|---|---|
name | プロジェクトの名前 |
version | プロジェクトのバージョン(メジャー.マイナー.パッチ 形式) |
scripts | よく使うコマンドのショートカット定義 |
dependencies | 本番環境で必要なパッケージ一覧 |
devDependencies | 開発時にのみ必要なパッケージ一覧 |
dependencies と devDependencies の違い
Section titled “dependencies と devDependencies の違い”この2つの違いは、そのパッケージが「本番環境(ユーザーが実際に使う環境)でも必要か」という点です。
- dependencies(本番用) — アプリを動かすために必要な材料。
expressのような Web サーバーライブラリは、ユーザーがアクセスしてくる本番環境でも動いている必要があるため、こちらに入れます - devDependencies(開発用) — コードを書くときだけ使う道具。
prettier(コードの自動整形ツール)は開発時にしか使わないため、こちらに入れます
料理に例えると、dependencies は「料理に使う食材」、devDependencies は「料理するときだけ使う調理器具」です。食卓には食材(料理)だけ出すので、本番環境には dependencies のみが必要です。
バージョン指定のルール(キャレット ^ の意味)
Section titled “バージョン指定のルール(キャレット ^ の意味)”"express": "^4.18.0" の ^ は「このバージョン以上の互換バージョン」を意味します。
| 記号 | 例 | 意味 |
|---|---|---|
^ | ^4.18.0 | 4.18.0 以上 5.0.0 未満(マイナー・パッチを更新可) |
~ | ~4.18.0 | 4.18.0 以上 4.19.0 未満(パッチのみ更新可) |
| 指定なし | 4.18.0 | 4.18.0 の完全一致のみ |
インストール方法と基本的な使い方
Section titled “インストール方法と基本的な使い方”よく使うコマンド一覧
Section titled “よく使うコマンド一覧”| コマンド | 説明 | 使う場面 |
|---|---|---|
npm install | package.json の依存をすべてインストール | プロジェクトをクローン後 |
npm install <pkg> | パッケージを追加(dependencies に追記) | 新しいライブラリを使いたいとき |
npm install -D <pkg> | 開発用パッケージを追加(devDependencies に追記) | Lint・フォーマッターなど |
npm uninstall <pkg> | パッケージを削除 | 不要になったとき |
npm run <script> | scripts セクションのコマンドを実行 | npm run dev で開発サーバー起動 |
npm list | インストール済み一覧を表示 | 何が入っているか確認するとき |
npm update | パッケージを更新 | 定期的なアップデート |
npm outdated | 更新可能なパッケージを確認 | 古いパッケージがないか確認するとき |
コマンドの使用例
Section titled “コマンドの使用例”# React をインストールする
npm install react react-dom
# 開発ツールとして ESLint を追加する
npm install -D eslint
# 開発サーバーを起動する(package.json の scripts.dev を実行)
npm run dev
# インストール済みのパッケージを確認する
npm list --depth=0実際のプロジェクトでの使い方
Section titled “実際のプロジェクトでの使い方”新規プロジェクトを始める
Section titled “新規プロジェクトを始める”# プロジェクトフォルダを作成して移動
mkdir my-app
cd my-app
# package.json を作成(対話形式)
npm init
# または質問をすべてデフォルトでスキップして即作成
npm init -ynpm init -y を実行すると、最小限の package.json が自動生成されます。この時点でパッケージを追加していくことができます。
既存プロジェクトにアサインされたとき
Section titled “既存プロジェクトにアサインされたとき”他のエンジニアが作ったプロジェクトに参加する場合の標準的な手順は次のとおりです。
# リポジトリをクローン
git clone <repository-url>
cd <project-folder>
# 必要なパッケージをすべてインストール
npm install
# 開発サーバーを起動
npm run devnpm install を実行すると、package.json に記載されているパッケージがすべて node_modules フォルダにインストールされます。チームメンバー全員が同じコマンドを実行することで、同じ環境を再現できます。
グローバルインストール vs ローカルインストール
Section titled “グローバルインストール vs ローカルインストール”npm には、パッケージをインストールする場所が2種類あります。
ローカルインストール(推奨)
npm install <pkg>パッケージをプロジェクトの node_modules フォルダ内にインストールします。そのプロジェクト内でのみ使えます。ほとんどの場合、こちらを使います。
グローバルインストール
npm install -g <pkg>パッケージを PC 全体で使える場所にインストールします。どのフォルダからでもコマンドとして使えます。プロジェクト作成ツールなど、特定のプロジェクトに紐付かないツールに限って使います。
node_modules とは
Section titled “node_modules とは”node_modules は、npm install でインストールしたパッケージが保存されるフォルダです。
my-project/
├── node_modules/ ← インストールしたパッケージがここに入る
│ ├── express/
│ ├── react/
│ └── ...(数百〜数千のフォルダができることもある)
├── package.json
└── index.jsnode_modules を Git に含めてはいけない理由
Section titled “node_modules を Git に含めてはいけない理由”node_modules は Git に含めないことが鉄則です。理由は次の通りです。
- ファイル数と容量が膨大 — 小さなプロジェクトでも数万ファイル・数百 MB になることがあります
- 再生成できる —
package.jsonがあればnpm installで完全に再現できます - OS やバージョンによって異なる — 環境に合わせて自動生成されるため、他の環境のファイルを共有する意味がありません
.gitignore ファイルに次の行を追加することで、Git の管理対象から除外できます。
node_modules/よくあるエラーとつまずきポイント
Section titled “よくあるエラーとつまずきポイント”command not found: xxx
Section titled “command not found: xxx”インストールしたはずのコマンドが見つからない場合は、まず npx を試してください。
# グローバルインストールなしに実行できる
npx create-react-app my-appそれでも解決しない場合は、グローバルインストールが必要かもしれません。
npm install -g create-react-appnpm install が遅い
Section titled “npm install が遅い”npm のインストールは、プロジェクトの依存関係が増えるにつれて時間がかかるようになります。インストール速度を重視する場合は、pnpm への移行を検討してください。pnpm はグローバルストア方式で同じパッケージを複数プロジェクトで共有するため、2回目以降のインストールが大幅に速くなります。
バージョン不一致エラー
Section titled “バージョン不一致エラー”# Node.js のバージョンを確認する
node -v
# npm のバージョンを確認する
npm -vエラーメッセージに「requires node >= 18」のような記載がある場合、Node.js のバージョンが古い可能性があります。nvm を使ってバージョンを切り替えてください。
EACCES: permission denied エラー
Section titled “EACCES: permission denied エラー”グローバルインストール時にパーミッションエラーが出る場合は、sudo を使わず、npm のグローバルディレクトリを変更する方法が推奨されています。詳細は npm 公式ドキュメントを参照してください。
package-lock.json のコンフリクト
Section titled “package-lock.json のコンフリクト”チーム開発では package-lock.json のコンフリクトが起きることがあります。package-lock.json は npm install を実行するたびに自動更新されます。コンフリクトが発生した場合は、package.json を正として npm install を再実行することで解消できます。
よくある質問
Section titled “よくある質問”Q: npm i と npm install は同じですか?
A: はい、npm i は npm install の省略形です。どちらも同じ動作をします。
Q: package-lock.json は何ですか?
A: npm install を実行したときに自動生成されるファイルです。インストールされたパッケージの正確なバージョンが記録されており、チーム全員が全く同じバージョンを使えるようにします。このファイルは Git に含める(コミットする)必要があります。
Q: npm ci と npm install の違いは何ですか?
A: npm ci は CI(継続的インテグレーション)環境向けの厳格なインストールコマンドです。package-lock.json の内容を完全に再現し、package.json との不一致があればエラーになります。CI/CD パイプラインでは npm ci を使うことが推奨されます。
Q: npx とは何ですか?
A: npm に付属するコマンド実行ツールです。グローバルインストールをせずに、npx 経由でパッケージを一時的にダウンロードして実行できます。npx create-react-app my-app のようにプロジェクト生成ツールを使う場面でよく使われます。