pnpmのコアチームは、ネイティブのRustバイナリとして動作するバージョン12のアルファ版をリリースしました。これにより、現在のNodeベースのバージョンよりも1桁速いインストール時間が実現されることが期待されています。この変更は、CIジョブの完了時間が大幅に短縮されるため、非常に重要です。
書き換えが重要である理由
pnpmは、コンテンツアドレス可能なストアと厳格な node_modules レイアウトを使用することで、すでにnpmやYarnとは一線を画しています。しかし、すべてのコマンドは依然としてNode.jsプロセスを開始するため、ファイル操作が始まる前に一定の起動コストが発生します。重い処理を行うコードをRustに移行することで、チームはそのブートストラップステップを排除し、単一のJavaScriptスレッドでは不可能な、多くのファイル操作を並列で実行できるRustの能力を活用できるようになります。
数値による裏付け
pnpmチームが提供したベンチマークでは、一般的な3つのシナリオにおいて劇的な短縮が示されています。
- Warm install (再実行): 381 ms から 12 ms へ。
- No-cache install (キャッシュなし): 460 ms から 40 ms へ。
- Clean install (完全な依存関係ツリー): 6.5 s から 2.2 s へ。
Warm installにおける30倍の改善は、CIジョブの高速化と、開発者へのフィードバックループの短縮に直結します。
変わらないもの
今回の書き換えは移植(ポート)であり、再設計ではありません。既存のすべてのフラグ、ロックファイルの形式、および厳格な node_modules 構造は変更されません。プロジェクトはこれまでと全く同じように pnpm install を実行し続けることができ、目に見える唯一の違いは速度だけです。パブリックAPIは変更されないため、移行プロセスはスムーズに行えるよう設計されています。
今すぐ試す方法
移行は段階的に行われます。現在のv11ラインでは、pacquet バックエンドフラグを有効にすることで、実験的なRustバックエンドをオプションとして利用できます。v12では、パッケージの取得およびワークスペースへのリンクにおいて、Rustエンジンがデフォルトになります。アルファ版は next-12 タグで公開されています。まだ本番環境での使用は推奨されませんが、興味のある方はコマンド一つでインストールしてテストを開始できます。
リスクと注意点
APIがクリーンであっても、アルファ版のバイナリには、テストの不足やエッジケースにおけるデグレの可能性といった、通常通りの注意点があります。
広範なトレンド
pnpmの動きは、フロントエンド・ツールにおける成長傾向を反映しています。BiomeやOxcといったプロジェクトも、開発ワークフローのミリ秒単位の遅延を削るために、コアコンポーネントをコンパイル言語で書き換えています。
