pnpmとnpmの違い:コマンド対応表とインストール方法
pnpmとnpmの違いを一言で言うと
pnpmはnpmの上位互換に近いパッケージマネージャです。コマンドはnpmと似ていますが、ディスク効率・インストール速度・依存関係の厳格さの3点でnpmより優れています。
| 比較項目 | npm | pnpm |
|---|---|---|
| ディスク使用量 | 多い(プロジェクトごとにコピー) | 少ない(ストアで共有) |
| インストール速度 | 普通 | 速い(2回目以降は特に) |
| 幽霊依存の防止 | なし | あり |
run の省略 |
不可 | 可(pnpm dev) |
| npmコマンドとの互換性 | — | ほぼ同じ |
npmからpnpmへの移行は npm install → pnpm install に変えるだけでほとんどのケースで動きます。
npm・yarn・pnpm の比較
| 項目 | npm | yarn | pnpm |
|---|---|---|---|
| Node.js同梱 | あり | なし | なし |
| ディスク効率 | 低い(コピー) | 低い(コピー) | 高い(ハードリンク) |
| インストール速度 | 普通 | 速い | 速い |
| ロックファイル | package-lock.json |
yarn.lock |
pnpm-lock.yaml |
| 幽霊依存の防止 | なし | なし | あり |
| モノレポ対応 | workspaces | workspaces | workspaces |
- npm:Node.jsに同梱。追加インストール不要で始められる
- yarn:Facebookが開発。v1は広く普及。v4(Berry)はPnPモードで
node_modules自体をなくす設計 - pnpm:ディスク節約と厳格な依存管理が強み。複数プロジェクトを並行開発する場合に特に効果的
pnpmの特徴
ディスク容量を節約できる
npmはプロジェクトごとに node_modules に全パッケージをコピーします。pnpmはグローバルなストア(~/.pnpm-store)にパッケージを1つだけ保存し、各プロジェクトからはハードリンクで参照します。
npm: project-a/node_modules/react ← コピー
project-b/node_modules/react ← コピー(重複)
pnpm: ~/.pnpm-store/react ← 実体(1つだけ)
project-a/node_modules/react ← ハードリンク
project-b/node_modules/react ← ハードリンク
同じバージョンのパッケージが複数プロジェクトで使われていても、ディスク上のファイルは1つだけです。
インストールが速い
ストアにキャッシュがあれば、2回目以降のインストールはネットワーク通信なしで完了します。
フラットでない node_modules
npmは依存パッケージをフラットに展開するため、package.json に書いていないパッケージも参照できてしまいます(幽霊依存)。pnpmは厳格な構造を保つため、明示的に依存に追加したパッケージしかインポートできません。
インストール
# miseで管理する場合(推奨) mise use --global node@24 # npm経由でグローバルインストール npm install -g pnpm # Homebrewを使う場合 brew install pnpm
バージョン確認:
pnpm --version # 10.x.x
基本コマンド
プロジェクトの初期化
pnpm init
package.json が作成されます。
パッケージのインストール
# package.json の依存をすべてインストール pnpm install pnpm i # 短縮形 # パッケージを追加(dependencies) pnpm add react pnpm add react@18 # 開発用(devDependencies) pnpm add -D typescript pnpm add -D vitest eslint # グローバルインストール pnpm add -g @anthropic-ai/claude-code
パッケージの削除
pnpm remove react pnpm remove -D typescript
スクリプトの実行
pnpm run build pnpm build # run は省略可 pnpm run dev pnpm dev pnpm test
パッケージの更新
# インタラクティブに更新 pnpm update --interactive # 全パッケージを最新に pnpm update --latest # 特定パッケージを更新 pnpm update react
インストール済みパッケージの確認
# プロジェクトの依存を確認 pnpm list pnpm ls # ツリー表示 pnpm list --depth=2 # グローバルパッケージ pnpm list -g
pnpm add と pnpm install の違い
混乱しやすいポイントです。npmは npm install react(追加)と npm install(全体)が同じコマンドですが、pnpmは役割が分かれています。
| コマンド | 意味 | npmで言うと |
|---|---|---|
pnpm install |
package.json の全依存をインストール |
npm install |
pnpm add react |
reactを新規追加して package.json を更新 |
npm install react |
pnpm add -D vite |
開発依存として追加 | npm install -D vite |
pnpmでは「追加」は add、「全体インストール」は install と覚えると混乱しません。
npm・yarn・pnpm コマンド対応表
| 操作 | npm | yarn | pnpm |
|---|---|---|---|
| インストール | npm install |
yarn install |
pnpm install |
| パッケージ追加 | npm install react |
yarn add react |
pnpm add react |
| 開発用追加 | npm install -D vite |
yarn add -D vite |
pnpm add -D vite |
| 削除 | npm uninstall react |
yarn remove react |
pnpm remove react |
| スクリプト実行 | npm run build |
yarn build |
pnpm build |
| グローバル追加 | npm install -g pkg |
yarn global add pkg |
pnpm add -g pkg |
| パッケージ情報 | npm info react |
yarn info react |
pnpm info react |
| 更新 | npm update |
yarn upgrade |
pnpm update |
| キャッシュ削除 | npm cache clean |
yarn cache clean |
pnpm store prune |
| 一時実行 | npx vite |
yarn dlx vite |
pnpm dlx vite |
| ロックファイル | package-lock.json |
yarn.lock |
pnpm-lock.yaml |
.npmrc の設定
プロジェクトルートに .npmrc を置いて動作をカスタマイズできます。
# .npmrc # Node.jsのバージョンをpackage.jsonのenginesに合わせて強制 engine-strict=true # ロックファイルを自動更新しない(CI向け) frozen-lockfile=true # パッケージのインストール先を変更 store-dir=~/.pnpm-store
pnpm-lock.yaml
pnpmは pnpm-lock.yaml でロックファイルを管理します。package-lock.json(npm)や yarn.lock(yarn)に相当します。
# ロックファイルを使って厳密にインストール(CI環境向け) pnpm install --frozen-lockfile
チームで使う場合はロックファイルを必ずGit管理に含めます。
よくある使い方
Next.jsプロジェクトを作成する
pnpm dlx create-next-app@latest my-app cd my-app pnpm dev
Viteプロジェクトを作成する
pnpm create vite my-app --template react-ts cd my-app pnpm install pnpm dev
パッケージのストアを確認する
# ストアのパスを確認 pnpm store path # 不要なキャッシュを削除 pnpm store prune
まとめ
| 操作 | コマンド |
|---|---|
| 依存インストール | pnpm install |
| パッケージ追加 | pnpm add react |
| 開発用追加 | pnpm add -D typescript |
| 削除 | pnpm remove react |
| スクリプト実行 | pnpm build |
| 一時実行 | pnpm dlx create-next-app |
| 更新 | pnpm update |
| ストア掃除 | pnpm store prune |
npmとコマンドはほぼ同じなので、移行コストは低いです。特に複数のプロジェクトを並行して開発している場合はディスク節約の恩恵が大きくなります。
npmのバージョン確認・コマンドは「npm バージョン確認:コマンドと確認方法まとめ」を参照してください。
Node.js・npm・yarn・pnpmのバージョン確認は「Node.jsのバージョン確認方法:nvm・mise・npm・yarn・pnpm一覧」を参照してください。