npm E401の原因と対処法

冒頭まとめ npm installやnpm publishで次のエラーが出る場合、パッケージの取得先から認証を拒否されています。 npm error code E401 npm error Unable to authenticate, your authentication token seems to be invalid. 最初に、失敗したURLと使用中のレジストリを確認してください。次に、.npmrcの認証情報がそのレジストリに結び付いているか、CIへNPM_TOKENなどの環境変数が渡されているかを調べます。 GitHubの公式発表によると、2025年12月9日にnpmのclassicトークンがすべて無効化されました。古いトークンをCIや.npmrcに残している場合は、現在有効なgranular access tokenへの交換が必要です。 npm E401の意味 E401は、接続したレジストリが認証情報を受け付けなかったときに表示されます。レジストリとは、npmパッケージを取得または公開するサーバーです。 表示は1種類ではありません。代表的には、トークンが無効であるという案内、パスワードが未設定または誤っているという案内、二段階認証を求める案内があります。社内レジストリなどでは、レジストリ側が返した独自の文が表示される場合もあります。 重要なのは、E401が必ずnpmjs.comから返るとは限らないことです。@myorg/packageのようにscopeが付いたパッケージは、設定によってGitHub Packagesや社内レジストリへ送られます。エラーに含まれるURLを基準に調べてください。 使用中のレジストリを確認する 既定のレジストリは次のコマンドで確認できます。 npm config get registry scope付きパッケージで失敗した場合は、そのscopeに別のレジストリが設定されていないか確認します。 npm config get @myorg:registry たとえば、次の設定があると、@myorgで始まるパッケージのインストールと公開はGitHub Packagesへ送られます。 @myorg:registry=https://npm.pkg.github.com npm公式のscope文書では、scopeをレジストリへ関連付けると、そのscopeのパッケージは指定先から取得され、同じ指定先へ公開されると説明されています。 エラーのURLがregistry.npmjs.orgではなく、npm.pkg.github.comや社内のホスト名なら、その取得先用の認証情報を確認します。 トークンが期限切れまたは無効になっている 昨日まで動いていたCIが突然E401になった場合は、トークンの期限切れや無効化を確認します。 npmでは2025年12月9日にclassicトークンが恒久的に無効化されました。現在はgranular access tokenだけがサポートされています。また、2025年9月の公式発表では、書き込み権限を持つgranular access tokenの有効期限は上限90日とされています。 CIの秘密情報にclassicトークンや期限切れトークンが残っている場合は、npm上で用途と権限を絞った新しいgranular access tokenを作成し、CI側の秘密情報を交換します。トークンの値は.npmrcやワークフローへ直接書かず、CIの秘密情報として保存してください。 ローカル環境からnpmjs.comへ公開する場合は、次のコマンドでログインし直せます。 npm login 2025年12月9日以降、npm loginで作られるのは2時間で期限切れになるセッショントークンです。これはローカルでの公開操作を続けるための短時間の認証であり、CIへ長期保存するトークンには適しません。CIでの公開にはgranular access tokenを使うか、対応環境ではOIDCによるtrusted publishingを検討します。 CIに環境変数が渡されているか確認する .npmrcでは、環境変数を次のように参照できます。 //registry.npmjs.org/:_authToken=${NPM_TOKEN} npm公式の.npmrc文書によると、NPM_TOKENが未定義の場合、${NPM_TOKEN}は空文字へ自動変換されず、そのまま残ります。結果として、正しいトークンではない値で認証を試み、E401になる可能性があります。 値そのものを表示せず、環境変数が設定されているかだけを確認してください。macOSやLinuxのシェルでは次を使えます。 test -n "$NPM_TOKEN" && echo "NPM_TOKEN is set" || echo "NPM_TOKEN is empty" PowerShellでは次のように確認します。 ...

2026年9月22日 · ErrorLog