第11章:Corepackのいま:入る場合/入らない場合の整理 🧩🧰⚡️
Corepackは「プロジェクトごとに、使うパッケージマネージャ(pnpm / Yarn)の“バージョンを固定”して、全員で揃える」ための仕組みだよ 😄✨ やること自体はシンプルで、効果がデカい(ローカル・コンテナ・CIでズレなくなる)ので、ここで土台を固めよう!🔒
✅ この章でできるようになること 🧠✨
- pnpm / Yarn の バージョン差で壊れる・遅くなるを防ぐ(ロックファイル揺れ、再ビルド増など)🧯
- ローカルとコンテナで 同じpnpm/Yarnが動く状態を作る 🐳🔁
- 「Corepackが入ってない/効いてない」時の 典型トラブルを即解決できる 😵💫➡️😆
1) Corepackって結局なに?🤔➡️😎
Corepackは Node.js同梱の“パッケージマネージャ管理ツール”。
pnpm や yarn を直接グローバルインストールしなくても、
- プロジェクトの
package.jsonを見て(packageManager) - 指定されたバージョンの pnpm/Yarn を必要ならDLして
- そのバージョンで実行してくれる
…って動き方をするよ 🧩 (この「プロジェクト設定を見て、足りなければ落としてくる」が本質!) (nodejs.org)
2) 「入る/入らない」「効く/効かない」整理(ここが罠)🪤
✅ (A) “入ってる”ケース(でもまだ油断ダメ)🧨
Corepack自体は、公式のNode.js配布に同梱されている(Node 14.19 / 16.9 以降)よ 📦 (yarnpkg.com) さらに、Corepackは今でも Experimental扱いで、明示的に有効化が必要って書かれてる。つまり——
入ってても、
corepack enableしないと効かないことがある 😵💫
✅ (B) “入ってない”ことがあるケース 😭
OSのパッケージ管理経由などの「サードパーティ配布」だと、Corepackが最初から入ってないことがある(とYarn側が注意してる)⚠️ (yarnpkg.com)
その場合は npm install -g corepack で入れてから corepack enable が効く、という案内もあるよ 🛠️ (yarnpkg.com)
🔎 2026のNodeの“今”も軽く押さえとく 🗓️
Nodeのリリースラインは動くので、チーム内でバージョンが割れるとCorepack以前に色々ズレるよね。 Node公式のリリース一覧だと、v24がLTS、v25がCurrent みたいに整理されてる(更新日も載ってる)📌 (nodejs.org)
3) “固定”の本丸:package.json の packageManager 🔒🎯
Corepackは 近い階層の package.json を探して、packageManager を読み取るよ 🧭 (nodejs.org)
例:pnpmを固定する(2026-02時点で pnpm 10.29.2 がリリースとして表示されてる)📌 (GitHub)
{
"name": "my-app",
"private": true,
"packageManager": "pnpm@10.29.2"
}
👍 付け方のいちばんラクな方法:corepack use ✨
Node公式ドキュメントにも、corepack use で package.json を更新できるって書かれてるよ 🪄 (nodejs.org)
corepack enable
corepack use pnpm@10.29.2
Yarnも同じノリ:
corepack enable
corepack use yarn@*
※ yarn@* みたいな指定もできるけど、“完全再現”を狙うなら最終的に固定バージョンに寄せるのが安心だよ(ロックファイルと一緒に固定、が気持ちいい)🔒✨
(Corepackが「チーム全員が同じバージョンを使えるようにする」目的だよ〜という説明もある) (nodejs.org)
4) 🧪ミニ演習:ローカル⇄コンテナで“同じpnpm”に揃える 🔁🐳
Step 0: まず現状チェック 👀
node -v
corepack --version
pnpm -v
yarn -v
pnpm: command not found とか出てもOK(ここから直す)👌
Step 1: Corepackを有効化する ⚙️
corepack enable
Corepackは「有効化しないと効果がない」って明記されてるやつね 🧩 (nodejs.org)
Step 2: プロジェクトに“使うpnpmのバージョン”を書き込む 📝🔒
corepack use pnpm@10.29.2
これで package.json に packageManager が入って、プロジェクトとして固定できる 🎯 (nodejs.org)
Step 3: インストールして、バージョンが揃うのを確認 ✅
pnpm -v
pnpm install
ここでCorepackが必要ならDLしてくれる(初回だけネットが要る)📥 (nodejs.org)
Step 4: コンテナ側でも同じことが起きるのを確認 🐳✨
「コンテナ内でもCorepackが読めて、同じpnpmになる」最低限の例👇
FROM node:24-bookworm-slim
WORKDIR /app
## 1) Corepackを有効化
RUN corepack enable
## 2) packageManager を含む package.json を先にコピー(キャッシュにも嬉しい)
COPY package.json pnpm-lock.yaml* ./
## 3) ここでCorepackが "packageManager" を見て pnpm を準備してくれる
RUN pnpm -v && pnpm install
## 4) 残りのソース
COPY . .
CMD ["node", "dist/index.js"]
ポイントはこれ👇
RUN corepack enableを入れて、コンテナ内でも shims が有効になるようにする 🧩 (nodejs.org)pnpm -vを入れると、「ちゃんと固定バージョンが動いてる」確認が一発でできる ✅
5) よくある詰まりポイント集 😵💫➡️🧯
❌ pnpm / yarn が見つからない
✅ ほぼこれ:corepack enable が未実行
Corepackは有効化が必要って明記されてるよ 🧩 (nodejs.org)
❌ corepack enable が権限エラーで失敗する
Corepackは node の近くにshims(リンク/プロキシ)を作るので、配置場所が読み取り専用だと失敗することがあるよね 😭
Corepackのリポジトリでは、回避策として
--install-directoryで別の場所に入れる- もしくはシェル/PowerShellで
corepack pnpmを呼ぶ関数/aliasにする
みたいな方向が書かれてる 🛠️ (GitHub)
❌ npm install -g yarn がうまくいかない
これは「Corepackのバイナリをnpmがうっかり上書きしないように」ブロックする挙動があるよ、ってNode側に説明がある 🧯 (nodejs.org) なので基本は「グローバルインストールで殴らず、Corepackに任せる」が安全 😄✨
❌ ネットに出られない環境で落ちる(CIなど)📡🚫
Corepackは、必要に応じてパッケージマネージャ本体をDLする設計だから、ネット不可だと詰まりやすい 😵💫 (nodejs.org)
対策として corepack pack で事前に固める「オフライン手順」が用意されてるよ 📦 (nodejs.org)
6) 🤖AI活用:Corepack固定を“最短で正しく”やるプロンプト集 🧠✨
(1) まず診断してもらう(貼り付けるだけ)🩺
以下の情報から、Corepackが効いていない原因を推理して、最短の修正手順を番号付きで出して。
- node -v の結果:
- corepack --version の結果:
- pnpm -v の結果:
- package.json の packageManager の有無:
- 実行したコマンドとエラーメッセージ(全文):
(2) package.json を安全に固定にする(差分で出して)🔧
この package.json に packageManager を追加して、pnpm を固定したい。
- 追加する行だけ最小差分で提案して(JSONの順序も崩さない)
- 追加後に実行すべきコマンドを3つまでに絞って
(3) DockerfileにCorepack固定を組み込む(キャッシュも意識)🐳⚡️
このDockerfileに Corepack enable と packageManager 固定を組み込みたい。
- キャッシュが効く順序で
- 変更点は差分形式で
- “なぜその順なのか”を1行コメントで入れて
(Dockerfileは以下:)
...貼る...
7) まとめチェックリスト ✅📌
-
corepack enable済み(ローカル/コンテナ両方)🧩 (nodejs.org) -
package.jsonにpackageManagerが入ってる 🔒 (nodejs.org) -
pnpm -v/yarn -vが「プロジェクト指定のバージョン」になってる ✅ - ネット制限があるなら
corepack packなどオフライン策を用意 📦 (nodejs.org)
次の第12章は、ここで揃えた前提の上に RUN --mount=type=cache で“ダウンロード地獄”を潰すから、体感の伸びがめちゃ出るよ 🧠✨⚡️