概要

JavaScript向けパッケージマネージャーpnpmの開発チームは10月13日、新バージョン「12.13.0」をリリースした。今回の更新では、レジストリ操作を担う新コマンドの追加に加え、Python依存関係の解決処理やネットワークファイルシステム上でのインストールにまつわる性能改善が盛り込まれている。既存設定との後方互換性は保たれており、破壊的変更は報告されていない。

新コマンドと設定オプション

新たに追加されたpnpm profileコマンドは、npmレジストリなどのユーザープロフィール設定を閲覧・更新できる。またpnpm tokenコマンドでは、レジストリの認証トークンの一覧表示、新規作成、失効がCLIから直接行えるようになった。

設定面では、ストアのインデックス管理方式としてstoreIndexFormat: filesが追加された。従来のSQLiteベースのindex.dbでは、ネットワークファイルシステム上で複数マシンが同時にインストールを実行するとロックが機能せずindex.dbが破損するおそれがあったが、パッケージごとに1ファイルでインデックスを管理する方式に切り替えることでこの問題を回避できる。あわせて、パッケージマップ設定をグループ化するnodePackageMapも導入され、mode: write-onlyやmode: load、typeパラメータによる細かい制御が可能になった。

性能改善とバグ修正

今回の更新で最も目立つのが、Python依存関係解決の高速化だ。10件の依存関係を持つプロジェクトで--lockfile-onlyを実行した場合、処理時間が約40秒から約4秒へと大幅に短縮された。レジストリメタデータの不要な読み込みを削減し、PEP 658に対応したホイールのみを選択的にダウンロードする仕組みが高速化の背景にある。なお別の改善として、enableModulesDir: falseでのインストール時にはパッケージ検証が並列化された。ネットワークファイルシステム上で5,100パッケージをインストールする検証では、依存関係の解決とフェッチの間に生じていた19秒の停止時間も削減されたという。

バグ修正では、macOSのvirtiofsやSMB共有環境でのファイルシステム関連の不具合、pnpmfile読み込み時にプロセスがハングする問題、MinGW環境でのRustツールチェーン選択の誤り、link:依存関係削除時のシンボリックリンク処理、スコープ付きレジストリ使用時のロックファイル記録の不整合など、多岐にわたる修正が加えられている。大規模モノレポやクロスプラットフォーム開発での運用上の細かな摩擦を解消する内容が中心で、日常的な開発体験の安定性向上に寄与する更新と言える。