pnpm

Performant NPMの略で主な特徴は

  • キャッシュとリンク方式で npm / yarn より高速
  • 同じ依存は 1 回だけ保存 → ディスク節約
  • 隠れた依存を許さない → バグを防ぎやすい
特徴npmyarnpnpm
速度標準的npm より速い最速クラス
ディスク使用多い(各プロジェクトごとに保存)npm と同等少ない(依存は一度だけ保存しリンク)
依存解決の厳密さ緩い(偶然動くケースあり)少し改善厳密(隠れた依存を許さない)
モノレポ対応限定的Workspaces ありWorkspaces が強力でシンプル
セキュリティ基本機能のみ同等ライフサイクルスクリプト無効化や minimumReleaseAge で強化
普及度最も広い2番手急速に拡大中

2025 9月「npm サプライチェーン攻撃」

感染したパッケージがインストールされると、スクリプトが自動的に実行され、開発環境内に保存されている認証情報がスキャンされます。

そこからその開発者が持つあらゆる権限(リポジトリ、クラウド、公開パッケージ等)へ横展開されます。

pnpm で対策

pnpmのオプション minimumReleaseAge

公開から指定時間(分)が経過したパッケージのみをインストール可能。

Lifecycle Scriptsの無効化

Lifecycle Scripts(ライフサイクルスクリプト)」とは、npm / pnpm などのパッケージマネージャが「依存関係をインストールする過程」で自動的に呼び出すスクリプトです

pnpm 10.0.0 から、ライフサイクルスクリプトは、デフォルトでは実行されない

悪意あるスクリプトの実行も一定数は防ぐことが可能です

pnpm導入

npm でインストール

npm -v
10.9.0

npm install -g pnpm

added 1 package in 9s

pnpm -v
10.17.1

npmから移行

rm -rf node_modules

package.jsonを編集

{
  "scripts": {
    "preinstall": "npx only-allow pnpm",
pnpm install