Corepackを使ったプロジェクト別のpnpmとNode.jsのバージョン管理のすすめ
はじめまして。アスエネ株式会社の片山です。
はじめに
プロジェクトごとに異なる Node.js
や パッケージマネージャーのバージョンを管理したい時があると思います。
volta
や nvm
など、複数のツールがあり、何を使うか迷いますよね。
pnpm
を使ってる環境に限る箇所もありますが、自分としては corepack
を使用し、 pnpm
のバージョンを管理し、 corepack
で管理している pnpm
で Node.js
のバージョンを管理するのがスマートだと思ってます。
corepack とは
こちらの記事がとてもわかりやすいので、ご参照ください。
公式の説明を引用し簡単に説明すると、
Corepack lets you use Yarn, npm, and pnpm without having to install them.
corepack
を使用すると、Yarn
npm
およびpnpm
をインストールすることなく使用できます。
プロジェクト毎の Node.js をどのように管理するのか
pnpm
では、 .npmrc
ファイルに use-node-version
を記載することで、 特定の Node.js
バージョンをインストールし、 pnpm run
コマンドや pnpm node
コマンドの実行時に使用することが可能です。
この設定は、ワークスペースのルートにある .npmrc
ファイルでのみ機能します。
use-node-version=22.9.0
$ pnpm node -v
v22.9.0
また、 pnpm 9.6.0
からはワークスペース内のプロジェクト毎に Node.js
バージョンを管理する方法として package.json
内で pnpm.executionEnv.nodeVersion
フィールドを指定可能になりました。
{
"pnpm": {
"executionEnv": {
"nodeVersion": "22.9.0"
}
}
}
プロジェクト毎のパッケージマネージャーをどのように管理するのか
corepack
では、 package.json
内で packageManager
フィールドを指定することで、パッケージマネージャーの指定が可能です。
{
"packageManager": "pnpm@9.12.1"
}
$ pnpm -v
9.12.1
何が嬉しいか
簡単なバージョン管理
pnpm
を使用している環境に限りますが、 corepack
を使用することで、ワークスペース内の pnpm
のバージョンを管理しつつ、 corepack
が管理している pnpm
が Node.js
のバージョンを管理してくれるようになります。
例えばですが、ワークスペース内のファイルを下記に変更した場合
{
"packageManager": "pnpm@9.11.0",
"pnpm": {
"executionEnv": {
"nodeVersion": "22.1.0"
}
}
}
ワークスペース内の Node.js
及び pnpm
のバージョンは下記になります。
$ pnpm node -v
v22.1.0
$ pnpm -v
9.11.0
つまり、 package.json
の内容を変更するだけで、簡単にバージョンを切り替えることができます。
一貫性のある環境構築
プロジェクト内で pnpm
と Node.js
のバージョンを明示的に管理できます。
開発チーム全体で一貫性を保った環境を構築でき、異なる開発者や環境間での動作の不一致を防げます。
また、CI/CD環境での設定も同様に管理することができるので、異なる環境でのテストやデプロイ時にも一貫性を保てます。
バージョン衝突の回避
各プロジェクトで異なるバージョンの pnpm
や Node.js
を使うことができます。
プロジェクトごとの依存関係や動作要件に合わせて柔軟に対応が可能になり、バージョンの衝突を回避できます。
また、開発者がどのバージョンを使用しているかを把握しやすくなり、トラブルシューティングやデバッグの効率が向上します。
個人的には、 corepack
自体が nodejs
の組織レポジトリ内で管理されているのも嬉しいと思っています。
まとめ
corepack
のみで pnpm
及び Node.js
のバージョン管理が完結出来ます。
他のツールを使用し、 pnpm
及び Node.js
のバージョンを管理することも可能ですが、
-
nodejs
の組織レポジトリ内で管理されている -
pnpm
以外のパッケージマネージャーも管理できる -
global
のNode.js
を汚さない -
workspace
ごとに設定ができる
という点を踏まえ corepack
が Node.js
から削除されてもこれからも使っていこうと思います。
弊社にご興味をお持ちいただけましたら、下記採用ページからお問い合わせください。
Discussion