---
title: "corepack prepareは非推奨？後継のinstall -g・use・enableとpnpmの版管理、Node.js 25以降の導入"
url: "https://www.issoh.co.jp/tech/details/2765/"
published: 2024-06-25
updated: 2026-10-16
categories: ["Node.js"]
publisher: "株式会社一創"
---

# corepack prepareは非推奨？後継のinstall -g・use・enableとpnpmの版管理、Node.js 25以降の導入

`corepack prepare pnpm@latest --activate` は、pnpmの最新版をダウンロードして、プロジェクトの外で使う既定の版に設定するコマンドです。今も動きますが、Corepack 0.20.0（2023年8月）でヘルプの一覧から外れました。後継は `corepack install -g` と `corepack pack` です。さらにNode.js 25.0.0（2025年10月15日）からCorepack自体がNode.jsに同梱されなくなり、Node.js 25以降では `corepack` コマンドがそもそも見つかりません。

以下のコマンドの出力は、Node.js v26.5.0（macOS・x64）にCorepack 0.36.0（2026年8月28日公開の最新版）を入れ、pnpm 9.15.9〜12.11.2で実行して確かめたものです（2026年10月15日時点）。

## まとめ：corepack prepareとpnpm管理の要点

- `corepack prepare` は0.20.0でヘルプから外れた旧コマンドです。0.36.0でも警告なしで動きますが、新しく書く手順では `corepack install -g pnpm@<版>`（既定の版を切り替える）か `corepack pack`（オフライン用に固める）を使います。
- プロジェクトにpnpmの版を固定するなら `corepack use pnpm@<版>`。package.jsonの `packageManager` にハッシュ付きで書き込まれます。同じメジャー内の更新は `corepack up` です。
- Node.js 25以降はCorepackが同梱されないので、`npm install -g corepack` で入れます（pnpmとYarnのシムも同時に置かれます）。Node.js 26は2026年10月28日にLTSへ移る予定で、CorepackのないLTSが始まります。
- 「you should update pnpm with corepack」は、Corepack経由で動いているpnpmに `pnpm self-update` を実行したときのエラーです。`corepack use pnpm@latest` で直します。
- pnpm 10以降はpnpm自身が `packageManager` を読んで版を切り替えます。pnpmだけを使うプロジェクトなら、Corepackを入れなくても版はそろいます。
- Node.js 26の非推奨警告DEP0205は `module.register()` が対象で、Corepackとは無関係です。

## Corepackの役割と配布形態の変化

Corepackは、pnpmとYarnの版をプロジェクトごとに切り替える仲介役です。`pnpm` や `yarn` のコマンドを横取りし、package.jsonの `packageManager` に書かれた版がなければダウンロードして実行します。Node.js本体の版は切り替えないので、Node.jsの版をそろえるなら[miseとは？mise.tomlでツール・環境変数・タスクを束ねる導入手順【2026年版】](/tech/details/17621/)で紹介しているmiseなどを併用します。npm自体の役割は[npmとは？CLIとレジストリの役割・package.jsonとv12の変更点を解説](/tech/details/17664/)にまとめています。

### Node.js 25.0.0で同梱が終わった経緯

Node.jsの技術運営委員会（TSC）は、[「Should Corepack stay in the Node.js distribution?」の投票](https://github.com/nodejs/TSC/pull/1697)を2025年3月19日に締め切り、Node.js 25以降はCorepackを配布しないと決めました。実装は[nodejs/node PR #57617「build: stop distributing Corepack」](https://github.com/nodejs/node/pull/57617)で、Node.js 25.0.0（2025年10月15日）に入りました。[Node.js 24のCorepackのドキュメント](https://nodejs.org/docs/latest-v24.x/api/corepack.html)には「Corepack will no longer be distributed starting with Node.js v25.」と書かれています。

| Node.js                | Corepack         | サポート期限            |
| ---------------------- | ---------------- | ----------------- |
| 14.19.0・16.9.0〜24.20.x | 同梱（Experimental） | 24.xは2028-04-30   |
| 24.21.0以降の24.x         | 同梱（0.36.0）       | 2028-04-30        |
| 25.x                   | 同梱なし             | 2026-06-01に終了済み   |
| 26.x                   | 同梱なし             | LTS入り2026-10-28予定 |

同梱をやめたのはNode.jsの配布物からで、Corepackの開発は[nodejs/corepack](https://github.com/nodejs/corepack)で続いています。npmの `corepack` パッケージは0.36.0が最新です。ただし0.36.0の `engines` は `^22.22.2 || ^24.15.0 || >=26.0.0` で、Node.js 20・23・25は対象外です（npmは導入を止めませんが、動作は保証されません）。Node.js 26で出る非推奨警告[DEP0205](https://nodejs.org/api/deprecations.html#DEP0205)は `module.register()` を対象にしたもの（25.9.0で文書のみ、26.0.0で実行時の警告）で、Corepackの同梱終了とは無関係です。

### Corepackを導入する：npm install -g corepackとcorepack enable

Node.js 25以降、またはNode.js 24に同梱された古いCorepackを更新したいときは、npmでグローバルに入れます。グローバルに入れたpnpmやYarnは先に消します。

```
npm uninstall -g pnpm yarn
npm install -g corepack@latest
corepack --version
# 0.36.0
corepack enable
```

npmで入れたCorepackは、package.jsonの `bin` に従って導入した時点で `pnpm`・`pnpx`・`yarn`・`yarnpkg` の4つのシム（中継用のリンク）を置きます。この場合 `corepack enable` は必須ではありません。Node.js 24以前に同梱されたCorepackでは `corepack enable` がNode.jsのインストール先にシムを作り、`corepack enable pnpm` と名前を付けると `pnpm` と `pnpx` の2つだけになります。置き場所を変えるなら `--install-directory` を付けます。

```
corepack enable pnpm --install-directory ~/.local/bin
ls ~/.local/bin
# pnpm  pnpx
corepack disable pnpm   # シムを消す。ダウンロード済みのpnpmは残る
```

## corepack prepareの使い方と非推奨の扱い

`corepack prepare` は、指定した版のパッケージマネージャを `COREPACK_HOME`（macOS・Linuxの既定は `~/.cache/node/corepack`）にダウンロードします。`--activate` を付けると、その版を「プロジェクト外で使う既定の版」として `lastKnownGood.json` に記録します。

### `corepack prepare pnpm@latest --activate`の実行結果

Corepack 0.36.0で実行した結果です。`latest` や `stable` のようなタグも受け付けます。

```
$ corepack prepare pnpm@latest --activate
Preparing pnpm@latest for immediate activation...
$ corepack prepare yarn@stable --activate
Preparing yarn@stable for immediate activation...
$ cat ~/.cache/node/corepack/lastKnownGood.json
{
  "pnpm": "12.11.2",
  "yarn": "4.18.1"
}
```

引数を省いた `corepack prepare` は、package.jsonの `packageManager`（なければ `devEngines.packageManager`）の版を準備します。どちらもないプロジェクトでは次のエラーで止まります。

```
Usage Error: The local project doesn't feature a 'packageManager' field nor a 'devEngines.packageManager' field - please specify the package manager to pack, or update the manifest to reference it
```

### Corepack 0.20.0で非推奨になったコマンドと後継

[Corepack 0.20.0（2023年8月29日）のCLI再編](https://github.com/nodejs/corepack/pull/291)で、`install`・`use`・`up`・`pack` が加わり、`prepare` と `hydrate` はソース上 `commands/deprecated/` へ移されました。`corepack --help` にはもう出てきません。実行しても警告は出ず、0.36.0でも動くので、古いDockerfileがすぐ壊れることはありません。ただ、公式READMEは後継のコマンドしか説明していないため、新しく書く手順は次の対応表に合わせて書き換えます。

| やりたいこと      | 旧コマンド                       | 0.20.0以降                  |
| ----------- | --------------------------- | ------------------------- |
| 既定の版を切り替える  | `prepare pnpm@9 --activate` | `install -g pnpm@9`       |
| プロジェクトの版を取得 | `prepare`（引数なし）             | `install`（引数なし）           |
| オフライン用に固める  | `prepare -o`                | `pack -o`                 |
| 固めたものを展開    | `hydrate`                   | `install -g --cache-only` |
| プロジェクトに版を固定 | （なし）                        | `use pnpm@9`              |

`corepack install -g pnpm@9.15.9` を実行すると `lastKnownGood.json` の `pnpm` が9.15.9に変わり、`prepare --activate` と同じ結果になりました。一方、引数なしの `corepack install` はプロジェクトの版をキャッシュに入れるだけで、既定の版は変えません。

## packageManagerでpnpmのバージョンを固定する

チーム全員が同じ版のpnpmを使うには、package.jsonの `packageManager` に版を書きます。「.npmrcにpackage-managerを書く」という古い解説がありますが、Corepackが読むのはpackage.jsonの `packageManager` と `devEngines.packageManager` だけです。

### corepack useで版を書き込む

`corepack use` は、指定した範囲の最新版を調べてpackage.jsonに書き込み、そのまま `pnpm install` まで実行します。

```
$ corepack use pnpm@latest
Installing pnpm@12.11.2 in the project...
Done in 302ms using pnpm v12.11.2
$ cat package.json
{
  "name": "p2",
  "version": "1.0.0",
  "packageManager": "pnpm@12.11.2+sha512.25a51652a196...（省略）"
}
```

`corepack use` でメジャーを変えてnode\_modulesの作り直しが要るとき、端末もCI変数もない環境（docker buildやスクリプト）では、package.jsonは書き換わったうえで `ERR_PNPM_ABORTED_REMOVE_MODULES_DIR_NO_TTY` により `pnpm install` だけが止まります。`CI=true` を付けて実行します。

`+sha512.` 以降はダウンロードしたファイルのハッシュで、別のファイルにすり替わっていれば検証で止まります。手で書くなら `"packageManager": "pnpm@12.11.2"` のように完全な版番号にします。`"pnpm@10"` のような範囲を書くと「Invalid package manager specification in package.json (pnpm@10); expected a semver version」で止まります。`packageManager` がないプロジェクトで `pnpm` を実行すると、Corepackは既定の版（このときは12.11.2）を使い、package.jsonには何も書き足しませんでした。自動で書き足させたいときは `COREPACK_ENABLE_AUTO_PIN=1` を設定します。

### corepack upで同じメジャー内の最新版に上げる

`corepack up` は、今の `packageManager` と同じメジャーの範囲で最新版に上げます。`pnpm@10.0.0` のプロジェクトで実行すると `pnpm@10.34.7` に変わり、11や12には上がりませんでした。10.34.7はnpmのdist-tagでは `next-10`（`latest-10` は10.34.6）で、Corepackはタグではなく範囲内の最も新しい版を選びます。メジャーを上げるときは `corepack use pnpm@latest` を明示します。

### devEngines.packageManagerの範囲指定

Corepack 0.32.0（2025年2月）から `devEngines.packageManager` を読み、0.36.0からは `packageManager` がないときにここの範囲から版を選ぶようになりました。範囲で書くと、ネットワーク（またはキャッシュにある該当版）を使って解決するため、時期によって選ばれる版が変わります。再現性を優先するなら `packageManager` に完全な版を書きます。

```
{
  "devEngines": {
    "packageManager": { "name": "pnpm", "version": "^12.0.0", "onFail": "warn" }
  }
}
```

## 「you should update pnpm with corepack」の原因と対処

このメッセージは `ERR_PNPM_CANT_SELF_UPDATE_IN_COREPACK` というエラーの本文です。[pnpm self-update](https://pnpm.io/cli/self-update) は、pnpmが自分自身を新しい版に入れ替えるコマンドですが、Corepack経由で動いているpnpmは自分を入れ替えられないので失敗します。新しい版を「推奨されている」という通知ではありません。エラーの文面は版によって違います。

| pnpm            | pnpm self-update の表示（Corepack経由）                          |
| --------------- | --------------------------------------------------------- |
| 9.15.9          | You should update pnpm with corepack                      |
| 10.34.7・11.28.2 | pnpm cannot update itself when it is executed by Corepack |
| 12.11.2         | 同上（Error: で始まる形式）                                         |

10.34.7と11.28.2は2行目に「Install pnpm with the standalone script instead: `curl -fsSL https://get.pnpm.io/install.sh | sh -`」と続きます。Corepackを使い続けるなら、スタンドアロン版に切り替えず、Corepack側で版を上げます。pnpmメンテナーも[公式Discussions](https://github.com/orgs/pnpm/discussions/9107)で同じ方法を案内しています。

```
# プロジェクトの版を上げる（package.jsonのpackageManagerが書き換わる）
corepack use pnpm@latest

# プロジェクト外で使う既定の版を上げる
corepack install -g pnpm@latest
```

`pnpm add -g pnpm` は、Corepackとは関係なくpnpm自身が拒否し、`pnpm self-update` を使うよう案内します（12.11.2では `ERR_PNPM_GLOBAL_PNPM_INSTALL`）。Corepack経由では案内どおりにしても上のエラーになるので、Corepack側で上げます。版を確かめるときは、`pnpm -v` の表示とpackage.jsonの `packageManager` を並べて見ます。プロジェクト内では `packageManager` の値が優先されます。

## Corepackを使わずにpnpmの版をそろえる方法

Corepackを入れる手間を省きたいなら、pnpm自身の版管理を使えます。[pnpm 10.0.0](https://github.com/pnpm/pnpm/releases/tag/v10.0.0)で `manage-package-manager-versions` が既定で有効になり、pnpmが `packageManager` を読んで、書かれた版をダウンロードして実行するようになりました。pnpm 11.0.0ではこの設定が [pmOnFail](https://pnpm.io/settings/cli#pmonfail) に置き換わり、既定値 `download` で同じ動きをします。グローバルに入っているpnpm 11.15.1を、`"packageManager": "pnpm@10.34.7"` のプロジェクトで実行した結果です（Corepackは使っていません）。

```
$ pnpm -v          # プロジェクトの外
11.15.1
$ cd p3 && pnpm -v  # packageManager: pnpm@10.34.7
10.34.7
```

| pmOnFail     | 版が食い違ったとき     | 旧設定                                 |
| ------------ | ------------- | ----------------------------------- |
| download（既定） | 宣言された版を取得して実行 | managePackageManagerVersions: true  |
| error        | コマンドを失敗させる    | packageManagerStrictVersion: true   |
| warn         | 警告して続行        | packageManagerStrict: false         |
| ignore       | 確認しない         | managePackageManagerVersions: false |

pnpm 12はネイティブの実行ファイルとして配布され、スタンドアロン版はNode.jsなしで動きます（npm経由で入れるときだけNode.js 22.13以降が必要）。[pnpmのインストール手順](https://pnpm.io/installation)は、pnpm 10のドキュメントまであった「Using Corepack」の節を11以降で削っています。pnpm 12.11.2もCorepack経由で動きますが、pnpmだけを使うチームなら `npm install -g pnpm` かスタンドアロンのスクリプトで入れて、`packageManager` の固定はpnpmに任せるほうが手順は少なく済みます。Corepackが残る理由は、YarnとpnpmのプロジェクトをCorepack1つで扱いたい場合です。[Yarnの公式手順](https://yarnpkg.com/getting-started/install)は今も `npm install -g corepack` から始まります（Yarnの版の扱いは[Yarn BerryとClassicの違い：4.18の既定設定・enableScripts・v1からの移行手順](/tech/details/9005/)で解説しています）。pnpm本体の仕組みは[pnpmとは？共有ストアの仕組みとv12のRust実装・モノレポ運用を解説](/tech/details/17573/)を参照してください。

## CI・Docker・オフライン環境でCorepackを使う設定

「Node.jsを入れればcorepackも入っている」前提のビルドは、Node.js 25以降のイメージで `corepack: command not found` になります。[Node.js 26の公式Dockerイメージ（docker-node）のDockerfile](https://github.com/nodejs/docker-node/blob/main/26/bookworm-slim/Dockerfile)にも、Corepackを入れる行はありません。Node.js 26がLTSになると、LTSへ上げただけでCIが落ちるケースが増えるため、Corepackを入れる行を明示しておきます。CI/CDパイプラインの設計から見直す場合は、[DevOps・CI/CD導入支援](/service/system/devops/)でも相談を受けています。

### DockerfileとGitHub Actionsの書き方

Corepackの版も固定しておくと、Corepackの更新でビルドの挙動が変わるのを防げます。

```
FROM node:26-bookworm-slim
RUN npm install -g corepack@0.36.0 && corepack enable pnpm
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN corepack install && pnpm install --frozen-lockfile
```

GitHub Actionsでも、`actions/setup-node` の後に `npm install -g corepack@0.36.0` と `corepack enable` を実行するステップを置きます。ただしsetup-nodeで `cache: 'pnpm'` を使うなら、setup-nodeの時点でpnpmが要ります。[setup-nodeの公式例](https://github.com/actions/setup-node/blob/main/docs/advanced-usage.md)も、`pnpm/action-setup` をsetup-nodeより前に置いています。setup-nodeの入力やキャッシュの設定は[actions/setup-nodeとは｜v7の入力・キャッシュ設定とv5以降の既定変更](/tech/details/17919/)で扱っています。CIではダウンロード前の確認プロンプトは出ません（Corepackは標準入力が端末で、CI環境でないときだけ確認します）。

### ネットワークのない環境へのpnpm持ち込み

ネットワークに出られるマシンで `corepack pack` を実行してtarballを作り、持ち込んだ先で `install -g --cache-only` で展開します。`--cache-only` はキャッシュに置くだけで既定の版は変えないので、`packageManager` に同じ版を書いたプロジェクトの中で使います。pnpm 10.34.7で作ったtarballは約4.9MBでした。

```
# ネットワークに出られるマシンで
corepack pack pnpm@10.34.7 -o pm.tgz

# 持ち込んだ先で
corepack install -g --cache-only pm.tgz
cd my-app   # packageManager: pnpm@10.34.7
COREPACK_ENABLE_NETWORK=0 pnpm -v
# 10.34.7
```

`COREPACK_ENABLE_NETWORK=0` のまま、キャッシュにない版（例：`pnpm@10.33.0`）を要求すると「Network access disabled by the environment; can’t reach https://registry.npmjs.org/pnpm/-/pnpm-10.33.0.tgz」で止まります。

### Corepackの主な環境変数7種

いずれも[CorepackのREADME](https://github.com/nodejs/corepack#environment-variables)に定義があります。

| 環境変数                               | 値と効果                     |
| ---------------------------------- | ------------------------ |
| COREPACK\_ENABLE\_DOWNLOAD\_PROMPT | 0でダウンロード時のURL表示と確認を止める   |
| COREPACK\_ENABLE\_STRICT           | 0で別のパッケージマネージャの実行を許す     |
| COREPACK\_ENABLE\_NETWORK          | 0でネットワークに出ない             |
| COREPACK\_ENABLE\_AUTO\_PIN        | 1でpackageManagerを自動で書き足す |
| COREPACK\_HOME                     | ダウンロード先を変える              |
| COREPACK\_NPM\_REGISTRY            | 取得元のレジストリを変える            |
| COREPACK\_INTEGRITY\_KEYS          | 0か空で署名検証を省く              |

## Corepackのエラーと使わない判断

### Cannot find matching keyidエラーの原因と対処

2025年1月下旬、npmレジストリの新しい署名鍵で署名されたpnpm 10.1.0などを、古いCorepackが検証できなくなりました（[nodejs/corepack #612](https://github.com/nodejs/corepack/issues/612)）。エラーは `Error: Cannot find matching keyid: {"signatures":[...` です。2025年1月27日公開のCorepack 0.31.0で直っているので、`npm install -g corepack@latest` で更新します。`COREPACK_INTEGRITY_KEYS=0` で検証を外す回避策もありますが、改ざんの検知も止まるため、更新できない環境での一時しのぎに限ります。

### This project is configured to use pnpmエラーの原因

`"packageManager": "pnpm@..."` のプロジェクトで `yarn` を実行すると、Corepackは `This project is configured to use pnpm because .../package.json has a "packageManager" field` で止めます。誤ってロックファイルを2種類作るのを防ぐ仕組みなので、基本はそのままにします。どうしても実行するなら `COREPACK_ENABLE_STRICT=0` を付けると、Yarnはプロジェクト外の既定の版（このときは4.18.1）で動きました。

### Corepackを使わないほうがよい場面

次の条件に当てはまるなら、Corepackは入れないほうが運用は単純です。逆に、YarnとpnpmをCorepack1つで扱う場合は入れる価値があります。

- pnpmしか使わないチーム：pnpm 10以降は自分で `packageManager` を守るので、Corepackを足しても同じ仕事が2重になるだけです。
- Node.jsの版もツールで管理している：miseのようにNode.jsとpnpmを1つのファイルで固定できるツールがあれば、Corepackの導入手順を別に持つ理由がありません。Voltaは2025年11月にメンテナンス終了を告知しているので、新規に選ぶなら[Volta（ヴォルタ）とは？Node.jsバージョン管理の使い方とメンテ終了・mise移行【2026年】](/tech/details/7664/)の移行手順を先に読んでください。
- Node.js 20以前に留まる環境：最新のCorepackは動作対象外の組み合わせになり、古い版に留めると署名鍵の問題のような修正を受け取れません。

## よくある質問

### corepack prepareは非推奨ですか？

0.20.0でヘルプから外れ、ソース上もdeprecatedの扱いです。0.36.0でも動きますが、`corepack install -g` か `corepack pack` に書き換えます。

### corepack prepareとcorepack useの違いは何ですか？

`prepare --activate` はプロジェクト外の既定の版を変え、`use` はpackage.jsonの `packageManager` に版を書き込みます。プロジェクトの版を固定するなら `use` です。

### Node.js 25や26でcorepackコマンドが見つからないのはなぜですか？

Node.js 25.0.0から同梱されなくなったためです。`npm install -g corepack` で入れると、`corepack` と `pnpm`・`yarn` のコマンドが使えるようになります。

### corepack enable pnpmとcorepack enableの違いは何ですか？

名前なしはpnpm・pnpx・yarn・yarnpkgの4つ、`corepack enable pnpm` はpnpmとpnpxの2つのシムを作ります。npmで入れたCorepackは導入時に4つとも置かれます。

### Corepackでpnpmを更新するにはどうしますか？

プロジェクトの版は `corepack use pnpm@latest`、プロジェクト外の既定の版は `corepack install -g pnpm@latest` で更新します。

### nvmとCorepackは併用できますか？

併用できます。Corepackとシムは版ごとのNode.jsのインストール先に置かれるので、nvmで切り替えた先の版ごとに、Node.js 24以前なら `corepack enable`、Node.js 25以降なら `npm install -g corepack` をやり直します。

## 関連記事

- [pnpmとは？共有ストアの仕組みとv12のRust実装・モノレポ運用を解説](/tech/details/17573/)
- [Yarn BerryとClassicの違い：4.18の既定設定・enableScripts・v1からの移行手順](/tech/details/9005/)
- [miseとは？mise.tomlでツール・環境変数・タスクを束ねる導入手順【2026年版】](/tech/details/17621/)
- [actions/setup-nodeとは｜v7の入力・キャッシュ設定とv5以降の既定変更](/tech/details/17919/)
- [Node.jsとは？仕組み・版の選び方・標準機能で動かす手順を実装目線で解説](/tech/details/17433/)

---

出典: [corepack prepareは非推奨？後継のinstall -g・use・enableとpnpmの版管理、Node.js 25以降の導入](<https://www.issoh.co.jp/tech/details/2765/>)（株式会社一創）
