0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

npm Trusted Publishing 移行で「Token expired」と言われたら、まずは Node のバージョンを疑え

0
Posted at

先日 npm を Trusted Publishing 形式で publish しようとしたらハマってしまいました…。

Trusted Publishing CI/CD プロセスからトークン管理をなくす素晴らしい機能です。

publish 方法の変更で CI/CD がうまくいかない!って方のための記事となっております。
ぜひお役立てください!

yaml の書き換えループ

導入直後に「Token expired」のエラーを確認したとき、トークンや権限設定が原因だと考えました。

その思い込みから公式ドキュメントの Note に書かれた実行環境要件の記述を見落としてました…。

もちろん、Trusted Publishing は npm CLI がエラーの場合もあるのでその点はご留意ください。

GitHub Actions からトークンレスで publish するため、ドキュメント通りに以下の設定を行いました。

permissions:
  id-token: write
  contents: read

しかし、実行結果は 401 Unauthorized: Token expired。さらに 404 Not Found も併発しました。

npm notice Access token expired or revoked. Please try logging in again.
npm error code E404
npm error 404 Not Found - PUT https://registry.npmjs.org/@your-scope/pkg - Not found

lint などの動作は問題なかったため、permissions のインデントやリポジトリ名の完全一致を何度も確認する「YAML の書き換えループ」に陥りました。

ただ、答えはドキュメントの 1 行に示されていました…。
数時間の試行錯誤の末、ドキュメントを隅々まで読み直して見つけたのが以下の「Note」でした。

Note: To use Trusted Publishing with the npm CLI, you must be using npm CLI version 11.5.1 or later and Node version 22.14.0 or higher.
https://docs.npmjs.com/trusted-publishers

Trusted Publishing が依存する認証フローには、22 系の中でも比較的新しいパッチバージョンが必要だったのです。

解決:GitHub Actions の修正

actions/setup-node で、要件を満たすバージョンを明示的に指定しました。

steps:
  - uses: actions/checkout@v4
  - uses: actions/setup-node@v4
    with:
      node-version: '22.14.0' # 22系ならOKではなく、22.14.0以上が必要

これでパブリッシュに成功しました。

教訓:最新機能ではメジャーバージョンではなく「詳細な制約」を疑う

今回のハマりどころから得た技術的な判断基準は以下の通りです。

  • 認証エラーの「Token expired」を鵜呑みにしない: 最新の認証基盤では、実行環境(Node/npm)が未対応だと、内部的にトークンの生成や交換に失敗し、結果として見当違いなメッセージを吐くことがある
  • 「最新メジャーバージョン」という過信を捨てる: 認証フローに関わる機能追加は、Node.js のマイナー/パッチリリースで行われることがある
  • 「22 系だから大丈夫」ではなく「22.14.0 以上か?」まで疑う必要がある
  • 「設定は合っているはずなのに動かない」ときは、一度 YAML から離れ、公式ドキュメントに書かれた最小構成要件(特に小数点以下のバージョン)を再確認する

まとめ

npm Trusted Publishing を導入する際は、YAML の設定を疑う前に、実行環境(Node.js / npm CLI)のバージョンが「パッチレベルまで」要件を満たしているかを確認してください。

「22系だから大丈夫」ではない: 公式ドキュメントの Note にある 22.14.0 といった詳細な数値を必ずチェックしてください。

エラーメッセージを信じすぎない: 環境が古いと「Token expired」や「404 Not Found」といった、実態と異なるメッセージで時間を溶かすことになります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?