T-CREATOR

<div />

Claude Code の認証の優先順位: 環境変数の API キーが /login より先に使われる

Claude Code の認証の優先順位: 環境変数の API キーが /login より先に使われる

Claude Code は、環境変数に API キーやトークンがあると、​/​login でログインしていてもそちらを先に使います。どれが使われているかは ​/​status の表示で分かります。2026年11月3日に、Claude Code 2.1.309 で確かめた動きです。

経緯

​/​login でログインしてある状態で、環境変数に無効な API キーを入れて起動したところ、ログインがあるのに Invalid API key で失敗しました。そこで、認証情報がいくつもあるときにどれが使われるかを確かめました。

環境

  • macOS 26.6
  • Claude Code 2.1.309(2026年11月3日に確認)

動き

クラウドの設定と API キーがあると、ログインは使われない

API キー(ANTHROPIC_API_KEY)は Claude Console のキーで、Pro や Max などのサブスクリプションで ​/​login するログインとは別の契約です。対話画面では、環境変数の API キーを使うかどうかを最初に一度聞かれ、承認するとそのキーが使われます(公式の認証のページによる)。

認証情報がいくつもあるときは、次の順番で使われます。上にあるものが1つでもあれば、​/​login のログインは使われません。

  1. Amazon Bedrock などのクラウドの設定
  2. 環境変数 ANTHROPIC_AUTH_TOKEN
  3. 環境変数 ANTHROPIC_API_KEY
  4. ​/​login のログイン

ログインがあっても、環境変数のキーが先に使われる

ログインしてある状態で、無効な API キーを入れて claude -p(対話の画面を開かずに、1回の指示を実行して結果を受け取る使い方)で実行すると、次のように失敗します。

terminal$ ANTHROPIC_API_KEY=sk-ant-invalid-test claude -p "hi"
Invalid API key · Fix external API key

無効なトークンを入れたときは、次の表示でした。

terminalFailed to authenticate. API Error: 401 Invalid bearer token

/status で、使われている認証情報が分かる

対話画面で ​/​status を実行すると、ログインで使っているときは次の行が出ます。

terminalLogin method:    Claude Pro account

ANTHROPIC_API_KEY が使われているときは、次のように出ます。

terminalAuth token:      none
API key:         ANTHROPIC_API_KEY

API key や Auth token の行に値があれば、環境変数が使われています。

設定フォルダーを変えると、ログインのない状態になる

空の設定フォルダーで起動すると、今のログインを消さずに、ログインのないときの表示を確かめられます。

terminal$ CLAUDE_CONFIG_DIR=$(mktemp -d) claude -p "hi"
Not logged in · Please run /login

ログイン情報は、macOS ではキーチェーン、Linux と Windows では ~​/​.claude​/​.credentials.json に保存されます。CLAUDE_CONFIG_DIR を変えると、別の保存先を見ます。

公式との違い

公式の認証のページには、使われる順番が書かれています。ログインがあっても環境変数の無効なキーで失敗すること、そのときに ​/​login をやり直しても直らないこと、​/​status のどの行を見れば分かるかは書かれていません。

対処

/login のログインを使いたいとき

terminal$ unset ANTHROPIC_API_KEY
$ unset ANTHROPIC_AUTH_TOKEN

ターミナルを開くたびに同じになるときは、シェルの設定ファイルに書かれています。

terminal$ grep -n "ANTHROPIC" ~/.zshrc ~/.zprofile ~/.bashrc ~/.bash_profile 2>/dev/null

注意点

ログインの期限が3日以内になると、起動時に知らせが出る

​/​login のログインの期限が3日以内になると、起動したときに Your login expires in 3 days · run ​/​login to renew と出ます。期限が切れると、​/​status の Login の行が Expired — log in again になります。

参考文献

著書

とあるクリエイター

フロントエンドエンジニア Next.js / React / TypeScript / Node.js / Docker / AI Coding