◉CLAUDE LABEN
●CODE 2.1.319 — Claude Code で MCP のタスク実行が自動でバックグラウンドに回るようになりました。確認待ちを拒否に倒す denyInsteadOfPrompting 設定も入りました●CONSOLE — Console の IP 許可リストがベータで登場しました(11/5)。許可外のアドレスからのリクエストは拒否されます●SONNET 4.5 — Claude API での提供終了は 11/30、残り23日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST — Opus 4.8 の fast mode は非推奨になり、11/30 に除去されます。移行先は Opus 5.5●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●CODE 2.1.319 — Claude Code で MCP のタスク実行が自動でバックグラウンドに回るようになりました。確認待ちを拒否に倒す denyInsteadOfPrompting 設定も入りました●CONSOLE — Console の IP 許可リストがベータで登場しました(11/5)。許可外のアドレスからのリクエストは拒否されます●SONNET 4.5 — Claude API での提供終了は 11/30、残り23日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST — Opus 4.8 の fast mode は非推奨になり、11/30 に除去されます。移行先は Opus 5.5●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/Claude Code
⟐ Claude Code/2026-06-18中級

壊れた settings.json で Claude Code が起動しなくなったとき — セーフモードの挙動と設定の分け方

settings.json の構文ミスで Claude Code が起動しなくなったときに、どの階層が壊れているかを切り分けて数分で復旧する手順と、自動運用で壊れにくい設定の分割・検証パターンをまとめました。

claude-code133settings6configurationtroubleshooting63

✦ プレミアム記事

設定ファイルにカンマを一つ余計に置いただけで、Claude Code がまったく起動しなくなった——この状況に一度でも遭遇すると、設定の扱い方に対する考え方が変わります。個人開発でアプリと並行して4つのサイトを自動更新するパイプラインを回している中で、.claude/settings.json に追記した hooks のブロックで末尾カンマを残してしまい、翌朝のスケジュール実行が静かに止まっていたことがありました。エラーは出ているのに、どの階層のどのファイルが原因かがすぐには分からない。この「切り分けに時間が溶ける」感覚こそ、設定まわりの一番の落とし穴だと感じています。

最近の Claude Code には、壊れた構成を検知すると、その設定ファイルだけを隔離して縮退状態(セーフモード)で起動を続ける挙動が入りました。これは便利な一方で、「なぜ普段の権限設定が効いていないのか」を理解していないと、別の混乱を生みます。ここでは、設定が壊れたときに何が起きるのか、どこから切り分けるのか、そして自動運用でそもそも壊さないためにどう設定を組むのかを、実際の復旧手順とあわせて整理します。

設定が壊れると Claude Code はどう振る舞うか

まず押さえておきたいのは、Claude Code の設定が「全か無か」ではないという点です。設定は複数のファイルに分かれて読み込まれ、優先順位の高いものが低いものを上書きします。優先順位は高い方から順に、次のようになっています。

優先度設定の種類代表的なパス
1(最優先)エンタープライズ管理ポリシーmacOS: /Library/Application Support/ClaudeCode/managed-settings.json
Linux: /etc/claude-code/managed-settings.json
2コマンドライン引数--model など
3プロジェクト個人設定.claude/settings.local.json
4プロジェクト共有設定.claude/settings.json
5(最下位)ユーザー設定~/.claude/settings.json

この多層構造があるからこそ、1つのファイルが壊れたときの挙動が直感に反します。以前は壊れたファイルがあると Claude Code 全体が立ち上がらないことがありましたが、最近のバージョンは「壊れた構成の隔離」を行います。つまり、JSON として解釈できないファイルを1枚見つけると、そのファイルだけを読み込み対象から外し、残りの有効な設定でセーフモードとして起動を続けます。

ここで起きやすい誤解は、「起動はしたのだから設定は効いているはず」という思い込みです。実際には、隔離されたファイルに書いていた permissions.deny や hooks がまるごと無視されている状態になります。自動運用でこれが起きると、本来 deny していたコマンドが ask に落ちて承認待ちで止まる、あるいは想定したフックが発火せずログだけが残る、といった「半分動いて半分動かない」状態になります。私が経験した「スケジュール実行が静かに止まる」現象も、まさにこのパターンでした。本番のパイプラインで起きると厄介な、典型的な落とし穴です。

セーフモードで起動したかどうかは、起動直後の警告メッセージと /doctor の出力で確認できます。/doctor がどの設定ファイルを問題ありと判定したかを示してくれるので、まずはここを見るのが最短です。/doctor の読み方そのものは /doctor で設定トラブルを3分で切り分ける話 に詳しくまとめています。

どの階層が壊れているかを切り分ける

復旧の第一歩は「どのファイルが壊れているか」の特定です。設定ファイルは高々5枚なので、機械的に全部を JSON として検証すれば、原因はすぐに浮かび上がります。私の場合は次のワンライナーを最初に走らせます。jq で各ファイルを順にパースし、失敗したものだけを赤裸々に表示する作りです。

# 読み込まれうる settings ファイルを全部 JSON 検証する
# 壊れているファイルだけ "INVALID" として表示される
for f in \
  "/Library/Application Support/ClaudeCode/managed-settings.json" \
  "/etc/claude-code/managed-settings.json" \
  "$PWD/.claude/settings.local.json" \
  "$PWD/.claude/settings.json" \
  "$HOME/.claude/settings.json"; do
  [ -f "$f" ] || continue
  if jq empty "$f" 2>/dev/null; then
    echo "OK      $f"
  else
    echo "INVALID $f"
    # 壊れている箇所の行番号付きでエラーを表示
    jq empty "$f"
  fi
done

期待する出力は次のようになります。壊れたファイルだけが INVALID と表示され、jq が「どの行・どの文字で破綻したか」まで教えてくれます。

OK      /Users/you/project/.claude/settings.json
INVALID /Users/you/.claude/settings.json
jq: error (at /Users/you/.claude/settings.json:14): Expected another key-value pair at line 14, column 3

この時点で犯人のファイルと行が確定します。jq を入れていない環境なら、Python の標準ライブラリでも同じことができます。

# jq がない場合のフォールバック検証
python3 - "$HOME/.claude/settings.json" << 'PY'
import json, sys
path = sys.argv[1]
try:
    with open(path) as fp:
        json.load(fp)
    print("OK", path)
except json.JSONDecodeError as e:
    print(f"INVALID {path}: {e}")
PY

切り分けで一番つまずきやすいのが、優先度の高い「エンタープライズ管理ポリシー」の存在を忘れることです。チーム配布の Mac では /Library/Application Support/ClaudeCode/managed-settings.json が自分の ~/.claude/settings.json を上書きするため、「ユーザー設定を直したのに反映されない」ときは、まずこの最上位ファイルを疑うのが正解です。--model のようなコマンドライン引数も設定より優先されるので、起動スクリプトに古いフラグが残っていないかもあわせて確認します。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦settings.json の構文ミスで Claude Code が立ち上がらず手詰まりだった状態から、セーフモードの挙動を理解して数分で復旧できるようになります
✦設定が enterprise / user / project / local のどの階層で壊れているかを切り分けるコマンドと手順を手に入れられます
✦自動運用で壊れにくい settings.json の分割・事前検証パターンを実装し、構成事故そのものを未然に防げるようになります
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⟐ Claude Code2026-11-03
共有ホームで Claude Code が Bus error で落ちるとき、自動更新を止める前に確かめること
NFS など共有ストレージのホームで Claude Code が Bus error で落ちる理由を、公式の掃除ルールと更新の止め方から整理し、置き場の確認と消える版の見積もりを試した記録です。
⟐ Claude Code2026-05-24
Claude Code で連続する Edit が連鎖的に失敗するときの直し方 — old_string が消える・重複する問題
Claude Code が同じファイルへ Edit を続けて投げると、2件目以降が『not found』『not unique』『modified since read』で落ちることがあります。エラー別の原因と、一致件数を先に数える小さなスクリプト、フォーマッタ Hook の正しい設定をまとめます。
⟐ Claude Code2026-05-10
Claude Code の Glob と Grep が0件を返すときの原因切り分け
Claude Code の Glob や Grep が 0 件を返したとき、ファイルがあるのに見えない理由を、除外ルール・隠しフォルダ・パターン記法・作業範囲の順に切り分けます。ターミナルの find と rg で事実を先に確かめる手順と、最初の依頼文に添える一文まで、実際にハマった順に書き残します。