pnpm 12.9.1でWebContainers版を@pnpm/wasmへ分離、本体は約4MBへ戻った

pnpm 12.9.1でWebContainers版を@pnpm/wasmへ分離、本体は約4MBへ戻った

pnpm 12.9.0でWebContainer向けWebAssembly版が同梱され、本体の展開サイズは約55MBに増えました。12.9.1で@pnpm/wasmへ分離され約4MBに戻ったことをtarballで実測し、@pnpm/wasmのlatestタグの注意点もまとめます。
2026.10.11

どうも!オペ部の西村祐二です!

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も含めて表示した結果です。

各バージョンのunpackedSize

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

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時点ではバージョンの指定が必要です。

誰かの参考になれば幸いです。


参考リンク:

この記事をシェアする

関連記事