npm trusted publishingはscopedでも事前登録できない

  • npm
  • CI/CD
  • OIDC

この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。

projenのtrusted publishingを導入しようとして、npmのOIDC周りをnpm公式ドキュメントとnpm/cliのissueで確認した。

何が起きたか

npmのTrusted Publishingは、GitHub ActionsからOIDCトークンでpublishできる仕組みで、NPM_TOKENを保存しなくて済む。

結論

Trusted Publisherの設定はscoped/unscoped問わずパッケージ単位。しかも設定できるのはnpm上にそのパッケージが存在してからで、Organization側での事前一括登録のような機能はない。

npm/cliのissue #8544にも、初期バージョンをOIDCだけでpublishすることはできず、最初は手動かトークンでpublishする必要がある、とはっきり書いてあった。PyPIは事前登録に対応してるらしいけど、npmはまだ対応してない。

つまりどのパッケージも初回は必ずこの順番になる。

flowchart TD
    A[npm publish<br>NPM_TOKENで初回publish] --> B[npm上にパッケージが作成される]
    B --> C[パッケージ設定画面で<br>Trusted Publisher登録]
    C --> D[GitHub Actionsの<br>ワークフローをOIDCに切替]
    D --> E[NPM_TOKENを削除]

補足

  • Trusted publishingにはnpm CLI 11.5.1以降が必要
  • Trusted PublisherはGitHub Actionsだけじゃなく、GitLab CI/CDにも対応してる

事前登録できないのはOrganizationの権限設定が甘いとかじゃなくて、npm側の仕様上の制約。この前提で移行フローを組む必要がある。

追記(2026/5/20〜)

2026/5/20以降に作成したTrusted Publisherの設定は、npm publishとnpm stage publishのどちらを許可するか明示的に選ぶ必要があるようになったらしい(それ以前に作った設定は自動的にnpm publishのみ許可の扱いになる)。この記事の内容自体には影響しない。

参考