パッケージマネージャとは?

Node.jsのパッケージマネージャは、プロジェクトの依存ライブラリをインストール・管理するツールです。2026年現在、主要な選択肢はnpmyarnpnpmの3つです。

3者の概要

項目npmyarnpnpm
開発元npm, Inc. (GitHub)Meta (Facebook)pnpm コミュニティ
初回リリース2010年2016年2017年
Node.js同梱ありcorepack経由corepack経由
ロックファイルpackage-lock.jsonyarn.lockpnpm-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

コマンド比較

操作npmyarnpnpm
インストールnpm installyarnpnpm install
パッケージ追加npm install pkgyarn add pkgpnpm add pkg
devDeps追加npm install -D pkgyarn add -D pkgpnpm add -D pkg
グローバル追加npm install -g pkgyarn global add pkgpnpm add -g pkg
削除npm uninstall pkgyarn remove pkgpnpm remove pkg
スクリプト実行npm run devyarn devpnpm dev
npx相当npx create-appyarn dlx create-apppnpm dlx create-app
更新npm updateyarn uppnpm update
キャッシュ削除npm cache clean --forceyarn cache cleanpnpm store prune

速度比較

ベンチマーク(参考値)

シナリオnpmyarnpnpm
初回インストール(キャッシュなし)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 サイズグローバルストア
npm250MBなし
yarn250MBなし
pnpm50MB200MB(共有)

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

まとめ

判断軸npmyarnpnpm
速度
ディスク効率
厳密さ
学習コスト
モノレポ
エコシステム

2026年の新規プロジェクトであればpnpmがおすすめです。速度・ディスク効率・厳密性のすべてで優れており、Corepackのおかげでチーム導入も容易です。


package.jsonの構造を確認するには、AssistyのJSONフォーマッターで見やすく整形できます。