概要
Node.js向けパッケージマネージャー「pnpm」の開発チームは8月9日、Rustによる全面リライト版となる「pnpm 12」のリリース候補版v12.0.0-rc.3を公開した。pnpm 12は2026年8月5日にRC0が公開されて以降、rc.1、rc.2と短い間隔で改善が重ねられており、rc.3では「シェバングを持たないバイナリやインタープリタなしで実行されるターゲット(マネージドNode.jsランタイムなど)に対し、コマンドシムがwaitではなくexecするよう修正され、SIGKILLなどのシグナルで終了したプロセスが誤った終了コード(137など)として報告される問題」が修正された。
技術的な詳細
pnpm 12はTypeScriptで書かれてきた従来のpnpmの内部実装をRustで刷新するプロジェクトで、コード名「Pacquet」として開発が進められてきた。メンテナーのzkochan氏によれば、v12における破壊的変更は最小限に抑えられており、v11と基本的に同じ挙動を維持しつつ、最大の変更点は内部実装のRustへの全面書き換えである点だとしている。実際、公式ブログ「What’s different in pnpm 12」でも、コマンド・フラグ・設定・ロックファイル形式はv11から引き継がれ、既存ドキュメントがそのまま両バージョンに適用できるとされている。
もっとも、いくつかの挙動の違いも明記されている。まず、グローバルにインストールされたNode・Deno・Bunを実行する際、常にグローバル版が使われるのではなく、プロジェクトがpin留めしたバージョンのランタイムが優先して使われるようになった。また、GitHubなどでホストされたGit依存関係の解決方法が変更され、指定子が単なる「選択肢」ではなく一意の「アイデンティティ」として扱われるようになった。さらに、pnpm install --resolution-onlyフラグは廃止され、代わりに新設されたpnpm peers checkコマンドを使う必要がある。開発チームの説明によれば、Rustエンジン(Pacquet)への切り替えにより、パッケージのフェッチとリンク処理などの内部処理がネイティブコードで実行されるようになり、体感速度の大幅な向上が見込まれている。
背景と今後の展望
pnpmは効率的なディスク容量管理とシンボリックリンクベースのnode_modules構造で知られ、npmやYarnと並ぶ主要なJavaScriptパッケージマネージャーの一つとして広く使われてきた。今回のRustリライトは、既存のCLI体験やロックファイル互換性を保ったまま、内部処理をよりパフォーマンスの高い言語基盤に置き換える試みであり、単なるメジャーバージョンアップというより実装基盤の刷新に近い。開発は8月上旬にベータ版からRC版へと移行しており、rc.3ではプロセス終了コードの報告に関する細かな不具合修正が中心となっている。互換性維持を優先する方針が明言されていることから、既存のpnpm 11ユーザーにとっては大きな移行コストなしに恩恵を受けられる可能性が高く、今後のRC版を経て正式版のリリースが待たれる。