pnpmとnpmの違い:コマンド対応表とインストール方法

スポンサーリンク

pnpmとnpmの違い:コマンド対応表とインストール方法

pnpmとnpmの違いを一言で言うと

pnpmはnpmの上位互換に近いパッケージマネージャです。コマンドはnpmと似ていますが、ディスク効率・インストール速度・依存関係の厳格さの3点でnpmより優れています。

比較項目 npm pnpm
ディスク使用量 多い(プロジェクトごとにコピー) 少ない(ストアで共有)
インストール速度 普通 速い(2回目以降は特に)
幽霊依存の防止 なし あり
run の省略 不可 可(pnpm dev
npmコマンドとの互換性 ほぼ同じ

npmからpnpmへの移行は npm installpnpm 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一覧」を参照してください。