コンテンツにスキップ
X

npm - Node.js 標準パッケージマネージャー

npm(Node Package Manager)とは、Node.js に標準搭載されているパッケージマネージャーです。Node.js をインストールすると自動的に使えるようになります。

世界中のエンジニアが作った便利なライブラリを無料で公開している場所(npmjs.com)から、コマンド1行で必要なものをインストールできます。現在 200 万以上のパッケージが公開されており、JavaScript 開発の中心的なエコシステムです。

対象読者: Node.js をインストールしたばかりで、パッケージ管理の方法を学びたい方

学習時間の目安: 読了 10分 + 実践 15分

前提知識: Node.js のインストール済み

npm は、プロジェクトが使う外部ライブラリ(パッケージ)を自動でインストール・管理するツールです。

npm を使うと、次のようなことがコマンド1行でできます。

  • ライブラリのインストールexpress(Web サーバー用)や dayjs(日付操作用)など、他のエンジニアが作ったコードを取得できる
  • 依存関係の管理 — プロジェクトに必要なパッケージとそのバージョンを package.json で一元管理できる
  • スクリプトの実行npm run dev でローカルサーバーを起動するなど、よく使うコマンドをショートカット登録できる

npm が解決している課題は「ライブラリの手動管理の煩雑さ」です。パッケージマネージャーがない時代は、必要なライブラリを手動でダウンロードし、バージョン管理も自分で行う必要がありました。npm はこの作業をすべて自動化します。

npm は Node.js に同梱されているため、Node.js をインストール済みであればすぐに使えます。

node -v    # Node.js のバージョンを確認
npm -v     # npm のバージョンを確認

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"
  }
}
項目説明
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.04.18.0 以上 5.0.0 未満(マイナー・パッチを更新可)
~~4.18.04.18.0 以上 4.19.0 未満(パッチのみ更新可)
指定なし4.18.04.18.0 の完全一致のみ

インストール方法と基本的な使い方

Section titled “インストール方法と基本的な使い方”
コマンド説明使う場面
npm installpackage.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更新可能なパッケージを確認古いパッケージがないか確認するとき
# React をインストールする
npm install react react-dom

# 開発ツールとして ESLint を追加する
npm install -D eslint

# 開発サーバーを起動する(package.json の scripts.dev を実行)
npm run dev

# インストール済みのパッケージを確認する
npm list --depth=0

実際のプロジェクトでの使い方

Section titled “実際のプロジェクトでの使い方”
# プロジェクトフォルダを作成して移動
mkdir my-app
cd my-app

# package.json を作成(対話形式)
npm init

# または質問をすべてデフォルトでスキップして即作成
npm init -y

npm init -y を実行すると、最小限の package.json が自動生成されます。この時点でパッケージを追加していくことができます。

既存プロジェクトにアサインされたとき

Section titled “既存プロジェクトにアサインされたとき”

他のエンジニアが作ったプロジェクトに参加する場合の標準的な手順は次のとおりです。

# リポジトリをクローン
git clone <repository-url>
cd <project-folder>

# 必要なパッケージをすべてインストール
npm install

# 開発サーバーを起動
npm run dev

npm install を実行すると、package.json に記載されているパッケージがすべて node_modules フォルダにインストールされます。チームメンバー全員が同じコマンドを実行することで、同じ環境を再現できます。

グローバルインストール vs ローカルインストール

Section titled “グローバルインストール vs ローカルインストール”

npm には、パッケージをインストールする場所が2種類あります。

ローカルインストール(推奨)

npm install <pkg>

パッケージをプロジェクトの node_modules フォルダ内にインストールします。そのプロジェクト内でのみ使えます。ほとんどの場合、こちらを使います。

グローバルインストール

npm install -g <pkg>

パッケージを PC 全体で使える場所にインストールします。どのフォルダからでもコマンドとして使えます。プロジェクト作成ツールなど、特定のプロジェクトに紐付かないツールに限って使います。

node_modules は、npm install でインストールしたパッケージが保存されるフォルダです。

my-project/
├── node_modules/     ← インストールしたパッケージがここに入る
│   ├── express/
│   ├── react/
│   └── ...(数百〜数千のフォルダができることもある)
├── package.json
└── index.js

node_modules を Git に含めてはいけない理由

Section titled “node_modules を Git に含めてはいけない理由”

node_modules は Git に含めないことが鉄則です。理由は次の通りです。

  1. ファイル数と容量が膨大 — 小さなプロジェクトでも数万ファイル・数百 MB になることがあります
  2. 再生成できるpackage.json があれば npm install で完全に再現できます
  3. OS やバージョンによって異なる — 環境に合わせて自動生成されるため、他の環境のファイルを共有する意味がありません

.gitignore ファイルに次の行を追加することで、Git の管理対象から除外できます。

node_modules/

よくあるエラーとつまずきポイント

Section titled “よくあるエラーとつまずきポイント”

インストールしたはずのコマンドが見つからない場合は、まず npx を試してください。

# グローバルインストールなしに実行できる
npx create-react-app my-app

それでも解決しない場合は、グローバルインストールが必要かもしれません。

npm install -g create-react-app

npm のインストールは、プロジェクトの依存関係が増えるにつれて時間がかかるようになります。インストール速度を重視する場合は、pnpm への移行を検討してください。pnpm はグローバルストア方式で同じパッケージを複数プロジェクトで共有するため、2回目以降のインストールが大幅に速くなります。

# Node.js のバージョンを確認する
node -v

# npm のバージョンを確認する
npm -v

エラーメッセージに「requires node >= 18」のような記載がある場合、Node.js のバージョンが古い可能性があります。nvm を使ってバージョンを切り替えてください。

グローバルインストール時にパーミッションエラーが出る場合は、sudo を使わず、npm のグローバルディレクトリを変更する方法が推奨されています。詳細は npm 公式ドキュメントを参照してください。

チーム開発では package-lock.json のコンフリクトが起きることがあります。package-lock.jsonnpm install を実行するたびに自動更新されます。コンフリクトが発生した場合は、package.json を正として npm install を再実行することで解消できます。

Q: npm inpm install は同じですか?

A: はい、npm inpm install の省略形です。どちらも同じ動作をします。

Q: package-lock.json は何ですか?

A: npm install を実行したときに自動生成されるファイルです。インストールされたパッケージの正確なバージョンが記録されており、チーム全員が全く同じバージョンを使えるようにします。このファイルは Git に含める(コミットする)必要があります。

Q: npm cinpm 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 のようにプロジェクト生成ツールを使う場面でよく使われます。