開発・技術

Claude Code「Not logged in · Please run /login」の意味と対処法

Claude Code の「Not logged in · Please run /login」は、使える資格情報が1つも見つからないという意味です。初回起動、claude -p・CI・Agent SDK、--bare、CLAUDE_CONFIG_DIR、コンテナ、ラッパー別に見分け方と直し方を実機出力つきで解説。v2.1.318 で追加されたログイン期限の確認方法にも対応。

Claude Code「Not logged in · Please run /login」の意味と対処法
Not logged in · Please run /login

このメッセージは、Claude Code がそのセッションで使える資格情報(ログイン情報・API キー・トークン)を1つも見つけられなかったという意味です。ログイン情報が「期限切れ」なのではなく、「そもそも見えていない」状態です。対話モードなら /login、ターミナルからなら claude auth login でログインすれば解消します。ログイン済みなのに出る場合は、claude -p や CI、Obsidian のプラグインなど、ログインしたときとは別の環境で Claude Code が起動していることがほとんどです。

2026年11月の変更:日本時間2026年11月4日公開の v2.1.318 で、claude auth status に保存したログインの期限(loginExpiresAt)が表示されるようになりました。また、同じホームディレクトリで別のターミナルや別のマシンが同じアカウント・組織で再ログインすると、実行中のジョブが Not logged in で終わる不具合も直りました。自動実行で急にこのメッセージが出るようになった場合は、まず claude update で、ジョブを動かすマシンと再ログインするマシンの両方を v2.1.318 以降に上げ、ログインの期限を確かめてください。

この記事を読むとわかること

  • このメッセージの正確な意味と、似たメッセージ「Login expired」との違い
  • 「ログインしたはずなのに出る」ときに、どの環境で資格情報が見えていないかを1コマンドで確かめる方法
  • claude -p・CI・Agent SDK・--bare・コンテナで認証を通す方法
  • error: authentication_failed が前に付いて表示されるケース(Claudian などのラッパー)
  • v2.1.317・v2.1.318 の変更(ログインの期限の確かめ方と、直った不具合)
  • Claude Code v2.1.282・v2.1.318 で実際に試した出力

内容は2026年9月25日時点(Claude Code v2.1.282)の公式ドキュメントと手元での実行結果にもとづき、2026年11月5日に v2.1.317・v2.1.318 の変更を追記しました。実機で確認した内容とドキュメント記載の内容は書き分けています。

メッセージの意味:資格情報が「ない」状態

公式のエラーリファレンス(Error referenceの「Not logged in」)は、このメッセージを「このセッションで有効な資格情報がない」状態と説明しています。

Claude Code が認証に使える資格情報は複数あり、上から順に探して最初に見つかったものを使います(Authenticationの「Authentication precedence」)。

順位資格情報主な用途
1クラウドプロバイダーの認証(CLAUDE_CODE_USE_BEDROCK などを設定したとき)Amazon Bedrock・Google Cloud・Microsoft Foundry
2環境変数 ANTHROPIC_AUTH_TOKENLLM ゲートウェイ・プロキシ
3環境変数 ANTHROPIC_API_KEYClaude Console の API キー
4apiKeyHelper スクリプトの出力保管庫から取り出すキー
5環境変数 CLAUDE_CODE_OAUTH_TOKENclaude setup-token で作る長期トークン
6Anthropic プロファイル・フェデレーション認証ant CLI、Workload Identity Federation
7/login で保存したサブスクリプションのログインPro・Max・Ultra・Team・Enterprise の通常利用

このどれも見つからないと Not logged in · Please run /login になります。キーが間違っている場合は別のメッセージ(Invalid API key や 401)になるので、このメッセージが出た時点で「キーが無効」ではなく「キーが渡っていない」と考えて構いません。

表示される場所

  • 対話モードの CLI・VS Code 拡張:プロンプトを送ったときに表示されます
  • claude -p(非対話実行):標準出力にこの1行が出て、終了コード1で終わります
  • Agent SDK や、Claude Code を内部で呼ぶツール:実機で --output-format stream-json を確認すると、アシスタントのメッセージに "error": "authentication_failed" が付き、本文が Not logged in · Please run /login でした。ラッパーによっては、この2つを連結して Error: authentication_failedNot logged in · Please run /login のように表示します(Obsidian プラグイン Claudian の報告例)

なお、エージェントビューのバックグラウンドセッションやクラウドセッションでは、同じ状態が Could not resolve authentication method. Expected one of apiKey, authToken, ... という別の文言で出ます。対話モード・-p・Agent SDK では、この文言はデバッグログにだけ書かれます(Error reference の「Could not resolve authentication method」)。

まず確認:今の環境で資格情報が見えているか

原因を切り分ける一番の近道は、エラーが出たのと同じ環境で次のコマンドを実行することです。

claude auth status --text

資格情報が何もなければ、実機では次のように表示されました(v2.1.282。v2.1.318 でも同じ)。

Anthropic base URL: https://api.anthropic.com
Not logged in. Run claude auth login to authenticate.

--text を付けない場合は JSON で表示されます。v2.1.318 の実機では次のとおりでした(パスは省略しています)。

{
  "loggedIn": false,
  "authMethod": "none",
  "apiProvider": "firstParty",
  "analyticsDisabled": false,
  "projectsDirectory": "…/cfg/projects",
  "configDirectory": "…/cfg",
  "loginExpiresAt": null
}

"loggedIn": false、"authMethod": "none" と、どの設定ディレクトリを見ているか(configDirectory)が表示されます。ログイン済みのはずなのに loggedIn が false なら、そのディレクトリがログインしたときと違う可能性があります。対話モードの中では /status で同じ情報を確認できます。

原因と見分け方

よくある順に並べています。

原因見分け方対処
まだログインしていない(インストール直後、/logout 後、新しいマシン)対話モードでも出る/login または claude auth login
同じホームディレクトリで、別のターミナルや別のマシンが同じアカウント・組織で再ログインした(v2.1.317 以前)claude -p のジョブが、誰かの再ログインと同時に落ちる再ログインする側の Claude Code を v2.1.318 以降に更新する
claude -p・cron・CI・SDK が、ログインした環境とは別の環境で動いている手元の対話モードでは動く。自動実行だけ失敗する実行環境に ANTHROPIC_API_KEY か CLAUDE_CODE_OAUTH_TOKEN を渡す
--bare を付けている--bare を外すと動くANTHROPIC_API_KEY か apiKeyHelper を使う
CLAUDE_CONFIG_DIR がログイン時と違うclaude auth status の configDirectory が想定と違うログインしたときと同じ値にそろえる
コンテナや Dev Container を作り直した再ビルドのたびに出る設定ディレクトリをボリュームに保存する
エディタやプラグインが、シェルの環境変数を引き継いでいないターミナルでは動き、アプリ経由だけ失敗するアプリ側の設定で環境変数を渡すか、ターミナルから起動する

対処法

1. ログインしていない:/login で認証する

対話モードなら /login、シェルからなら次のコマンドでログインします。

claude auth login

ブラウザが開かない場合は、ログイン画面で c を押すと URL がクリップボードにコピーされます。SSH 先・WSL2・コンテナでは、ブラウザでサインインしたあとに表示されるコードを、ターミナルの Paste code here if prompted に貼り付けて完了させます(Authenticationの「Log in to Claude Code」、Troubleshoot installation and loginの「OAuth login fails in WSL2, SSH, or containers」)。

ブラウザ側で OAuth error: Invalid code が出て進めない場合は、「OAuth error: Invalid code」の対処法を参照してください。プランや料金の選び方はClaude Code の料金プラン比較にまとめています。

2. claude -p・CI・cron で出る:実行環境に資格情報を渡す

/login の情報は、ログインしたユーザーの設定ディレクトリ(既定は ~/.claude)に保存されます。CI ランナー、別ユーザーで動く cron、コンテナの中からは見えません。ブラウザでログインできない環境では、次のどちらかを環境変数で渡します。

サブスクリプション(Pro・Max・Ultra・Team・Enterprise)を使う場合は、手元のマシンで1年有効のトークンを発行します。

claude setup-token

表示されたトークンはどこにも保存されないので、コピーして CI のシークレットに登録し、実行環境で設定します(Authenticationの「Generate a long-lived token」)。

export CLAUDE_CODE_OAUTH_TOKEN=発行したトークン
claude -p "テストを実行して結果を要約して"

このトークンはモデルへのリクエスト専用で、Remote Control や claude.ai コネクタには使えません。

API キーで従量課金する場合は、Claude Console で発行したキーを設定します。

# macOS / Linux
export ANTHROPIC_API_KEY=発行したキー
# Windows PowerShell
$env:ANTHROPIC_API_KEY = "発行したキー"

-p では、ANTHROPIC_API_KEY があれば確認なしで必ず使われます。キーを定期的に入れ替える運用なら、キーを返すスクリプトを apiKeyHelper に設定する方法もあります。API での開発全般はClaude Code × API 開発ガイドで解説しています。

3. Agent SDK で出る:ANTHROPIC_API_KEY を設定する

Agent SDK のクイックスタートは、Not logged in や Invalid API key が出たら、エージェントを実行するシェルで ANTHROPIC_API_KEY が設定されているかを確認するよう案内しています。SDK は .env ファイルを自動では読み込みません(Agent SDK quickstart)。

同じページには、事前の承認がない限り、第三者の開発者が自社製品(Agent SDK で作ったエージェントを含む)で claude.ai のログインを提供することは認められていない、とも書かれています。自社サービスに組み込む場合は API キーでの認証を前提に設計してください。実装の全体像はClaude Agent SDK 実装ガイドにまとめています。

4. --bare を付けている:OAuth は読まれない

--bare は起動を速くするためのモードで、OAuth の資格情報もシステムのキーチェーンも読みません(Run Claude Code programmaticallyの「Start faster with bare mode」)。CLAUDE_CODE_OAUTH_TOKEN も読まれないため、setup-token のトークンだけを渡していると Not logged in になります。実機でも、CLAUDE_CODE_OAUTH_TOKEN を設定した状態で --bare を付けると Not logged in · Please run /login になり、同じ環境で --bare を外すと認証処理に進みました。--bare を使うなら ANTHROPIC_API_KEY か apiKeyHelper で認証します。

5. CLAUDE_CONFIG_DIR が違う:ログインした場所をそろえる

CLAUDE_CONFIG_DIR を設定すると、資格情報もそのディレクトリ側で管理されます。macOS ではキーチェーンの項目もディレクトリごとに分かれるため、値が違うセッションは別のログイン情報を読みます(Authenticationの「Credential management」)。仕事用と個人用を alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work claude' のように分けている場合、片方でしかログインしていなければ、もう片方では Not logged in になります。claude auth status の configDirectory で、どちらを見ているかを確認してください。

資格情報の保存場所は OS によって違います。

OS保存場所
macOS暗号化された macOS キーチェーン(書き込めないときは ~/.claude/.credentials.json)
Linux~/.claude/.credentials.json(パーミッション 0600)
Windows%USERPROFILE%\.claude\.credentials.json

CLAUDE_CONFIG_DIR を設定している場合は、~/.claude の代わりにそのディレクトリが使われます。

6. コンテナ・Dev Container:設定ディレクトリを残す

コンテナのホームディレクトリは再ビルドで消えるため、そのたびにログインし直しになります。公式の Dev Container ガイドは、~/.claude に名前付きボリュームをマウントし、CLAUDE_CONFIG_DIR を同じパスに設定する構成を示しています。アカウント情報や初回セットアップを済ませた記録を持つ ~/.claude.json は ~/.claude の外にあるため、CLAUDE_CONFIG_DIR を設定しないと、ボリュームをマウントしていても再ビルドのたびに初回セットアップがやり直しになります(Development containersの「Persist authentication and settings across rebuilds」)。

"mounts": [
  "source=claude-code-config,target=/home/node/.claude,type=volume"
],
"containerEnv": {
  "CLAUDE_CONFIG_DIR": "/home/node/.claude"
}

コンテナ運用の全体像はClaude Code × Docker 活用ガイドを参照してください。

7. プラグイン・エディタ経由だけで出る

Obsidian の Claudian のように Claude Code を内部で呼び出すツールでは、ツール側のプロセスから見える環境がターミナルと違うことがあります。上の Claudian の報告では、Linux 環境で authentication_failed と Not logged in が出たうえ、ツールの中で /login を実行しても「この環境では使えない」と表示されています。この場合は、同じユーザー・同じ CLAUDE_CONFIG_DIR でターミナルから claude auth login を実行してから、ツールを再起動してください。環境変数で認証している場合は、ツールのプロセスにその変数が渡っているかを確認します。公式ドキュメントも、ターミナルでは動くのに IDE の拡張では動かない場合、IDE のプロセスがシェルの環境を引き継いでいない可能性を挙げています(Troubleshoot installation and loginの「Bedrock, Agent Platform, or Foundry credentials not loading」)。

v2.1.317・v2.1.318 の変更

ログインの期限を事前に確かめる

/login や claude auth login で保存した claude.ai のログインには期限があります。期限が切れて更新もできなくなると、リクエストは Login expired · Please run /login で失敗します。v2.1.318(日本時間2026年11月4日公開)では、期限を前もって知る方法が増えました(CHANGELOG の 2.1.318)。

確認する場所内容根拠
claude auth statusloginExpiresAt に、保存したログインが終わる日時が入るCHANGELOG・実機(欄があることのみ)
claude -p --output-format json の結果credential_expires_at に同じ日時が入るCHANGELOG
claude -p のテキスト出力期限の10日前から、標準エラーに1行の警告が出るCHANGELOG
対話モードの起動時期限の3日前から Your login expires in 3 days · run /login to renew と表示Authenticationの「Renew an expiring login」

実機(v2.1.318)では、ログインしていない状態でも、ダミーの値を CLAUDE_CODE_OAUTH_TOKEN で渡した状態("authMethod": "oauth_token")でも、loginExpiresAt は null でした。本物の setup-token のトークンや保存したログインでの値、credential_expires_at、警告の文言は、実際のログインが要るため確かめていません。11月5日時点では、公式の CLI リファレンスの claude auth status の説明に loginExpiresAt はまだ載っていません。

期限が来てログインに失敗したときのメッセージも v2.1.318 で変わり、期限に達したことを伝えるようになりました。claude -p では、claude auth login と claude setup-token を案内します。cron や CI のように人が見ていない実行では、警告に気づく前に期限が切れることがあるため、長く使う自動実行は claude setup-token のトークンか API キーに切り替えておくと安心です。ただし setup-token のトークンにも1年の期限があり、上の欄や警告で期限がわかるかは確かめられていないため、発行日を控えておいてください。期限が切れたあとの対処は「Login expired」の対処法で解説しています。

直った、ログイン・認証まわりの不具合

Not logged in などの原因が Claude Code 側の不具合だったケースが、次の2つの版で直っています(CHANGELOG の記載。手元では再現していません)。思い当たる場合は、claude --version で版を確かめて更新してください。

版直った内容
v2.1.318同じホームディレクトリで、別のターミナルや別のマシンが同じアカウント・組織で再ログインすると、実行中のジョブが Not logged in で終わる
v2.1.318claude plugin のコマンドが、時間のかかるトークン更新を保存する前に終了し、次の実行でログアウトされることがある
v2.1.318ネットワーク上のホームディレクトリが、新しいファイルは作れるのにデータを書く容量がないとき、保存したログインが空のファイルに置き換わる
v2.1.317claude auth status が、時間のかかるトークン更新を保存する前に終了し、次の実行でログアウトされることがある
v2.1.317地域やネットワークによるブロック(HTTP 403)がログインの失敗として表示される。今は、ブロックされたことを説明する

再ログインでジョブが落ちる不具合について、公式のエラーリファレンスの「Not logged in」は、v2.1.318 より前は再ログインの途中で保存済みのログインを消してから新しいログインを保存していたと説明し、再ログインする側のマシンの Claude Code を更新するよう案内しています。

実機での再現結果

2026年9月25日に、macOS 上の Claude Code v2.1.282 を、空の設定ディレクトリと、認証関連の環境変数をすべて外した状態で実行しました(本物の資格情報は使っていません)。

$ claude -p "hi"
Not logged in · Please run /login
(終了コード 1)

--output-format json では "is_error": true、"terminal_reason": "api_error"、"result": "Not logged in · Please run /login" でした。--output-format stream-json --verbose では、アシスタントのメッセージに "error": "authentication_failed" が付いていました。ラッパーで authentication_failed と表示されるのはこの値です。

ダミーの値を入れた場合の結果は次のとおりです。

条件(すべてダミー値)結果
何も設定しないNot logged in · Please run /login
CLAUDE_CODE_OAUTH_TOKEN + --bareNot logged in · Please run /login
CLAUDE_CODE_OAUTH_TOKENFailed to authenticate. API Error: 401 OAuth access token is invalid.
ANTHROPIC_API_KEYFailed to authenticate. API Error: 401 API key is invalid.

資格情報が渡っていないときは Not logged in、渡っているが無効なときは 401 と、メッセージがはっきり分かれることが確認できます。

2026年11月5日に v2.1.318 で同じ条件を試したところ、何も設定しない場合の claude -p "hi" は同じく Not logged in · Please run /login(終了コード1)、ダミーの CLAUDE_CODE_OAUTH_TOKEN では同じく 401 OAuth access token is invalid. でした。ダミーのトークンを渡した状態の claude auth status は、"authMethod": "oauth_token"、"loginExpiresAt": null でした。

似ているが別のエラー

メッセージ状態詳しい解説
Login expired · Please run /loginログイン情報はあったが、更新できず消去された「Login expired」の対処法
OAuth token revoked · Please run /login保存したトークンを API が拒否したOAuthトークンの対処
Invalid API key · Fix external API keyANTHROPIC_API_KEY の値が無効Invalid API Keyの対処
Your organization has disabled Claude subscription access組織の管理者がサブスクリプション経由の利用を止めている組織による無効化の対処法
Could not load credentials from any providersBedrock 利用時に AWS の資格情報が見つからない「Could not load credentials」の対処法

何度ログインしても毎回ログインを求められる場合は、保存したログインが更新できていない可能性が高いので、「Login expired」の対処法にある時計とキーチェーンの確認に進んでください。

よくある質問

まとめ

  • Not logged in · Please run /login は「資格情報が見えていない」という意味。無効なキーのときは 401 など別のメッセージになる
  • エラーが出たのと同じ環境で claude auth status を実行し、loggedIn と configDirectory を確かめる
  • 自動実行では CLAUDE_CODE_OAUTH_TOKEN(claude setup-token)か ANTHROPIC_API_KEY を渡す。--bare では OAuth は読まれない
  • CLAUDE_CONFIG_DIR が違えば、ログイン情報も別になる
  • v2.1.318 以降は claude auth status の loginExpiresAt でログインの期限がわかる。古い版なら v2.1.318 以降に更新する

ほかのエラーはClaude Code トラブルシューティング完全ガイドから逆引きできます。

参考:

この記事に合う資料

関連記事

資料で全体をつかんでから、御社の場合をご相談ください

  • 研修・稟議・外注の準備に使える資料を無料で
  • 見積書の確認は、登録なしで診断できます
  • 相談は 30 分無料。代表が直接お返事します
  • 要件が決まっていなくても大丈夫です