世界を動かす技術を、日本語で。

NPMがクラシックトークンからの混乱した移行後に段階的な公開を実装予定

2026年1月8日原文(socket.dev)

概要

この機能は パッケージ名PURL で直接検索できる。 エコシステム名PURLタイプ にも対応。 npmPyPI など、複数のエコシステムをサポート。 検索体験を 効率化 する入力方法を解説。 入力のクリアや 切り替え 方法も紹介。

パッケージ名・PURLによる検索機能

  • パッケージ名 または PURL(Package URL) を入力することで、目的のパッケージへ直接ジャンプ
  • 例: pkg:npm/react@18.0.0 または省略形 npm/react@18.0.0 で npm の react バージョン18.0.0を指定
  • PURL は、パッケージの所在やバージョンを一意に特定するための標準フォーマット

エコシステム・PURLタイプによる切り替え

  • エコシステム名 (例: pypi/, npm/, maven/ など)や PURLタイプ を入力することで、検索対象のエコシステムを切り替え
  • 例: pypi/ と入力すると PyPI エコシステムでの検索モードに変更
  • 切り替え後、スペースを入力することで入力フィールドがクリアされ、新たな検索クエリの入力が可能

効率的な検索体験のための操作方法

  • パッケージ名PURL を直接貼り付けて即座に検索・ジャンプが可能
  • エコシステムを指定してから検索することで、他のエコシステムと区別した精度の高い検索が実現
  • スペース入力で検索モードのリセット、再検索がスムーズに行える操作性

対応エコシステム例

  • npm (JavaScript/Node.jsパッケージ管理)
  • PyPI (Pythonパッケージ管理)
  • Maven (Javaパッケージ管理)
  • その他主要なパッケージエコシステム

まとめ

  • パッケージ名PURL を活用した迅速なパッケージ検索
  • エコシステム名 入力による検索対象の柔軟な切り替え
  • スペース入力 での入力クリア機能による操作性向上

Hackerたちの意見

現在の形では、信頼できる公開は限られたユースケースにしか適用されません。サポートは少数のCIプロバイダーに限定されていて、新しいパッケージの初回公開には使えず、公開時に必須の2FAなどの強制メカニズムもまだ提供されていません。これらの制約から、メンテナグループは信頼できる公開を普遍的なアップグレードとして扱うことに対して慎重になっています。特に影響の大きいパッケージや重要なパッケージについてはそうです。これは厳密には正確ではありません。PyPIのために信頼できる公開を設計したとき、OIDC IdP(通常はCIプロバイダー)全体に対して汎用的に設計しましたし、新しいプロジェクトを信頼できる公開を通じて作成するための配慮も明示的に含めました(これを「保留中」のパブリッシャーと呼びました)。後の信頼できる公開技術の採用者全員がこれを採用したわけではないのは、残念で理解できることだと思います(パッケージの存在に関するデータモデルや仮定が複雑になるため)。ここでの多くの問題は、GitHub側が自ら引き起こしていると思います。通常のAPI認証情報を完全に削除する決定は非常に攻撃的に感じますし、信頼できる公開の実装とは全く関係ありません。この二つを同じキャンペーンで結びつけることで、ユーザーや統合者にとって不必要に混乱を招いているようです。

npmエコシステムには詳しくないので、もしかしたら誤解しているかもしれませんが、ローカル公開(トークン経由)のサポートを削除して、信頼できる公開を使ったCI公開を優先したように聞こえます。それが正しいなら、信頼できる公開がRustに提案されたとき、ローカル公開を置き換えるものではなく、CI公開を強化するためのものだと議論されていたと思います。

「現状の形」はNPMの文脈で言うと正確だと思う。PyPiがもっと合理的な道を選んでるのを見るのはいいね。

実際には、大手だけが「信頼できる出版者」になれるって感じだね。> 「PyPIの限られたリソースを最大限に活用するために、私たちはPyPIユーザーの間で合理的な使用レベルを持つプラットフォームのみをサポートする予定です。また、サポートされるアイデンティティプロバイダーの運用において全体的な信頼性とセキュリティに高い基準を持っています。実際には、自家製や個人用のIdPは対象外となります。」みんなが「信頼される」ためにMicrosoft (TM) GitHub (R)を使ってアーティファクトを洗浄しなきゃいけなくなるのは、いつになるんだろうね?

ここでの多くの痛みは、GitHub側が自分で引き起こしていると思うよ。「Microsoft」って書いてあるのに、長期的に何が起こると思ってたの?その買収があったときのことを思い出すけど、周りでパーティーが開かれてたよね。MSがついにオープンソースを「理解した」って。あと、GitHubのコンテンツをAIに食わせることは気にしないの?

私は非常に多く使われているnpmパッケージをメンテナンスしていて、この状況には本当に神経を使っています。最近のリリースでは、数十のパッケージの中で、手動でpackage-lockやpackage.jsonの変更を読み、すべての依存関係の変更を確認していました。幸い、私たちのコアライブラリには外部依存関係がありませんが、ツールにはたくさんあります。信頼できるパブリッシャーに移行するか、数人のチームメンバーに2FAでローカルに公開させるか、厳しい選択を迫られました。私たちは、何年もレビュー手順を伴う自動化プロセスを持っていたので、信頼できるパブリッシャーを選びましたが、ハッキングの可能性がまだあることは理解しています。だから、今はどのPRにも非常に慎重になっています。信頼できるパブリッシャーを有効にするのは、たくさんのパッケージがあって本当に大変でした。私たちが望んでいるのは、信頼できるパブリッシャーを使いながら、CIベースの公開設定を続けられることです。ただし、その際には人間による2FAのステップが必要です。でも、それは完全な解決策の一部に過ぎません。HITL(人間が介在するプロセス)は、悪意のあるコードの拡散を遅らせることしか保証されていません。実際には、妥協された依存関係からプロジェクトを守ることはできず、広めるのを防ぐこともできません。これらすべては、依然として人間の手に委ねられています。私たちは、依存関係をより良くロックダウンし、分析するためのツールや、公開前にパッケージを分析するためのツールが必要です。また、CIを実行する前にサードパーティのPRを分析し、サンドボックス化するためのより良いツールも欲しいです。今はHITLがあるけど、テストを実行する前に各PRを手動で調査しなければなりません。

ちょっと明確にしておくと、「信頼できる公開」とは逆のベンダーロックインの一種を意味しますか?それに使えるのは一部のCIシステムだけです。

はい。自分で設定することはできません。

「信頼できる公開」は、OIDCのための専門用語に過ぎません。NPMは、GitHub Actions以外のCI/CDプラットフォームとの連携をサポートすべきです。そうすることで、不正の印象を避けられます。(彼らがまずGHAをターゲットにするのは、ユーザーの大多数がそこにいるからだと思いますが。この技術自体は基本的にプラットフォームに依存せず、相互運用可能です。)

npmが単にCLIを同時に更新していれば、こんなに混乱はなかったでしょう。今でも2FAを使って公開することができないのは、彼らのCLIがそれに対応できないからです。

TOTP 2FAを使ったCLI公開は、壊れるまではうまくいってたんだけどね。

公開に2FAを要求したり、信頼できる公開を使うことで、この問題の大多数を防げるはずです。唯一の難しい点は、信頼できる公開を使用しているときに、自分のプルリクエストを承認できないようにすることです。それは2FAを要求することに戻るべきです。

Hacker Newsで議論の続きを見る