CI における Yarn vs pnpm: どちらのパッケージマネージャが速いか
どちらも素の npm を速度で上回りますが、Yarn(特に PnP を備えた Berry)と pnpm は、高速で再現可能な install に至るために異なる道を取ります。
Yarn は成熟したパッケージマネージャです。Yarn Berry(v2+)は node_modules を完全にスキップする Plug'n'Play を追加します。pnpm はハードリンクを用いたコンテンツアドレス方式の store と、厳格で非フラットなレイアウトを使います。
| Yarn | pnpm | |
|---|---|---|
| インストールモデル | node_modules または PnP (Berry) | リンクされたコンテンツ store |
| インストール速度 | 高速 | 高速 (しばしば最速) |
| Lockfile | yarn.lock | pnpm-lock.yaml |
| CI での install | yarn install --immutable | pnpm install --frozen-lockfile |
| 厳格さ | より緩い (Classic) / 厳格 (PnP) | デフォルトで厳格 |
CI において
pnpm は通常最速で、最小のディスクフットプリントと厳格な解決を標準で備えます。Yarn Berry の PnP も非常に高速で cache に優しくなり得ますが、PnP はときにパッケージ互換性のための shim を必要とします。Yarn Classic は安定して広く使われていますが、モダンな両オプションより遅いです。再現性のために CI では immutable/frozen フラグを選んでください。
正しいものを cache する
pnpm の store、または Yarn の cache/.yarn ディレクトリを lockfile でキーづけして cache してください。両者とも CI runner 上で同一に動作し、重い install をより高速なマネージド runner に任せることで、job の最も遅い部分を短縮できます。
結論
最速の install と最小限の手間での厳格さが欲しいなら pnpm。すでに Yarn を使っていて PnP の zero-install cache モデルが欲しいなら Yarn Berry。どちらでも lockfile を commit し、immutable/frozen フラグを使ってください。
関連ガイド
pnpm vs Yarn: Which Package Manager for CI?pnpm vs Yarn for CI: install speed, disk usage, strictness, and monorepo support. Which Node package manager…
npm vs pnpm: Which Node Package Manager for CI?npm vs pnpm for CI: install speed, disk usage, lockfiles, and monorepo support. Which package manager keeps y…
How to Cache Dependencies in GitHub Actions (Every Ecosystem)Cache dependencies in GitHub Actions with actions/cache - correct keys and paths for npm, yarn, pnpm, pip, Ma…