Skip to content
Latchkey

Yarn Berry vs pnpm: モダンな JS パッケージマネージャー

コンテンツアドレス指定のストアと厳格な依存分離による、高速でディスク効率の良い node_modules が欲しいなら pnpm を選び、Plug n Play、zero-installs、そしてそのプラグインと constraints システムが欲しいなら Yarn Berry を選びましょう。

Yarn Berry (Yarn 2 以降) と pnpm はどちらも npm に代わる高速でモダンな選択肢で、強力な monorepo サポートを備えます。両者の最大の違いは、依存関係をディスク上にどう配置するかです。pnpm はグローバルなコンテンツアドレス指定のストアと symlink を使い、厳格でフラットでない node_modules を生成します。Yarn Berry はデフォルトで Plug n Play (PnP) を使い、node_modules を完全に省略できます。

Yarn Berrypnpm
インストールモデルPnP (デフォルト) または node-modules linkerグローバルストアからの symlink
ディスク使用量低 (zero-installs キャッシュ)低 (ハードリンクのストア)
厳格さPnP 下では厳格厳格 (ファントム依存なし)
Workspacesあり (成熟)あり (成熟)
互換性PnP は一部ツールで patch が必要な場合あり高 (実際の node_modules レイアウト)
追加機能プラグイン、constraints、zero-installspnpm-lock.yaml、catalogs

それぞれが本当に優れている点

pnpm は幅広い互換性で優れます。symlink の node_modules はほとんどのツールにとって通常のレイアウトに見えつつ、宣言されていない (ファントム) 依存へのアクセスを防ぎます。Yarn Berry は PnP の zero-installs (キャッシュを commit して CI で yarn install をほぼ即時にする) と、その constraints およびプラグインエコシステムが欲しい場合に優れます。

CI では

どちらもキャッシュが良好に効きます。pnpm はストアから高速に復元し、pnpm install --frozen-lockfile がロックを強制します。zero-installs を使う Yarn Berry は、キャッシュが commit されているため CI のインストールをほぼ無料にできますが、その分リポジトリが大きくなります。どちらも lockfile の drift で失敗させる --immutable/--frozen-lockfile をサポートし、CI ではこれが望ましいでしょう。

正直な注意点

PnP は正確性を高めますが、一部のツールは物理的な node_modules を前提としており、node-modules linker や patch が必要でこれが摩擦になります。pnpm は混在するツールチェーンでは概して驚きの少ない選択肢ですが、その厳格さはフラットな npm ツリーが隠していた実際のバグ (宣言されていない依存) を表面化させることがあります。

結論

既存のツールとそのまま動作する、高速で厳格なインストールへの最もスムーズな道が欲しいなら pnpm を選びましょう。PnP の zero-installs、あるいはプラグインと constraints 機能を特に求めており、時折の互換性作業を許容できるなら Yarn Berry を選びましょう。

関連ガイド