Skip to content
Latchkey

Corepack vs nvm: Node ツールの固定を比較

両者は実際には競合しません。nvm は Node.js ランタイムのバージョンを固定し、Corepack はプロジェクトが使うパッケージマネージャー (とバージョン) を固定します。多くのチームは両方を併用します。

Corepack と nvm はよく一緒に言及されますが、異なる問題を解決します。nvm (Node Version Manager) はマシン上で Node.js のバージョンをインストールして切り替えます。Corepack は Node.js に同梱され、パッケージマネージャーを管理します。package.json の packageManager フィールドを読み、正確な pnpm/Yarn バージョンをプロビジョニングします。どちらを使うべきかを知っておくと CI での混乱を避けられます。

Corepacknvm
固定するものパッケージマネージャー + バージョンNode.js のバージョン
信頼できる情報源package.json の packageManager.nvmrc またはコマンド
Node に同梱あり (バンドル)なし (別途インストール)
スコープpnpm、Yarn (npm も)Node ランタイム自体
典型的な CI での用途corepack enablenvm install / setup-node
置き換える対象pnpm/Yarn の手動インストールシステムの Node、OS パッケージ

競合ではなく補完する

nvm (または CI の setup-node ステップ) で正しい Node.js バージョンを取得し、次に Corepack で正しいパッケージマネージャーのバージョンを取得します。"packageManager": "pnpm@9.x" の設定に加えて corepack enable を行うと、すべての開発者と runner が同じ pnpm を使うことが保証され、バージョンの drift による lockfile の churn を防ぎます。

CI では

GitHub Actions では、actions/setup-node が Node バージョンを扱い (nvm スタイルのニーズをカバー)、キャッシュをサポートします。Corepack を有効化する (corepack enable) と、手動のインストールステップなしで固定されたパッケージマネージャーが利用可能になり、CI がローカルと完全に一致します。このペアリングにより、pnpm/Yarn のバージョン違いによる「自分のマシンでは動く」問題を解消できます。

正直な注意点

Corepack はパッケージマネージャーのみを管理し、Node 自体は管理しないため、nvm/setup-node の代替にはなりません。Corepack は Node のバージョン間でリリースや署名の変更があったため、固定してテストしましょう。nvm は shell ベースで、一部の代替 (fnm、mise) より切り替えが遅いですが、最も広く文書化されています。

結論

どちらか一方を選ぶのではありません。Node.js のバージョンには nvm または setup-node を、パッケージマネージャーのバージョンには Corepack を使いましょう。両者を併用することで、Node のツールチェーンをマシン間および CI で再現可能にします。

関連ガイド