概要

GitHubは2026年7月、npmの新バージョンv12.0.0を正式リリースした。最大の変更点は「allowScripts defaults to off」という方針転換で、これまでnpm install実行時に自動で走っていた依存パッケージのpreinstall・install・postinstallといったライフサイクルスクリプトが、デフォルトで無効化される。相次ぐサプライチェーン攻撃を受けた大きな方針転換であり、世界中の膨大な数のnpmユーザーに影響する変更となる。

技術的な詳細

npm 12では、主に3つの制御がデフォルトで厳格化された。

  1. ライフサイクルスクリプトの無効化:依存関係のスクリプトや、暗黙的に実行されていたnode-gypによるネイティブビルドが、明示的な許可なしには実行されなくなる。
  2. Git依存関係の制限--allow-gitのデフォルトが「none」となり、直接・間接を問わずGit経由の依存関係が明示的な許可なしには解決されなくなる。
  3. リモートURL依存の制限--allow-remoteのデフォルトも「none」となり、HTTPS経由のtarballなど、リモートURLからの依存関係取得が制限される。

正当なビルドスクリプトを必要とするパッケージを使い続けたい開発者は、npm approve-scripts --allow-scripts-pendingを実行して信頼するスクリプトを個別に承認し、その結果をpackage.json内のホワイトリストとしてコミットする運用が必要になる。

セキュリティ関連の追加変更

今回のリリースでは、npmのGranular Access Tokens(GAT)にも重要な変更が加わった。2要素認証(2FA)をバイパスするよう設定されたGATは、アカウントや組織に関わる機微な操作を実行できなくなる。対象にはトークンの作成・削除、リカバリーコードの生成、パスワードやメールアドレスの変更、2FA設定の変更、パッケージアクセス管理、公開組織・チームの管理などが含まれる。この制限は2026年8月初旬から段階的に発効する予定だ。

今後の展望

npmは2027年1月をもって、Granular Access Tokens(GAT)による直接公開機能を廃止する計画も示している。GATの公開範囲はプライベートパッケージの読み取りと公開のステージングに限定され、実際の公開には人間による2FA承認が必要になる。今後は自動公開についてOIDCベースのtrusted publishing、あるいは人間によるレビュー・承認ステップを経た公開フローへの移行が推奨される。同時期には、pnpm 11.10でも認証情報とその接続先ホストを単一の構造化された値として関連付ける_auth設定が導入されており、リポジトリに紛れ込んだマルウェアによる認証トークンの横取りリスクを軽減する動きが業界全体で広がりつつある。