
pnpm 12.9.1でWebContainers版を@pnpm/wasmへ分離、本体は約4MBへ戻った
どうも!オペ部の西村祐二です!
pnpm 12.9.0で、ブラウザ内でNode.jsを動かすStackBlitz WebContainers向けのWebAssembly版が本体に同梱され、pnpmパッケージの展開サイズが一時的に大きくなりました。続くpnpm 12.9.1で、このWebAssembly版が別パッケージ@pnpm/wasmへ分離され、本体サイズが元に戻りました。
実際にどれくらいサイズが変わったのか、各バージョンのパッケージ(tarball)を取得して展開し、測りました。あわせて、分離先の@pnpm/wasmのタグも確認しました。
今回の変更点
- 対象バージョン / 日付: pnpm 12.9.0(2026-10-03)、pnpm 12.9.1(2026-10-04)※日本時間
- 変更の要点:
- 12.9.0で、StackBlitz WebContainersでは自動的にWebAssembly版を使うようになりました。WebAssembly版はインストールスクリプトが無効でも動作します。一方、スクリプトが有効なネイティブ環境では、従来どおりネイティブ実行ファイルを使います。
- 12.9.1で、WebContainers向けのWebAssemblyビルドを別パッケージ
@pnpm/wasmへ切り出しました。pnpmと、単体実行ファイル版の@pnpm/exeはこれを含まなくなり、公式ノートによると展開サイズは約55MBから約4MBへ戻りました。WebContainers内では@pnpm/wasmをnpmで入れて使います(公式では experimental 扱いで、Node.js 22.13以上が必要です。タグの扱いは後述します)。
- 公式リンク: pnpm 12.9.0 リリースノート、pnpm 12.9.1 リリースノート、WebContainers公式ページ
注目したいポイント
- 特に見ておきたいこと: 12.9.0を取得していると、WebContainerを使っていなくてもWebAssembly版を含む大きなパッケージをダウンロードすることになります。Dockerイメージに入るpnpmは約4MBから約55MBに、レジストリから取得するtarballは約1MBから約18MBになります。
- 自分の環境で確認したいこと: 固定しているpnpmのバージョンが12.9.0になっていないか、12.9.1以降へ上げられるか。
- まだ判断できないこと: WebContainer上で
@pnpm/wasmから実際にpnpmを動かしたときの挙動は今回検証していません。
試してみる
環境
- 検証用のDockerコンテナ(Ubuntu 24.04 arm64)
- Node.js v24.21.0、npm 11.19.0
- 対象:
pnpm/@pnpm/exeの12.8.2・12.9.0・12.9.1、@pnpm/wasmの12.9.1・0.0.0
1. 本体パッケージのサイズを比較する
レジストリに登録された展開サイズ(unpackedSize)はnpm viewで取得できます。
npm view pnpm@12.9.0 dist.unpackedSize
npm view pnpm@12.9.1 dist.unpackedSize
12.9.0の1つ前の版である12.8.2と、分離先の@pnpm/wasm@12.9.1も含めて表示した結果です。

メタデータだけでなく、npm pack <pkg>@<version>で実際のtarballを取得し、展開したファイルの合計サイズも測りました。次の画像は、計測スクリプトが出力した表を表示したものです。

extractedは展開後のファイル合計サイズ、tarballはダウンロードするtarballのサイズで、どちらも単位はバイトです。filesはファイル数です。整理すると次のとおりです。
| パッケージ / バージョン | 展開サイズ(バイト) | 換算 | tarball |
|---|---|---|---|
| pnpm@12.8.2 | 4,102,446 | 約4.1MB | 約1.0MB |
| pnpm@12.9.0 | 54,965,084 | 約55.0MB | 約17.9MB |
| pnpm@12.9.1 | 4,107,858 | 約4.1MB | 約1.0MB |
| @pnpm/exe@12.8.2 | 3,725,223 | 約3.7MB | 約0.9MB |
| @pnpm/exe@12.9.0 | 54,573,504 | 約54.6MB | 約17.7MB |
| @pnpm/exe@12.9.1 | 3,713,798 | 約3.7MB | 約0.9MB |
12.9.0では、pnpmと@pnpm/exeがどちらも約55MB(約1,040ファイル)へ膨らみました。12.9.1では12.8.2と同じ約4MB(約450ファイル)へ戻っています。tarballのサイズも、12.9.0で約1MBから約18MBに増え、12.9.1で約1MBに戻っていました。
2. 増えた分の中身と、分離先の @pnpm/wasm を確認する
pnpm@12.9.0とpnpm@12.9.1のファイルを比べると、12.9.0にだけあるのはdist/wasm/配下の593ファイル、合計50,860,874バイトでした。最大のファイルはdist/wasm/pnpm.wasm(47,527,756バイト)です。
切り出し先の@pnpm/wasm@12.9.1は展開サイズ45,222,425バイト(約45.2MB)、595ファイルで、大半を占めるのはdist/pnpm.wasm(41,893,876バイト)でした。pnpm・pnpx・pn・pnxの4コマンドを提供しています。このpnpm.wasmは、12.9.0に同梱されていたもの(47,527,756バイト)より約12%小さくなっていました。なお、12.9.1のリリースノートにある「約10%小さくなった」はネイティブ実行ファイルについての記述で、WebAssembly版への言及はありません。
次に、@pnpm/wasmのタグを確認しました(2026-10-11時点)。
npm view @pnpm/wasm dist-tags
latestは0.0.0、next-12は12.12.0(pnpm本体のlatestである12.11.2より新しい版)を指していました。
バージョンを指定せずにインストールし、入ったバージョンと中身を確かめます。
npm install @pnpm/wasm --ignore-scripts --silent
node -e 'const p=require("./node_modules/@pnpm/wasm/package.json");console.log("installed @pnpm/wasm", p.version)'
ls -la node_modules/@pnpm/wasm
installed @pnpm/wasm 0.0.0
total 4
drwxr-xr-x 4 pwuser pwuser 128 Oct 11 04:54 .
drwxr-xr-x 3 pwuser pwuser 96 Oct 11 04:54 ..
-rw-r--r-- 1 pwuser pwuser 0 Oct 11 04:54 index.js
-rw-r--r-- 1 pwuser pwuser 372 Oct 11 04:54 package.json
インストールされたのは0.0.0で、中身は空のindex.jsとpackage.jsonだけでした。
検証結果の考察
- 確認できたこと: 12.9.0で増えていたのは
dist/wasm/配下のWebAssemblyビルドで、12.9.1ではこれが@pnpm/wasm(約45.2MB)に移っていました。 - 公式情報と照合したこと: 12.9.1リリースノートの「約55MBから約4MBへ戻した」という記述、レジストリの
unpackedSize、tarballを展開した実測値の3つが一致しました。 - 確認した範囲: サイズを測ったのは12.8.2・12.9.0・12.9.1で、あわせて最新の12.11.2(4,155,529バイト)も約4MBであることを確かめました。
実務でどう扱うか
- すぐ対応したほうがよい場合: CIやDockerでpnpmのバージョンを12.9.0に固定している場合。取得サイズが大きいままなので、12.9.1以降への更新を検討してください。
- 様子見でよい場合: pnpmの最新版へ追従していて、すでに12.9.1以降になっている場合。本体サイズは元に戻っているため、追加対応は不要です。
- チームで決めておきたいこと: WebContainers(StackBlitz)上でpnpmを使う構成がある場合は、
@pnpm/wasmのバージョンを明示して揃えておくと、プレースホルダーの0.0.0を引かずに済みます。
まとめ
pnpm 12.9.0で本体に同梱されたWebAssembly版は、12.9.1で@pnpm/wasmへ分離されました。これによりpnpmと@pnpm/exeの展開サイズは約55MBから約4MBへ戻っています。WebContainersを使わない環境にとって、12.9.0は不要なWebAssembly版まで取得する版なので、バージョン固定を見直すときは12.9.0を避けてください。また、WebContainersで@pnpm/wasmを入れる場合は、2026-10-11時点ではバージョンの指定が必要です。
誰かの参考になれば幸いです。
参考リンク:








