Skip to content
blog.kenichikat.me
Go back

npmユーザー向けのpnpm入門

npmユーザー向けに理解するpnpm

pnpm は、Node.js のパッケージマネージャーです。 コマンドの見た目は npm にかなり近いですが、内部の依存管理が異なります。

npm を使ってきた人が最初に押さえるべきポイントは次の3つです。

  1. 速い
  2. ディスク使用量が少ない
  3. 依存関係の不整合に気づきやすい

まず結論: npmと何が違う?

1. インストールの仕組み

この仕組みのおかげで、同じ依存を使うプロジェクトが多いほど pnpm の恩恵が大きくなります。

2. 依存解決の厳しさ

pnpm は「宣言していない依存」を参照しにくい構造です。

つまり、

が早めに壊れてくれるため、結果的に健全な依存管理になります。

3. lockfileが異なる

チームで使うときは、どちらかに統一します。

npmコマンドとの対応表

やりたいことnpmpnpm
依存を追加npm install axiospnpm add axios
開発依存を追加npm install -D typescriptpnpm add -D typescript
依存を削除npm uninstall axiospnpm remove axios
スクリプト実行npm run buildpnpm build
一時実行npx vitestpnpm dlx vitest
全依存インストールnpm installpnpm install

pnpm run build でも動きますが、通常は pnpm build と短く書けます。

導入手順

Node.js には Corepack が同梱されているため、次の2コマンドで始められます。

corepack enable
corepack prepare pnpm@latest --activate

確認:

pnpm --version

既存npmプロジェクトをpnpmへ移行する

プロジェクト直下で実行:

rm -rf node_modules package-lock.json
pnpm install

これで pnpm-lock.yaml が作られます。

チーム開発では、README や CI のコマンドも npm から pnpm にそろえます。

workspaceを使うとさらに便利

モノレポの場合、pnpm の workspace は扱いやすいです。

例: pnpm-workspace.yaml

packages:
	- apps/*
	- packages/*

特定パッケージだけに依存追加:

pnpm --filter @myorg/web add zod

よくあるハマりどころ

  1. npm用の手順が混ざる
    • npm install を叩くと lockfile が混在しやすい
  2. 宣言漏れ依存でビルドが落ちる
    • 実はこれが pnpm の良さ。必要な依存を package.json に追加する
  3. ツールが node_modules の特殊構造を前提にしていない
    • まずはツールを最新版に上げる

npmユーザー向けのおすすめ運用

  1. 新規プロジェクトは最初から pnpm にする
  2. lockfile は pnpm-lock.yaml のみをコミットする
  3. CI もローカルも同じコマンドに統一する
  4. 「暗黙依存を許さない」文化に寄せる

まとめ

pnpm は、npm の代替というより「npmに慣れた人が自然に移行できる改良版」に近いです。

まずは1つの個人プロジェクトを pnpm 化して、体感をつかむのがおすすめです。


Share this post on:

Previous Post
Astroプロジェクトをnpmからpnpmへ移行する
Next Post
axiosのサプライチェーン攻撃の影響確認