pnpmがTMPDIRソケット・バジェットの修正を受け入れ
pnpmに関する最近のフィールドテストの結果、アップストリームでの採用が決まりました。これは、境界(boundary)に焦点を当てた修正にとって大きな勝利です。
問題はパスの長さに関するものでした。
pnpmがパッケージをインストールする際、TMPDIRパスを設定します。一部のパッケージはセットアップ中にライフサイクルツールを実行します。これらのツールは多くの場合、IPCソケットを作成します。pnpmのTMPDIRパスが長すぎると、ソケットの総パス長がUnixの制限を超えてしまいます。これにより、Nodeがエラーを報告する原因となります。
このエラーはNodeやツールの失敗のように見えますが、真の原因はパス・バジェット(path budget)の問題です。
pnpmはUnixソケットの制限を管理しているわけではありません。 pnpmはライフサイクルツールを管理しているわけではありません。 pnpmは、自身が提供する一時ディレクトリのパスを管理しています。
この修正は、pnpmが制御可能な範囲のみに焦点を当てています。
修正内容は、パスのうちpnpmが所有する部分を短縮することです。Nodeネイティブの fs.mkdtemp() を使い、コンパクトなプレフィックスを使用します。これにより、一時ディレクトリをpnpmストア内に保持しつつ、使用するスペースを削減します。
このアプローチは、3つのルールに従っています:
- pnpmの一時ルートを維持する。
- pnpmのベースネームを短縮する。
- 下流のツールのために、より多くのパス・バジェットを残す。
これは、限定的かつ効果的な修正です。考えられるすべてのソケットエラーを修正しようとするものではありません。pnpmの権限実行方法を変更するものでもありません。単に、pnpmがパス・バジェットを浪費するのを防ぐものです。
pnpmのメンテナーは、2026年6月16日にこれを承認し、マージしました。
この成功は、Scarab/SDSメソッドが有効であることを証明しています。私たちは、自身が管理する領域(owned surface)を特定します。最も顕著な症状(loudest symptom)を回避します。パッチを小さく保ちます。そして、プロジェクトの境界を維持します。
このテストのField Labステータスは現在、upstream-accepted です。
Optional learning community: https://t.me/GyaanSetuAi