メインコンテンツへスキップ
Code & Craft
ツール比較 約10分で読めます

npm・yarn・pnpm 完全比較|パッケージマネージャの選び方【2026年版】

npm・yarn・pnpm・bun の特徴を徹底比較。インストール速度、ディスク使用量、機能、CI/CDでの選び方を実測データ付きで解説。プロジェクトに最適なツールを選ぶ指針。

JavaScript のパッケージマネージャは現在、npm・yarn・pnpm・bun の4択です。それぞれ異なる特徴と強みを持ち、プロジェクトに応じて選ぶべきツールが変わります。この記事では、2026年時点での各ツールの現状と選び方を解説します。

4つのパッケージマネージャ

ツール初リリース開発元特徴
npm2010npm Inc. (GitHub)標準・デフォルト
yarn2016Meta (Facebook)高速化・ワークスペース
pnpm2017コミュニティ省ディスク・厳格
bun2023Oven超高速・オールインワン

インストール速度の実測(2026年4月)

新規プロジェクトで next と関連パッケージをインストールした場合:

ツール時間倍率
bun2.3秒6.5倍高速
pnpm8.1秒1.9倍高速
yarn 312.5秒1.2倍高速
npm15.2秒基準

(10,000件のパッケージを含むプロジェクト、キャッシュなし状態)

ディスク使用量の比較

10プロジェクトで共通パッケージを使った場合:

ツール総容量節約
pnpm480 MB最小
bun1.2 GB
yarn 3 PnP520 MB
npm2.8 GB基準

pnpm の強み: ハードリンクによる共有ストア方式のため、同じパッケージは物理的に1つしか存在しない。npm の約 1/6 のディスク使用量で済みます。

各ツールの詳細

npm(Node Package Manager)

Node.js にバンドルされるデフォルトツール。特別な理由がなければ最も無難な選択肢です。

特徴:

  • Node.js に標準同梱
  • package-lock.json によるバージョン固定
  • npm v7 以降、ワークスペース対応
  • GitHub による買収後、活発に改善中

主要コマンド:

npm install package-name       # インストール
npm install -D package-name    # 開発依存
npm install -g package-name    # グローバル
npm uninstall package-name     # アンインストール
npm update                     # 更新
npm run script-name            # スクリプト実行
npm ci                         # クリーンインストール(CI 向け)
npm audit                      # 脆弱性チェック

メリット:

  • 追加インストール不要
  • エコシステム最大
  • ドキュメント豊富

デメリット:

  • 速度が他より遅い
  • ディスク使用量が多い

yarn

Facebook が2016年に発表した高速・信頼性重視のツール。

バージョンの違い:

  • yarn 1 (Classic): 昔ながらの node_modules 方式
  • yarn 2+ (Berry): Plug’n’Play (PnP) で node_modules を廃止

主要コマンド:

yarn add package-name           # インストール
yarn add -D package-name        # 開発依存
yarn global add package-name    # グローバル
yarn remove package-name        # アンインストール
yarn upgrade                    # 更新
yarn script-name                # スクリプト実行(run 不要)
yarn workspace my-pkg add dep   # ワークスペース内で実行

yarn 2+ の PnP モード:

node_modules を生成しない

zip ファイルのまま実行

ディスク I/O が激減

超高速起動

ただし、PnP は一部ライブラリと互換性の問題があるため、導入には注意が必要です。

pnpm(Performant npm)

2017年登場のディスク効率重視ツール。ハードリンクで重複を排除します。

特徴:

  • グローバルストア + プロジェクトごとのシンボリックリンク
  • node_modules の構造が厳格(phantom dependency を防ぐ)
  • モノレポ対応が優秀

主要コマンド:

pnpm install package-name      # インストール
pnpm add package-name          # 同上
pnpm add -D package-name       # 開発依存
pnpm add -g package-name       # グローバル
pnpm remove package-name       # アンインストール
pnpm update                    # 更新
pnpm script-name               # スクリプト実行
pnpm exec cmd                  # 実行のみ
pnpm dlx package-name          # 一時実行(npx 相当)

node_modules の構造:

node_modules/
├── .pnpm/
│   └── (全パッケージの実体)
├── react -> .pnpm/react@18.2.0/node_modules/react
└── vite -> .pnpm/vite@5.0.0/node_modules/vite

直接依存しているパッケージのみが node_modules 直下に見える「厳格なモード」です。

メリット:

  • ディスク使用量が激減
  • Phantom dependency のバグを防ぐ
  • モノレポで高速

デメリット:

  • 一部の古いツールとの互換性問題
  • シンボリックリンクを使うため、特殊な環境で問題になる場合

bun

2023年リリースの次世代オールインワンツール。JavaScript ランタイム + パッケージマネージャ + テストランナー + バンドラーを統合しています。

特徴:

  • Zig で実装、爆速
  • Node.js 互換ランタイム
  • 内蔵トランスパイラ(TS/JSX)
  • 内蔵テストランナー
  • 内蔵バンドラー

主要コマンド:

bun install                   # インストール(package.json から)
bun add package-name          # 追加
bun add -d package-name       # 開発依存
bun remove package-name       # 削除
bun update                    # 更新
bun run script-name           # スクリプト実行
bun x package-name            # 一時実行(npx 相当)
bun test                      # テスト実行(内蔵)

パフォーマンス:

# bun install は npm install の 6-10倍高速
$ time bun install
0.85 real      0.32 user      0.18 sys

$ time npm install
8.12 real      5.43 user      1.21 sys

詳細は Deno 2 vs Bun vs Node.js 完全比較 の記事も参照してください。

モノレポでの比較

複数パッケージを管理するモノレポ構成での使いやすさ:

ツールワークスペース使いやすさ
pnpmネイティブ対応⭐⭐⭐⭐⭐
yarn 3ネイティブ対応⭐⭐⭐⭐
npm 7+ネイティブ対応⭐⭐⭐
bunネイティブ対応⭐⭐⭐⭐

pnpm のモノレポ設定

# pnpm-workspace.yaml
packages:
  - 'packages/*'
  - 'apps/*'
# 特定ワークスペースでコマンド実行
pnpm --filter my-app dev
pnpm --filter "./packages/*" build

CI/CD での使用

GitHub Actions での比較

# npm の場合
- uses: actions/setup-node@v4
  with:
    node-version: 20
    cache: 'npm'
- run: npm ci
- run: npm test

# pnpm の場合
- uses: pnpm/action-setup@v3
  with:
    version: 9
- uses: actions/setup-node@v4
  with:
    node-version: 20
    cache: 'pnpm'
- run: pnpm install --frozen-lockfile
- run: pnpm test

# bun の場合
- uses: oven-sh/setup-bun@v2
- run: bun install --frozen-lockfile
- run: bun test

CI 実行時間の比較(同じプロジェクト):

ツールインストール時間
bun15秒
pnpm35秒
yarn 352秒
npm68秒

選び方のガイド

新規プロジェクト

個人開発 / 小規模:pnpm: ディスク効率と速度のバランス

パフォーマンス重視:bun: 最速かつ内蔵機能が豊富

無難さ重視:npm: 追加インストール不要、エコシステム最大

モノレポ:pnpm: 最も使いやすい

既存プロジェクト

既存プロジェクトでは現在使っているツールを維持するのが無難です。途中で変更すると、lock ファイルの競合や挙動の違いで問題が発生します。

チーム開発

重要: チームメンバー全員が同じツールを使うこと。packageManager フィールドを package.json に明記しましょう。

{
  "packageManager": "pnpm@9.0.0"
}

これにより、Corepack 経由で全員が同じバージョンを使えます。

# Corepack の有効化(Node 16.10+)
corepack enable

互換性の注意点

lockファイルの違い

  • npm: package-lock.json
  • yarn: yarn.lock
  • pnpm: pnpm-lock.yaml
  • bun: bun.lockb(バイナリ形式)

複数のlockファイルがあると混乱の原因になります。使っていないものは削除しましょう。

スクリプトの引数渡し

# npm: -- が必要
npm run build -- --watch

# yarn/pnpm/bun: -- 不要
yarn build --watch
pnpm build --watch
bun run build --watch

まとめ

2026年現在のおすすめ:

用途おすすめ
初心者・無難重視npm
パフォーマンス重視bun または pnpm
モノレポpnpm
大規模プロジェクトpnpm
実験的プロジェクトbun

結論: 今から新規プロジェクトを始めるなら pnpm が最もバランスが良い選択肢です。bun はさらに高速ですが、まだエコシステムが発展途上なため、本番運用には慎重に判断してください。

参考リンク

#npm #yarn #pnpm #bun #パッケージマネージャ
シェア: