Claude Code のエラー

Could not read Claude Code config — run `claude` with no arguments to recover it.

結論

設定ファイルを読めない状態。JSONの構文エラーか、末尾のカンマが原因の大半。

確認した版 Claude Code v2.1.259
確認日 2026年9月3日
文言の照合 Claude Code v2.1.259
最終更新 2026年9月3日
根拠 一次情報で確認

エラー文字列

Claude Code
Could not read Claude Code config — run `claude` with no arguments to recover it.

⚠️ メッセージの後半に対処法が書かれています。 途中で切れた形で見ている場合は、全文を確認してください。

Could not read Claude Code config — run `claude` with no arguments to recover it.

何が起きているか

Claude Code の設定(~/.claude.json)を読めていません。

メッセージ自身が答えを持っています。 引数なしで claude を起動すると、設定を作り直します。

🔴 設定ファイルが壊れていても、普段は何も言われません

v2.1.238 で実測した結果です。壊れた設定は、エラーを出さずに丸ごと捨てられます。

状態 起動時の挙動
~/.claude.json が壊れている 何も言わずに起動する(exit 0)
settings.json が壊れている 何も言わずに起動する。書いた設定は効かない
settings.json が BOM 付き 何も言わずに無視される。鍵を書いていても読まれない

⚠️ つまり「設定が効かない」ときにこのメッセージは出ません。 逆に、このメッセージが出たときは設定を読む処理が明示的に走った場面です。

⭐ **設定が効かないと感じたら、エラーを待たずに自分で検証してください。**下の手順がそのまま使えます。

🔴 CI と -p では、警告そのものが出ません

v2.1.238 の claude --help-p についてこう明記しています。

Settings files that fail validation are silently ignored in this mode (no error dialog is shown). (このモードでは、検証に失敗した設定ファイルは黙って無視されます。エラーダイアログは表示されません)

⚠️ これは非対話モードに限った挙動です。 対話セッションでは知らせる余地がありますが、次のときは何も出ません。

状況
-p / --print を付けた 明示的に非対話
標準出力が端末でない パイプやリダイレクトも自動的に非対話になる
CI・cron・スクリプト 上に該当する

🔴 permissions.deny を書いたつもりで CI を回していると、その制限が効かないまま動きます。 しかもログには何も残りません。

⭐ **CI に載せる前に、設定ファイルを JSON として検証しておくこと。**次の手順で確認できます。

直し方

1. どのファイルが壊れているか確認する

設定ファイルは複数の場所に置けます。

場所 用途
~/.claude/settings.json ユーザー全体
.claude/settings.json プロジェクト(共有)
.claude/settings.local.json プロジェクト(自分だけ)

Windows の場合、ユーザー全体の設定は %USERPROFILE%\.claude\settings.json です。

2. JSON として妥当か検証する

macOS / Linux

python3 -m json.tool ~/.claude/settings.json > /dev/null && echo "OK" || echo "構文エラー"

jq があるなら次でも構いません。

jq empty ~/.claude/settings.json && echo "OK"

Windows(PowerShell)

try {
  Get-Content "$env:USERPROFILE\.claude\settings.json" -Raw -Encoding utf8 | ConvertFrom-Json | Out-Null
  "OK"
} catch {
  "構文エラー: $($_.Exception.Message)"
}

エラーが出たら、報告された行を見てください。

⚠️ -Encoding utf8 を省略しないでください。 PowerShell 5.1 は BOM が無い UTF-8 を CP932(日本語のANSI)として読みます。 設定に日本語のパスやメモが入っていると、化けた状態で検証することになります。

⚠️ PowerShell の ConvertFrom-Json は JSON 仕様より緩く、「OK」でも壊れていることがあります。 実測で確認した差は次のとおりです。

書き方 PowerShell の判定 実際
末尾カンマ エラー ❌ 不正
コメント エラー ❌ 不正
バックスラッシュ1本のパス エラー ❌ 不正
シングルクォート 「OK」 不正
BOM 付き 「OK」 ⚠️ 読み込みに失敗しうる

「PowerShell では OK なのに Claude Code が読めない」なら、シングルクォートか BOM を疑ってください。 どちらもこの検証では見つかりません。

3. よくある構文の誤り

末尾のカンマ — JSON では許されません。

{
  "model": "sonnet",
  "permissions": { "allow": ["Bash(git:*)"] },
}

最後の } の前のカンマが原因です。削除してください。

コメント — JSON にコメントは書けません。

{
  // これは使えない
  "model": "sonnet"
}

引用符 — キーも値もダブルクォートです。シングルクォートは使えません。

Windows のパス — バックスラッシュはエスケープが必要です。

{
  "env": { "NODE_EXTRA_CA_CERTS": "C:\\certs\\company-ca.crt" }
}

C:\certs\... と1本で書くと壊れます。\\ にするか、C:/certs/... とスラッシュで書いてください。

4. BOM を取り除く(Windows)

見た目に問題が無いのに読めない場合、これを疑ってください。

まず BOM が付いているか確認します。

$bytes = [System.IO.File]::ReadAllBytes("$env:USERPROFILE\.claude\settings.json")
if ($bytes.Length -ge 3 -and $bytes[0] -eq 0xEF -and $bytes[1] -eq 0xBB -and $bytes[2] -eq 0xBF) { "BOM あり" } else { "BOM なし" }

付いていたら、BOM なしで書き直します。

$p = "$env:USERPROFILE\.claude\settings.json"
$text = Get-Content $p -Raw -Encoding utf8
[System.IO.File]::WriteAllText($p, $text, (New-Object System.Text.UTF8Encoding($false)))

⚠️ -Encoding utf8 は必須です。 これを省くと、BOM を消した瞬間に PowerShell がそのファイルを CP932 として扱うようになり、次に開いたときに日本語が壊れます。「BOM を消したら文字化けするようになった」というのはこれが原因です。

⚠️ メモ帳(notepad.exe)で設定ファイルを編集しないでください。 VS Code など、文字コードを指定して保存できるエディタを使ってください。

5. 権限を確認する

macOS / Linux

ls -l ~/.claude/settings.json

読み取り権限が無ければ付与します。

chmod 600 ~/.claude/settings.json

6. どうしても直らない場合

⚠️ バックアップを取ってから、作り直させます。

mv ~/.claude/settings.json ~/.claude/settings.json.bak
claude
Rename-Item "$env:USERPROFILE\.claude\settings.json" "settings.json.bak"
claude

起動時に既定の設定が作られます。バックアップから必要な項目だけを手で戻してください。

再発防止

  • 設定ファイルは JSON 対応のエディタで編集する。 構文エラーがその場で分かります
  • ⚠️ PowerShell で Get-Content するときは -Encoding utf8 を付ける。 5.1 は BOM の無い UTF-8 を CP932 として読みます
  • Windows ではメモ帳を使わない。BOM が混入します
  • チームで共有する .claude/settings.json は、変更時に JSON の検証を通してからコミットする
  • .claude/settings.local.json.gitignore に入れておく

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

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

エラーを報告する