Claude Code「Not logged in」エラーの原因と対処法
Claude Codeで「Not logged in · Please run /login」と出る原因を、資格情報の不在・環境変数の見落とし・バックグラウンドセッション特有の事情に分けて切り分けます。
Claude Codeの「Not logged in」は資格情報が一つも見つからない状態
Not logged in · Please run /login は、このセッションで使える認証情報がどこにも見つからないときに出ます。/login で保存したログインも、ANTHROPIC_API_KEY も、apiKeyHelper も、どれも設定されていない状態です。原因は「一度も認証していない」か「認証情報が今のシェル・今のセッションに届いていない」のどちらかに絞れます。
まず /status を実行して、有効な認証情報源を確認します。ターミナルからは claude auth status でも同じ確認ができます。期限切れのclaude.aiログインは、v2.1.210以降なら /status の Login 行に Expired — log in again と出ます。
/statusclaude auth statusの出力で「未認証」を再現して確認した
v2.1.285で、空の設定ディレクトリ(CLAUDE_CONFIG_DIR に空のフォルダーを指定)を使って、認証情報が何も無い状態の出力を確かめました。claude auth status は既定でJSONを返し、--text で人が読む形式になります。
CLAUDE_CONFIG_DIR=./emptycfg claude auth status --text
# Not logged in. Run claude auth login to authenticate.
echo $?
# 1未認証のときの終了コードは 1 で、認証済みなら 0 です。CIの冒頭に claude auth status を置けば、キーが渡っていないジョブをモデル呼び出しの前に落とせます。JSON形式(--json)では loggedIn が false、authMethod が none になります。認証情報の種類は、次のように authMethod で見分けられます。
| 用意した認証情報 | authMethod | 補足 |
|---|---|---|
| なし | authMethodnone | 補足loggedIn: false、終了コード1 |
ANTHROPIC_API_KEY | authMethodapi_key | 補足apiKeySource に環境変数名が入る |
CLAUDE_CODE_OAUTH_TOKEN | authMethodoauth_token | 補足setup-token で発行するトークンの経路 |
ひとつ注意点があります。環境変数に適当な文字列を入れただけでも、claude auth status は loggedIn: true を返しました。sk-ant-dummy のようなダミー値でも同じで、このコマンドが見ているのは「認証情報が設定されているか」であり、キーが有効かどうかまでは確かめていないようです。loggedIn: true なのに実行時に認証エラーが出るなら、値そのものを疑う手がかりになります。
症状から原因を切り分ける
原因の切り分け順
- 1
claude auth status で有無を見る
authMethodがnoneなら、そのシェル・プロセスには認証情報が届いていません。以降は「なぜ届かないか」を探します。 - 2
起動したシェルの環境変数を見る
claudeを起動したのと同じシェルで、ANTHROPIC_API_KEYがexportされているかを見ます。 - 3
保存場所とKeychainを見る
環境変数を使っていないなら、ログインの保存先が読めているかを見ます。
- 4
似た文言のエラーと取り違えていないか見る
403は/loginを繰り返しても直りません。Login expiredは再ログインで直りますが、繰り返すならシステムクロックも確認します。下の節で区別します。
通常のセッションでの対処
対話的に claude を起動している場合は /login を実行すれば解決します。
/loginブラウザーが自動で開かない、あるいはSSH先やコンテナ内で開いても手元に届かない場合は c キーでログインURLをクリップボードにコピーし、手元のブラウザーに貼り付けます。ログイン完了後に表示されるコードをターミナルへ貼り付ける流れも用意されています。
ターミナルからログインする claude auth login には、方式を選ぶオプションがあります(v2.1.285の --help より)。
| オプション | 用途 |
|---|---|
--claudeai | 用途Claudeのサブスクリプションでログイン(既定) |
--console | 用途Anthropic Console(API従量課金)でログイン |
--sso | 用途SSOのログインフローを強制 |
--email <email> | 用途ログインページにメールアドレスを事前入力 |
ANTHROPIC_API_KEY で認証するつもりだった場合は、claude を起動したそのシェルで環境変数がexportされているかを確認します。IDE統合ターミナルやtmuxのペインなど、シェルが分かれていると設定が引き継がれないことがあります。.zshrc や .bashrc の export は対話シェルから起動したときだけ読み込まれ、cronやIDEの実行ボタンから直接起動したプロセスには届かないことがあります。設定した記憶があるのに /status で何も検出されないなら、この起動経路の違いを疑います。
env | grep ANTHROPIC_API_KEYCI・自動化で出るとき
対話的なログインが使えないCIパイプラインやスクリプトでは、/login は選択肢になりません。apiKeyHelper 設定でキーを都度取得するスクリプトを組むか、ANTHROPIC_API_KEY をパイプラインのシークレットとして直接渡します。
長期間有効なOAuthトークンが必要な場合は claude setup-token で発行し、CLAUDE_CODE_OAUTH_TOKEN として渡す方法もあります。v2.1.285の claude setup-token --help には「Claudeサブスクリプションが必要」とあるため、API従量課金のアカウントでは使えません。GitHub ActionsでClaude Codeを動かす具体的な設定はClaude CodeをGitHub Actionsに組み込むにまとまっています。
似ているが原因が違うエラーと区別する
「ログインしていない」ことを示すメッセージは複数あり、対処が変わります。混同すると /login を繰り返すだけで解決しないことがあります。まず、最も取り違えやすい2つです。
Not logged in と Login expired
Not logged in
Not logged in · Please run /login。資格情報がそもそも見つかりません。対処は /login です。
Login expired
Login expired · Please run /login。保存済みログインの更新にAPI側が失敗し、Claude Codeが認証情報を破棄しました。/login で再ログインし、system clockのズレも確認します。
残る3つは、発生する場面が限られます。
| メッセージ | 意味 | 対処 |
|---|---|---|
Authentication required · Sign in again to continue | 意味Claude DesktopのCodeタブ・Coworkで、同じ未認証状態がこの文言で表示される | 対処画面の案内に従って再サインイン |
Anthropic profile login expired | 意味ANTHROPIC_PROFILE で選んだプロファイルの認証情報が期限切れ | 対処プロファイルを発行したツールで再認証 |
Could not resolve authentication method | 意味バックグラウンドセッションやクラウドセッションなど、対話的なログインチェックが走らない経路で、資格情報の解決がワーカープロセスまで届いていない | 対処起動元プロセスの環境変数を確認 |
Claude Codeの Not logged in と Login expired は、どちらも /login で直ります。システムクロックのズレは主に Login expired で疑いますが、Not logged in が繰り返し出る場合も、公式はクロックの確認を案内しています。
バックグラウンドセッションと複数起動での注意
同じマシンで複数の claude セッションを並行して動かしている場合、保存済みのログインは共有され、更新のタイミングも調整されます。ただしv2.1.211より前では、スリープからの復帰後に、1つの保存先を共有する複数セッションが一斉にログアウトし、全セッションで再ログインを求められる不具合がありました。
agent viewで複数セッションを常駐させている場合や、リモートで長時間動かしているセッションでは、ログインの有効期限そのものにも注意が必要です。期限が3日以内に迫るとv2.1.203以降は起動時に警告が出ますが、そのセッションを長期間放置していると警告を見る機会自体がありません。期限切れに気づかず動き続けたセッションは、資格情報が切れた時点で進捗が止まり、再ログインするまで復帰しません。
ログイン後もつまずくとき
macOSでKeychainがロックされている
ログイン自体はブラウザーで完了しているのに Not logged in のままという場合、Keychainのロック、またはKeychainのパスワードがアカウントのパスワードとずれていて保存に失敗していることがあります。claude doctor でKeychainへのアクセスを確認できます。
security unlock-keychain ~/Library/Keychains/login.keychain-dbそれでも解消しない場合は、Keychain Accessアプリで login キーチェーンを選び、「編集」→「キーチェーン"login"のパスワードを変更」でアカウントのパスワードと同期させます。
認証コードを貼り付けても反映されない
ターミナルへの貼り付けでコードが反映されない端末では、対話プロンプトの代わりに標準入力からコードを読み取る claude auth login を使う方が確実です。
ログインフローが完了しない
/login を実行してブラウザーまでは開いたのに、そこから先で止まる場合は「資格情報が無い」のではなく「ログインフローが完了していない」別の状態です。
OAuth error: Invalid code. Please make sure the full code was copied が出る場合、ログインコードの有効期限切れかコピー時の欠落です。ブラウザーが開いたら手早くログインを完了させ、自動で開かない環境では c キーでURLをコピーして手元のブラウザーで開き直します。リモート・SSHセッションではブラウザーが別マシンで開くことがあるため、表示されたURLを手元のブラウザーへ貼り直す必要があります。
ログイン自体は完了したのに API Error: 403 {"error":{"type":"forbidden","message":"Request not allowed"}} が出る場合は、認証自体は成功していて認可の問題です。Pro・Maxプランならサブスクリプションが有効か、Console利用なら自分のアカウントに「Claude Code」または「Developer」ロールが付与されているかを確認します。管理者はConsoleのSettings → Membersで付与できます。社内プロキシ経由の場合はプロキシがリクエストに干渉していないかも確認対象です。
原因が分からないときは再ログインでリセットする
上記のどれにも当てはまらない場合は、いったん /logout で完全にサインアウトし、claude を再起動して認証をやり直すのが最短です。
/logoutサインアウトと認証情報の削除範囲、OS別の保存先の違いはClaude Codeログアウトと認証情報の完全削除ガイドで扱っています。ログイン方式そのものを選び直したい場合はClaude Codeログイン方法3種の使い分けを確認してください。
よくある質問
サブスクリプションでログインしているのにNot logged inと出ます
ANTHROPIC_API_KEY が同じシェルに設定されていないか確認してください。空文字のキーは未設定と同じ扱いで、Not logged in のままです。値が入っていても不正なキーなら、Not logged in ではなく Invalid API key になります。/status でどの認証情報源が候補に上がっているかを確認するのが早道です。
資格情報はどこに保存されていますか
macOSでは暗号化されたKeychainに(Keychainが書き込みを拒否すると ~/.claude/.credentials.json に保存されます)、Linuxでは ~/.claude/.credentials.json(パーミッション 0600)に、Windowsでは %USERPROFILE%\.claude\.credentials.json に保存されます。CLAUDE_CONFIG_DIR 環境変数を設定している場合は、Linux・Windowsではその配下に保存先が移り、macOSでもKeychainのエントリがディレクトリごとに分かれます。以前ログインできていたのに CLAUDE_CONFIG_DIR を変更した・新しいマシンやコンテナに移った後で Not logged in が出た場合、保存先が変わったか、その場所に資格情報がまだ無いだけということがあります。
WSL2やコンテナ内でだけこのエラーが出ます
WSL2やコンテナはホストと別のホームディレクトリ・別の環境を持つことが多く、/login で保存した資格情報がホスト側にしか無いケースがあります。WSL2・コンテナ内で改めて /login を実行してください。