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


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

導入直後に「Token expired」のエラーを確認したとき、トークンや権限設定が原因だと考えました。
その思い込みから公式ドキュメントの Note に書かれた、実行環境要件の記述を見落としていたことで数時間を無駄にした体験を共有します。

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

YAML の書き換えループに陥る

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」といった、実態と異なるメッセージで時間を溶かすことになります。

「つまづき」をチームの共有知に

Gaji-Labo では、こうした現場での「つまづき」を個人の問題にせず、チームの共有知にすることを大切にしています。今回の問題も、Slack での何気ないコミュニケーションから「もしかしてバージョンでは?」という気づきが生まれ、迅速な解決につながりました。

「つまづき」をただの失敗ではなく、チームを加速させるための貴重な「情報」と捉えて共有することで、より早く確実な成果に繋げることができます。

このような情報交換が活発な環境で開発に向き合いたい方は、ぜひカジュアル面談でお話ししましょう!

Gaji-Labo は フロントエンドのAI開発の実績と知見があります

急速に進化するAI技術、進まないUIとの統合…。 ユーザー体験を損なわずにAIを導入したいと考えながら、実装や設計に悩み、開発が停滞している。 そんな課題を抱えるプロダクトや開発チームを、私たちは数多く支援してきました。

フロントエンド開発の専門企業である Gaji-Labo は、AIチャットや自然言語処理UIなどの設計・実装において、AIの特性を踏まえた体験設計・UI開発・運用まで、フェーズに応じたサポートが可能です。

フロントエンドでのAI導入を相談する!

Gaji-Labo フロントエンドエンジニア向けご案内資料

Gaji-Labo は新規事業やサービス開発に取り組む、事業会社・スタートアップへの支援を行っています。

弊社では、Next.js を用いた Web アプリケーションのフロントエンド開発をリードするフロントエンドエンジニアを募集しています!さまざまなプロダクトやチームに関わりながら、一緒に成長を体験しませんか?

もちろん、一緒にお仕事をしてくださるパートナーさんも随時募集中です。まずはお気軽に声をかけてください!

求人応募してみる!


投稿者

フロントエンドエンジニア。 事業会社で LPO や EFO のサービス改善を経験し、Gaji-Labo に入社。 関わってくださる人により良い選択を提供できることを目指し日々奮闘しています。 3度の飯よりアニメが好き。