Force pnpm in Node.js Projects

calendar_today 2026-03-08
Force pnpm in Node.js Projects

Node.js のプロジェクトで pnpm をパッケージマネージャーとして使っているのですが、エージェントが勝手に npm を使ってしまうことがあります。これを防ぐために、pnpm を強制する仕込みを入れます。

1. npm_config_yesonly-allow を使う

only-allowpreinstall フックに仕込むことで、指定したパッケージマネージャー以外での実行をエラーにして中断させます。

設定手順

  1. only-allow devDependencies に追加
  2. package.jsonpreinstall スクリプトを追加
{
	"scripts": {
		"preinstall": "npx only-allow pnpm"
	}
}

この設定があると、誰かが npm installyarn install を叩いた瞬間にエラーメッセージが表示され、インストールが強制終了されます。

2. .npmrc でエンジンを制限する

プロジェクトのルートにある .npmrc ファイルに以下の設定を書き込むことで、特定のパッケージマネージャーの使用を促すことができます。

engine-strict = true

次に、package.jsonengines フィールドに使用を許可する pnpm のバージョンを指定します。

{
	"engines": {
		"pnpm": ">=8.0.0",
		"npm": "please_use_pnpm_instead"
	}
}

[!IMPORTANT] この方法は、環境によっては警告だけで済んでしまう場合があるため、方法1(only-allow) と併用するのが最も確実です。

3. Corepack を有効にする

Node.js 16.9.0 以降には、パッケージマネージャーのバージョンを管理する Corepack が同梱されています。これを使うと、プロジェクトで指定されたマネージャー以外を使おうとしたときにエラーを出してくれます。ただし、開発者が自分の PC で有効化し忘れていると、普通に npm install が通ってしまうため、あくまで補助的な役割になりそうです。

設定手順

  1. Corepack を有効化(OSのターミナルで実行)
corepack enable
  1. package.json でマネージャーを指定
{
	"packageManager": "pnpm@9.0.0"
}

これにより、npm install を実行しようとすると「このプロジェクトは pnpm を使うように設定されています」といった旨のエラーが出るようになります。

おわりに

これでエージェントだけでなく開発者にとっても pnpm 以外のパッケージマネージャーが間違って使われることを防ぐことができました。

label Tags: #node