1 ポイント 投稿者 GN⁺ 2026-06-11 | 1件のコメント | WhatsAppで共有
  • npm install のデフォルト動作が セキュリティ重視 に変わり、これまで自動実行されていた機能は今後 ユーザーが明示的に許可した場合のみ(opt-in) 動作するようになる
  • allowScripts のデフォルト値は off — インストールする外部パッケージに含まれる preinstallinstallpostinstall スクリプトはデフォルトでブロックされ、プロジェクトで許可したパッケージだけが実行される
    • パッケージをインストールするだけで自動実行されていたスクリプトを止め、悪意あるコードが入り込む余地を減らすための変更
    • node-gyp のネイティブビルドもブロック対象となるため、binding.gyp だけがあり別途 install スクリプトを持たないパッケージでもビルドが止まる(npm が内部的に node-gyp rebuild を実行するため)
    • git・file・link で取得するパッケージの prepare スクリプトも同様にブロックされる
    • 使い方: npm approve-scripts --allow-scripts-pending でどのパッケージがスクリプトを持っているか確認 → npm approve-scripts で信頼するものだけを許可し、残りは npm deny-scripts でブロック → 許可リストは package.json に保存されるためコミットする
  • --allow-git のデフォルト値は none — Git リポジトリから直接取得するパッケージ(そのパッケージがさらに引き込むものも含む)はデフォルトでブロックされ、--allow-git で許可しないとインストールできない
    • Git パッケージ内の .npmrc によって Git 実行ファイル自体を差し替えられていた経路を塞ぐもの(--ignore-scripts を使っても突破されていた問題)(npm 11.10.0+)
  • --allow-remote のデフォルト値は none — https tarball のようなリモート URL から取得するパッケージ(推移的依存を含む)はデフォルトでブロックされ、--allow-remote で許可しないとインストールできない (npm 11.15.0+)
    • ただし、--allow-file--allow-directory については今回の v12 でデフォルト値は変更されない
  • 上記の変更はすべて npm 11.16.0 以降でまず警告として提供 され、正式リリース前に事前点検と対応が可能
  • v12 のリリース予定時期は 2026年7月

1件のコメント

 
GN⁺ 2026-06-11
Hacker Newsのコメント
  • npmがGitHubに買収されたことをどうして見落としていたのかわからないが、急にいろいろ腑に落ち始めた
    Nodeエコシステムのこれほど重要な一部が収まる場所として、これよりひどい家はなかなか思い浮かばない

  • postinstall スクリプトはずっと前に廃止されているべきだったし、NPMパッケージのがんのような存在だ
    何かを取得すると、深くネストされた制御不能な postinstall が無作為に実行されることがあまりに多い
    いったい誰がどの時点でこれを良いアイデアだと思ったのかわからない

    • post-install スクリプトへの懸念の核心があまり理解できない
      たいていの場合、パッケージ化された依存コードはどうせどこかの時点で実行するし、普通はインストール工程と同じ権限で実行する
      なら、こうした設定スクリプトは良くも悪くも、エントリーポイントを npm から importrequire が起きる場所へ移すだけだ
      エコシステム全体がDenoのようなサンドボックス環境へ移行しない限り、せいぜい小さなつまずきにしか見えない。それが計画なのかもしれないが
    • 絶対にそうすべきではないし、正当なユースケースはたくさんある
      すぐ思いつく例として https://www.npmjs.com/package/patch-package がある
      今のヒステリーがこういう無意味な決定につながらないことを願う
  • この件は10年前に公になって以来、NPM内部で何百回も議論されてきたはずだ
    Shai Halud のせいで、もう無視するには大きくなりすぎた

    • JavaScriptの歴史は実質的に開発者的な考え方を凝縮したものみたいで好きだ
      「そのうち直します」は、ほぼ常に「くそっ、もう直さなきゃ」になる
    • いいね、次はPythonの番
  • 現在のLTS版Node、記憶が正しければ22、24、26について、このセキュリティ修正の恩恵を受けられるようバンドルされた npm を v12 に上げる予定なのか気になる
    今はどれも npm v11 を含んでいる

    • 過去にもNodeの中間リリースでnpmのメジャーバージョンアップが行われたことがある
      v18.19.0[1] と v20.10.0[2] で npm 9 から 10 へ上げた
      [1]: https://nodejs.org/en/blog/release/v18.19.0#npm-updated-to-v...
      [2]: https://nodejs.org/en/blog/release/v20.10.0
    • 既定値の変更なのでセキュリティ態勢の変化とは言えるが、セキュリティ修正そのものはすでに誰でも適用できる
      記事にある通り、適切な既定値を設定すれば終わりだ
      この変更のいちばん良い点は、既定値が変わることで、新しい開発者がただ install を実行しただけでこうした設定が有効だと勝手に期待する厄介なパッケージが即座に壊れるのを目にすることだ
      たとえば、スクリプトが実行可能であることを前提にする慣行をやめさせられるかもしれない
  • 記事だけでは明確ではないが、スクリプトの許可リストはグローバル設定ではなくパッケージごとの許可をサポートしているようだ
    特定パッケージにだけスクリプトを許可する組織単位のルールを維持しやすくなりそうだ
    こういう形でパッケージマネージャー設定の危険な既定値を防ぐのに使えるリンターがあるのか気になる

    • grep で十分では?
  • まだYarnを使う理由があるのか気になる
    Yarnもサプライチェーン攻撃を防ぐ保護機構を実装しているのだろうか
    これまでは pnpm しか知らなかったが、npm も追随したのは良いことだ

    • もちろんある
      最新のYarnリリースである 4.x は過剰なくらい決定的な動作を保証していて、チーム全体で一貫した動作を期待できる
      機能面では小さなディテールが多く、慣れてくると積み重なって大きな違いになる
      次のメジャーリリースでも、より良い性能と、その性能向上に依存してこれまで実装できなかった機能で同じ方向をさらに押し進める予定だ
      参考までに、私はYarnのリードメンテナーだ
    • 初期から v3 まで Yarn を使っていたプロジェクトで働いていたが、とても遅いが動く
      サプライチェーン保護機能もある
      結局我慢できず pnpm に移行し、CI とローカル開発マシンの両方でインストールがずっと速くなった
      LLM の助けを借りて、移行には1日ほどかかった
    • 差別化要因の1つは選択可能なインストール戦略で、パッケージを node_modules に展開せず圧縮アーカイブから直接実行する方式だ
      https://yarnpkg.com/features/pnp
      Javaで .class ファイルのディレクトリツリーではなく .jar を使うのとかなり似ている
      ただし少しハッキーで、エディタやツールの対応はまちまちだ
      小さなファイルの数が大幅に減るので、やむを得ず Windows で作業しなければならないなら特に速いかもしれない
      アーカイブを git リポジトリに入れることもできるので、インターネットやパッケージレジストリへの依存をなくせる
    • NPM が何をしているのかは知らないが、Yarn は NPM より依存関係のインストールがずっと速い
    • 私のコメントに反対票を入れている人たちは、質問に答えてくれてもいい
      本当に答えを知らない
  • npm が GitHub の所有だとは知らなかった
    それでいろいろ説明がつく

    • NPM Is Joining GitHub - https://news.ycombinator.com/item?id=22594549 (2020年3月16日、コメント571件、1829ポイント) - https://github.blog/news-insights/company-news/npm-is-joinin...
      時間が経ってから読むと興味深いものもある
      最上位コメントは「Microsoft が何でもうまくやるわけではないが、GitHub 買収は正直予想よりずっとうまく進んだ。GitHub に Microsoft 中心の方針を押し付けるのではなく、Microsoft のほうが製品面で GitHub のやり方を多く取り入れた。GitHub は今でも別会社のように運営されている」という内容だった
    • NPMという会社は2020年にはほぼ倒産寸前だった
      ベンチャー投資は受けていたが、持続可能な事業モデルを見つけられなかった
      GitHub がエコシステムを救うために買収し、この買収が GitHub に大きな利益をもたらしたわけでもほとんどない
    • たいていの人はこれを知っているが、本当に多くを説明してくれる理由はGitHub が Microsoft の所有だという点だ
      そして Microsoft は GitHub を Azure に移した
    • GitHub の所有だとは知っていたが、npm ブログではなくGitHub ブログのリリースノートを直接見たのは今回が初めてだ
  • package.json の許可リストはパッケージのバージョンまで固定するのか、それともパッケージ名だけを固定するのか気になる

  • allowScripts の既定値が無効なのは良いことだ
    [時計を見る] 18か月遅れで pnpm を追いかけている感じか?

    • Java の Maven にはそんなものはなかったし、必要だと感じたこともない
      JavaScript 側ではこれは何のためなんだ?