Claude Code のエラー

Error: Settings file not found: <path>

結論

--settings に渡した値がファイルとして見つからない状態。JSON文字列がシェルに壊されてパス扱いされた場合にも出る。

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

エラー文字列

Claude Code
Error: Settings file not found: <path>

⚠️ 標準エラーに出て、終了コードは 1 です。 --version を付けただけでも出ます。 設定の読み込みは、認証よりもモデル解決よりもに行われます。

何が起きているか

--settings に渡した値をファイルのパスとして解釈し、そのファイルが無かった状態です。

--settings はパスと JSON 文字列の両方を受け取ります。 渡された値の見た目から どちらなのかを判断します。ここが、このエラーが分かりにくい理由です。

v2.1.238 で実測した対応表です。

渡した値 出るもの
存在するファイルのパス (正常に読み込まれる)
存在しないパス Error: Settings file not found: <path>
ディレクトリ Error: Cannot use settings file (EISDIR: illegal operation on a directory, read): <path>
JSON として不正な文字列 Error: Invalid JSON provided to --settings
2MiB を超えるファイル Error: Settings file exceeds the 2MiB limit

🔴 シェルが引用符を外すと、JSON がパスとして扱われる

Windows で最も多い原因です。

--settings '{"env":{"FOO":"bar"}}' のように JSON 文字列を直接渡すとき、 シェルが引用符を取り除くと、Claude Code に届く値は {env:{FOO:bar}} になります。

実測では、届いた値の見た目によって出るメッセージが変わりました。

Claude Code に届いた値 出たもの
{env:{FOO:bar}} Error: Invalid JSON provided to --settings
{env: Error: Settings file not found: {env:

⚠️ Settings file not found: の後ろに、自分が書いた JSON の断片が出ていたら、 ファイルの問題ではありません。 引用符がシェルに食われています。

直し方

1. まず、メッセージに出ているパスを読む

Claude Code は解決後のパスをそのまま表示します。ここが最短の手がかりです。

表示されたもの 意味
意図した絶対パス 本当にファイルが無い。綴りかディレクトリを確認する
意図と違うディレクトリから始まる 相対パスが別の作業ディレクトリから解決されている
{: が混ざった断片 JSON を渡そうとして引用符が外れている

2. パスを渡す場合は絶対パスにする

相対パスは実行時の作業ディレクトリから解決されます。CI やエディタから起動すると、 自分がいるつもりの場所とは違うことがあります。

Windows(PowerShell)

claude --settings (Resolve-Path .\team-settings.json).Path -p "..."

macOS / Linux

claude --settings "$(pwd)/team-settings.json" -p "..."

3. JSON を直接渡す場合は、ファイルにする

引用符の扱いはシェルごとに違います。ファイルに書けばこの問題は起きません。

cat > /tmp/settings.json <<'EOF'
{"env":{"FOO":"bar"}}
EOF
claude --settings /tmp/settings.json -p "..."

どうしても直接渡すなら、シェルに届いた値を先に確認してください。

Windows(PowerShell)

$json = '{"env":{"FOO":"bar"}}'
$json | ConvertFrom-Json | Out-Null   # ここで落ちるなら JSON 自体が不正
claude --settings $json -p "..."

⚠️ cmd.exe から渡す場合、"\" に書き換える必要があります。 PowerShell から渡すほうが確実です。

4. ディレクトリを渡していないか確認する

--settings ~/.claude のようにディレクトリを渡すと EISDIR になります。 --settings ~/.claude/settings.json のようにファイルまで指定してください。

再発防止

  • --settings にはファイルのパスを渡す。 JSON 文字列を直接渡さない
  • パスは絶対パスにする。相対パスは起動元によって解決先が変わる
  • CI では、渡す前に test -f "$SETTINGS"(PowerShell なら Test-Path)で存在を確認する
  • ⚠️ 設定ファイルの JSON が壊れていても Claude Code は何も言いません。 存在するだけでは足りないので、JSON として妥当かも併せて検証する

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

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

エラーを報告する