Claude Code のエラー

Not logged in · Please run /login

結論

認証情報が1つも見つからない状態。設定ファイルのJSONが壊れていると鍵を書いていても黙って捨てられ、同じ表示になる。

確認した版 Claude Code v2.1.259
確認日 2026年9月3日
最終更新 2026年9月3日
根拠 実機で確認

エラー文字列

Claude Code
Not logged in · Please run /login

⚠️ このメッセージは標準エラーではなく標準出力に出ます。終了コードは 1 です。 claude -p の出力をそのまま変数に入れている場合、この文字列が「回答」として入ります。

何が起きているか

Claude Code が、使える認証情報を1つも見つけられなかった状態です。

認証情報は3つの経路のどれかで渡します。

経路 渡し方 主な用途
OAuth claude を起動して /login 対話環境
API キー 環境変数 ANTHROPIC_API_KEY CI・スクリプト
OAuth トークン 環境変数 CLAUDE_CODE_OAUTH_TOKEN CI で Claude の契約を使う場合

🔴 設定ファイルに鍵を書いたのに出る場合

JSON が壊れていると、設定ファイルは警告なしに丸ごと捨てられます。

これが最も見つけにくい原因です。Claude Code は settings.json の JSON が壊れていても **何も言いません。**警告も出ず、終了コードも変わらず、そのファイルは無かったことになります。

v2.1.238 で実測した結果です。env.ANTHROPIC_API_KEY同じ値を書いた設定ファイルを、 JSON の壊し方だけ変えて渡しています。

~/.claude/settings.json の状態 実際に出た表示
正しい JSON Failed to authenticate. API Error: 401 ...(鍵は読まれている)
閉じ括弧 } が足りない Not logged in · Please run /login
末尾にカンマがある Not logged in · Please run /login
// コメントが入っている Not logged in · Please run /login

settings.json は JSONC ではありません。 ///* */ のコメントを書くと、 その時点でファイル全体が無効になります。エディタが色を付けてくれても JSON としては不正です。

⚠️ 末尾カンマも同じです。JavaScript では許されますが JSON では不正です。

直し方

1. まず設定ファイルが JSON として妥当か確かめる

鍵を設定ファイルに書いている場合は、ここから確認してください。 壊れていても Claude Code は何も言わないため、自分で確かめる以外に気づく方法がありません。

Windows(PowerShell)

foreach ($p in @("$env:USERPROFILE\.claude\settings.json", ".claude\settings.json", ".claude\settings.local.json")) {
  if (Test-Path $p) {
    try   { Get-Content $p -Raw -Encoding utf8 | ConvertFrom-Json | Out-Null; "OK   $p" }
    catch { "壊れている $p -- $($_.Exception.Message)" }
  }
}

macOS / Linux

for p in ~/.claude/settings.json .claude/settings.json .claude/settings.local.json; do
  [ -f "$p" ] || continue
  if python3 -c "import json,sys;json.load(open(sys.argv[1]))" "$p" 2>/dev/null; then
    echo "OK   $p"
  else
    echo "壊れている $p"
  fi
done

⚠️ jq は Windows にも macOS にも標準では入っていません。 上は追加インストール無しで動く形にしてあります。

2. 対話環境で認証する

claude

起動してから /login を実行します。ブラウザが開いて認証が完了すると、次回以降は不要です。

3. CI・スクリプトで認証する

/login は対話が必要なため CI では使えません。環境変数を使います。

export ANTHROPIC_API_KEY="sk-ant-..."
claude -p "..."

⚠️ 値の前後に改行や空白が混ざると認証は通りません。 CI のシークレット貼り付けで混入しがちです。 その場合は Not logged in ではなく Failed to authenticate. API Error: 401 API key is invalid. になります。

4. スクリプトでは終了コードを見る

このメッセージは標準出力に出ます。出力を回答として扱っていると、 認証されていないことに気づかないまま処理が進みます。

if ! out=$(claude -p "$prompt"); then
  echo "Claude Code が失敗しました: $out" >&2
  exit 1
fi

再発防止

  • 設定ファイルを手で編集したら、必ず JSON として検証する。 Claude Code は壊れていても黙っています
  • 設定ファイルにコメントを書かない。メモを残したいなら、使われないキー(例: _note)に文字列として入れる
  • CI では ANTHROPIC_API_KEY を使い、値に改行が入っていないことを確認する
  • claude -p終了コードを必ず見る。標準出力だけを見ていると、この表示を回答として受け取ってしまう

この手順で直りませんでしたか?

環境を添えて報告いただければ、追加の原因を検証してこのページに反映します。

エラーを報告する