パッケージマネージャとは?
Node.jsのパッケージマネージャは、プロジェクトの依存ライブラリをインストール・管理するツールです。2026年現在、主要な選択肢はnpm、yarn、pnpmの3つです。
3者の概要
| 項目 | npm | yarn | pnpm |
|---|---|---|---|
| 開発元 | npm, Inc. (GitHub) | Meta (Facebook) | pnpm コミュニティ |
| 初回リリース | 2010年 | 2016年 | 2017年 |
| Node.js同梱 | あり | corepack経由 | corepack経由 |
| ロックファイル | package-lock.json | yarn.lock | pnpm-lock.yaml |
| ワークスペース | 対応 | 対応 | 対応 |
インストール方法
# npm: Node.jsに同梱
node -v # Node.jsが入っていればnpmも使える
npm -v
# yarn: corepack経由(推奨)
corepack enable
corepack prepare yarn@stable --activate
yarn -v
# pnpm: corepack経由(推奨)
corepack enable
corepack prepare pnpm@latest --activate
pnpm -v
# pnpm: npmから
npm install -g pnpm
コマンド比較
| 操作 | npm | yarn | pnpm |
|---|---|---|---|
| インストール | npm install | yarn | pnpm install |
| パッケージ追加 | npm install pkg | yarn add pkg | pnpm add pkg |
| devDeps追加 | npm install -D pkg | yarn add -D pkg | pnpm add -D pkg |
| グローバル追加 | npm install -g pkg | yarn global add pkg | pnpm add -g pkg |
| 削除 | npm uninstall pkg | yarn remove pkg | pnpm remove pkg |
| スクリプト実行 | npm run dev | yarn dev | pnpm dev |
| npx相当 | npx create-app | yarn dlx create-app | pnpm dlx create-app |
| 更新 | npm update | yarn up | pnpm update |
| キャッシュ削除 | npm cache clean --force | yarn cache clean | pnpm store prune |
速度比較
ベンチマーク(参考値)
| シナリオ | npm | yarn | pnpm |
|---|---|---|---|
| 初回インストール(キャッシュなし) | 45秒 | 35秒 | 25秒 |
| 初回インストール(キャッシュあり) | 20秒 | 12秒 | 8秒 |
| ロックファイルありの再インストール | 15秒 | 8秒 | 5秒 |
| パッケージ1つ追加 | 8秒 | 5秒 | 3秒 |
pnpmが最速です。これはコンテンツアドレッサブルストレージとハードリンクによる仕組みのおかげです。
ディスク使用量
node_modules の構造
npm / yarn(Classic): フラット構造
node_modules/
├── express/
├── body-parser/ ← express の依存だが、トップレベルに配置
├── accepts/ ← body-parser の依存も同様
└── ...
問題点: 直接依存していないパッケージにアクセスできてしまう(幽霊依存)。
pnpm: シンボリックリンク構造
node_modules/
├── .pnpm/
│ ├── [email protected]/
│ │ └── node_modules/
│ │ ├── express/ ← 実体(ハードリンク)
│ │ ├── body-parser/ ← シンボリックリンク
│ │ └── accepts/ ← シンボリックリンク
│ └── [email protected]/
│ └── node_modules/
│ └── body-parser/ ← 実体(ハードリンク)
└── express -> .pnpm/[email protected]/node_modules/express
メリット:
- 幽霊依存が発生しない(厳密な依存関係)
- ハードリンクによりディスク使用量が大幅に削減される
実測例
10個の依存パッケージを持つプロジェクトの場合:
| ツール | node_modules サイズ | グローバルストア |
|---|---|---|
| npm | 250MB | なし |
| yarn | 250MB | なし |
| pnpm | 50MB | 200MB(共有) |
pnpmはグローバルストアにパッケージを保存し、プロジェクトからはハードリンクで参照します。複数プロジェクトで同じパッケージを共有するため、全体のディスク使用量が減ります。
セキュリティ
npm
# セキュリティ監査
npm audit
# 自動修正
npm audit fix
# 強制修正(破壊的変更を含む可能性あり)
npm audit fix --force
pnpm の厳密な依存関係
pnpmは直接依存していないパッケージへのアクセスを禁止します:
// package.json に express しか書いていない場合
const express = require('express'); // OK
const bodyParser = require('body-parser'); // エラー!(pnpmの場合)
これにより、「npm では動くけどpnpmでは動かない」ケースが発生します。しかしこれはpnpmが正しく、直接使用するパッケージは明示的にインストールすべきです。
ワークスペース(モノレポ)
npm workspaces
{
"name": "my-monorepo",
"workspaces": ["packages/*"]
}
yarn workspaces
{
"name": "my-monorepo",
"workspaces": ["packages/*"]
}
pnpm workspaces
# pnpm-workspace.yaml
packages:
- 'packages/*'
- 'apps/*'
pnpm のモノレポ向け機能
# 特定パッケージでコマンド実行
pnpm --filter @myapp/web dev
# パターンマッチ
pnpm --filter "./packages/**" build
# 依存関係順にビルド
pnpm -r build
# 変更があったパッケージだけビルド
pnpm --filter "...[HEAD~1]" build
Corepack について
Node.js 16.9.0 以降に同梱されているCorepackは、パッケージマネージャのバージョン管理ツールです。
// package.json
{
"packageManager": "[email protected]"
}
# Corepack を有効化
corepack enable
# package.json の packageManager に従って自動的に正しいバージョンが使われる
pnpm install # v9.0.0 が使われる
チームメンバー全員が同じバージョンのパッケージマネージャを使えるため、「自分の環境では動く」問題を防げます。
選定ガイド
npm を選ぶべきケース
- 追加インストール不要: Node.jsに同梱
- シンプルなプロジェクト: 依存関係が少ない
- 互換性重視: すべてのツール・CIで確実に動く
- チーム全員がnpmに慣れている
yarn を選ぶべきケース
- Plug’n’Play(PnP)を使いたい: node_modulesなしで高速化
- 既存プロジェクトがyarnを使っている
- Zero-Installsが魅力的: リポジトリにキャッシュをコミット
pnpm を選ぶべきケース
- 速度が重要: CI/CDの時間短縮
- ディスク容量が気になる: 複数プロジェクトを開発
- モノレポ: 優れたワークスペース機能
- 厳密な依存関係管理: 幽霊依存を防ぎたい
- 新規プロジェクト: 2026年のデファクトに近い
移行方法
npm → pnpm
# pnpm をインストール
corepack enable
corepack prepare pnpm@latest --activate
# node_modules を削除
rm -rf node_modules package-lock.json
# pnpm でインストール
pnpm import # package-lock.json から pnpm-lock.yaml を生成(オプション)
pnpm install
# package.json に追記
# "packageManager": "[email protected]"
yarn → pnpm
rm -rf node_modules yarn.lock .yarnrc.yml
pnpm import # yarn.lock から変換
pnpm install
まとめ
| 判断軸 | npm | yarn | pnpm |
|---|---|---|---|
| 速度 | △ | ○ | ◎ |
| ディスク効率 | △ | △ | ◎ |
| 厳密さ | △ | ○ | ◎ |
| 学習コスト | ◎ | ○ | ○ |
| モノレポ | ○ | ○ | ◎ |
| エコシステム | ◎ | ○ | ○ |
2026年の新規プロジェクトであればpnpmがおすすめです。速度・ディスク効率・厳密性のすべてで優れており、Corepackのおかげでチーム導入も容易です。
package.jsonの構造を確認するには、AssistyのJSONフォーマッターで見やすく整形できます。