CLAUDE LABEN
DESIGN — Claude Designが大型更新。デザインシステムの取り込み、キャンバスの直接編集、エクスポート形式の追加が入りましたCODE — Claude Designがローカルのコードベースを起点に動作し、生成した画面をClaude Codeへ受け渡して実装まで繋げられますFABLE — Mythosクラスの最新モデルFable 5が一般利用向けに調整され、Claude Code v2.1.170から使えるようになりましたFIX — ストリーム途中で接続が切れても部分応答を保持する改善が入り、長時間の自動処理でも応答が残りますSCROLL — フルスクリーン時のマウスホイール加速を無効化するwheelScrollAccelerationEnabled設定が追加されましたTIER — Claude DesignベータはPro・Max・Team・Enterpriseで利用できますDESIGN — Claude Designが大型更新。デザインシステムの取り込み、キャンバスの直接編集、エクスポート形式の追加が入りましたCODE — Claude Designがローカルのコードベースを起点に動作し、生成した画面をClaude Codeへ受け渡して実装まで繋げられますFABLE — Mythosクラスの最新モデルFable 5が一般利用向けに調整され、Claude Code v2.1.170から使えるようになりましたFIX — ストリーム途中で接続が切れても部分応答を保持する改善が入り、長時間の自動処理でも応答が残りますSCROLL — フルスクリーン時のマウスホイール加速を無効化するwheelScrollAccelerationEnabled設定が追加されましたTIER — Claude DesignベータはPro・Max・Team・Enterpriseで利用できます
記事一覧/Claude Code
Claude Code/2026-06-18中級

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

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

claude-code120settings5configurationtroubleshooting61

プレミアム記事

設定ファイルにカンマを一つ余計に置いただけで、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.denyhooks がまるごと無視されている状態になります。自動運用でこれが起きると、本来 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-05-21
Claude Code Hook が `command timed out` で失敗するときの timeout 設定と分割実行のコツ
Claude Code の Hook が `command timed out` で発火しても完了しない問題を、timeout 設定の見直し・分割実行・バックグラウンド化の3アプローチで実用的に解決する手順をまとめます。
Claude Code2026-06-10
git add -A が .bak バックアップまで巻き込む — in-place 修正スクリプトと自動コミットの落とし穴
sed -i や自作の --fix スクリプトが残す .bak バックアップを git add -A が無言で取り込み、本番リポジトリに混入させてしまう問題。なぜ気づきにくいのか、scoped add と .gitignore でどう塞ぐかを実例で整理します。
Claude Code2026-06-09
前回の記事本文が別の記事に紛れ込む — 固定名の一時ファイルに残る残骸の罠
Claude Code の自動化で、固定名の一時ファイルに前回の中身が残り、まったく別の記事に古い本文が混入する。書き込みが無音で失敗する仕組みと、ユニーク名+挿入後の grep 照合で防ぐ方法を記録します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →