⚙️

Corepackを使ったプロジェクト別のpnpmとNode.jsのバージョン管理のすすめ

2024/10/29に公開

はじめまして。アスエネ株式会社の片山です。

はじめに

プロジェクトごとに異なる Node.js や パッケージマネージャーのバージョンを管理したい時があると思います。

voltanvm など、複数のツールがあり、何を使うか迷いますよね。

pnpm を使ってる環境に限る箇所もありますが、自分としては corepack を使用し、 pnpm のバージョンを管理し、 corepack で管理している pnpmNode.js のバージョンを管理するのがスマートだと思ってます。

corepack とは

こちらの記事がとてもわかりやすいので、ご参照ください。

https://zenn.dev/teppeis/articles/2021-05-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 ファイルでのみ機能します。

.npmrc
use-node-version=22.9.0
$ pnpm node -v
v22.9.0

また、 pnpm 9.6.0 からはワークスペース内のプロジェクト毎に Node.js バージョンを管理する方法として package.json 内で pnpm.executionEnv.nodeVersion フィールドを指定可能になりました。

package.json
{
  "pnpm": {
    "executionEnv": {
      "nodeVersion": "22.9.0"
    }
  }
}

プロジェクト毎のパッケージマネージャーをどのように管理するのか

corepack では、 package.json 内で packageManager フィールドを指定することで、パッケージマネージャーの指定が可能です。

package.json
{
  "packageManager": "pnpm@9.12.1"
}
$ pnpm -v
9.12.1

何が嬉しいか

簡単なバージョン管理

pnpm を使用している環境に限りますが、 corepack を使用することで、ワークスペース内の pnpm のバージョンを管理しつつ、 corepack が管理している pnpmNode.js のバージョンを管理してくれるようになります。

例えばですが、ワークスペース内のファイルを下記に変更した場合

package.json
{
  "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 の内容を変更するだけで、簡単にバージョンを切り替えることができます。

一貫性のある環境構築

プロジェクト内で pnpmNode.js のバージョンを明示的に管理できます。
開発チーム全体で一貫性を保った環境を構築でき、異なる開発者や環境間での動作の不一致を防げます。
また、CI/CD環境での設定も同様に管理することができるので、異なる環境でのテストやデプロイ時にも一貫性を保てます。

バージョン衝突の回避

各プロジェクトで異なるバージョンの pnpmNode.js を使うことができます。
プロジェクトごとの依存関係や動作要件に合わせて柔軟に対応が可能になり、バージョンの衝突を回避できます。
また、開発者がどのバージョンを使用しているかを把握しやすくなり、トラブルシューティングやデバッグの効率が向上します。

個人的には、 corepack 自体が nodejs の組織レポジトリ内で管理されているのも嬉しいと思っています。

まとめ

corepack のみで pnpm 及び Node.js のバージョン管理が完結出来ます。
他のツールを使用し、 pnpm 及び Node.js のバージョンを管理することも可能ですが、

  1. nodejs の組織レポジトリ内で管理されている
  2. pnpm 以外のパッケージマネージャーも管理できる
  3. globalNode.js を汚さない
  4. workspace ごとに設定ができる

という点を踏まえ corepackNode.js から削除されてもこれからも使っていこうと思います。

弊社にご興味をお持ちいただけましたら、下記採用ページからお問い合わせください。
https://corp.earthene.com/recruit#recruit

Discussion