概要
GitHubは2026年5月22日、npmのセキュリティを強化する2つの主要機能を発表した。一つはステージド公開(Staged Publishing)の一般提供開始、もう一つはnpm 11.15.0で追加された非レジストリソースからのインストール制御フラグ群だ。いずれも、TeamPCPのようなサイバー犯罪グループによるオープンソースパッケージへの大規模なサプライチェーン汚染キャンペーンが増加する中、供給チェーン全体の防御を強化することを目的としている。
ステージド公開:2FA承認を挟むリリースフロー
ステージド公開は、従来の「npm publish で即時公開」というモデルを改め、リリース前に人的承認ステップを挟む仕組みだ。開発者がCI/CDパイプラインから npm stage publish を実行すると、ビルド済みtarballがステージキューにアップロードされ、2FA(二要素認証)を有効にしたメンテナが明示的に承認するまで、利用者はそのバージョンをインストールできない。承認はnpmjs.comのウェブUIとnpm CLI両方から操作可能となっており、CI/CDは非対話的に実行し、メンテナが後から確認・承認するという運用モデルが想定されている。
この機能を利用するにはnpm CLI 11.15.0以上が必要で、対象パッケージはnpmレジストリに既存のものに限られる(新規パッケージは初回公開にステージド公開を使用不可)。また、OIDCトラステッドパブリッシングと組み合わせてパーミッションを stage-only に制限すれば、CIから直接公開することを完全に禁止できる。これにより、CIが侵害された場合でも悪意のあるバージョンが即座に配布されるリスクを大幅に低減できる。
インストールソース制御フラグ
npm 11.10.0で導入された --allow-git フラグ(Gitソースからのインストール制御)を拡張する形で、npm 11.15.0では以下の3つの新フラグが追加された。
--allow-file: ローカルファイルパスおよびローカルtarballからのインストールを制御する--allow-remote: httpsなどのリモートURLからのインストールを制御する--allow-directory: ローカルディレクトリからのインストールを制御する
各フラグは all(現在のデフォルト)または none の値を受け入れ、CLIオプション・.npmrc・package.json のいずれでも設定できる。なお、--allow-git はnpm v12(次期メジャーバージョン)でデフォルトが all から none に変更される予定であり、今後はレジストリ外ソースへの依存がより明示的な許可を必要とする方向に進む見通しだ。
セキュリティ上の意義
これらの機能は、レジストリ外ソースからの依存関係導入や、CI/CDを経由した意図しないパッケージ公開を防ぐ明示的な許可リスト方式を提供する。サプライチェーン攻撃の手口が高度化・大規模化する現状において、パッケージのライフサイクル全体にわたってメンテナの意図的な関与を求める設計は、エコシステム全体の信頼性向上に寄与するものと評価されている。