Claude Code configエラー「Could not read」の直し方
「Could not read Claude Code config」の原因は~/.claude.jsonの破損。復旧手順と、settings.jsonとの違いを見ていきます。
Could not read Claude Code configが出る条件
claude import を実行したときに、次のメッセージが出てコマンドが止まることがあります。
Could not read Claude Code config — run `claude` with no arguments to recover it.原因は1つです。Claude Codeがログイン情報やプロジェクトごとの状態を保存している ~/.claude.json が、正しいJSONとして読めなくなっています。手で編集して構文を崩した、途中でプロセスが落ちて書き込みが中断した、といった状況で起きます。原因が1つに絞れる分、claude import の他のエラーより切り分けは単純です。
エラーの意味 — ~/.claude.jsonが壊れている
~/.claude.json には、OAuthのセッション情報、ユーザースコープ・ローカルスコープのMCPサーバー設定、プロジェクトごとの許可ツールや信頼設定、各種キャッシュが入っています。いずれもClaude Codeの日常的な動作に直結する情報で、単なる見た目の設定ではありません。claude import はサブコマンドの実行前にこのファイルを読み、利用可否を確認します。ここでパースに失敗すると、通常のインタラクティブセッションが表示する復旧ダイアログを出せないまま、エラーで終了します。
直し方は2通り
手順1: claudeを引数なしで実行して自動復旧を使う
もっとも簡単な直し方です。claude を通常どおり起動すると、Claude Codeが ~/.claude.json の異常を検出し、リセットするか確認するダイアログを出します。復旧が終わったら claude import を再実行します。
claude
# 復旧ダイアログの案内に従う
claude import codex --dry-runこのダイアログは対話的セッションの中でだけ出せる仕組みです。claude import のようなサブコマンドは対話セッションを起動する前にファイルを検証するため、同じ復旧手段を持たず、代わりにエラーで終了して手順1を案内する形になっています。
この方法は手軽な反面、~/.claude.json の内容がリセットされる場合があります。このファイルにはOAuthセッション・ユーザー/ローカルスコープのMCPサーバー設定・プロジェクトごとの許可ツールや信頼設定などが格納されているため、リセット後にどこまで引き継がれるかは事前に把握しておいたほうが安心です。
再ログインが必要かどうかはOSで変わります。macOSは認証情報をKeychainに保存しているため、~/.claude.json をリセットしてもログインセッション自体は引き継がれることがあります。LinuxとWindowsは認証情報を設定ディレクトリ配下に保存する構成のため、リセット後は再ログインを求められるのが基本です。
手順2: JSON構文だけを手で直す
MCPサーバー設定など手を入れた覚えのある内容を残したい場合は、~/.claude.json をエディタで開いてJSON構文だけを直します。カンマの付け忘れや閉じ括弧の欠落が典型的な原因です。
python3 -m json.tool ~/.claude.jsonこのコマンドがエラーを出す行番号が、直すべき箇所です。構文エラーが解消すれば claude import はそのまま再実行できます。
典型的な壊れ方は3パターンです。末尾のキーの後ろにカンマが残っている、オブジェクトや配列の閉じ括弧が足りない、書き込み中にプロセスが強制終了して途中で切れている、のいずれかです。1つ目と2つ目は json.tool が指す行を見れば数秒で直せますが、3つ目(途中で切れたファイル)は末尾に閉じ括弧を追加するだけでは元のデータ構造と食い違うことがあります。無理に閉じるより、手順1の自動復旧に任せたほうが安全です。
手で編集して壊れやすいパターン
~/.claude.json を直接編集する機会は少ないものの、MCPサーバーの認証情報を手で書き換えたり、古いエントリを消したりするときに構文を崩しがちです。典型的なミスは4つあります。
末尾カンマの残存: 配列やオブジェクトの最後の要素の後にカンマを残したまま次の要素を削除すると、JSONとして不正になります。JSONはJSON5やJSONCと違い、末尾カンマを許容しません。
閉じ括弧の数が合わない: ネストしたオブジェクトの一部だけを削除すると、{ と } の対応が崩れます。エディタの対応括弧ハイライト機能を使うと見つけやすくなります。
Windowsパスのバックスラッシュ未エスケープ: "path": "C:\Users\name" のように書くと、JSONの文字列エスケープルールに反してパースが失敗します。C:\\Users\\name のように二重にするか、C:/Users/name とスラッシュに統一します。
引用符の閉じ忘れ: 値の途中で改行してしまい、文字列を閉じる " を書き忘れるケースです。エディタの構文ハイライトで文字列の色が想定より長く続いていないか確認すると見つかります。
編集前に python3 -m json.tool ~/.claude.json > /dev/null を実行しておくと、既存の状態が正しいJSONであることを確認したうえで編集を始められます。
~/.claude.jsonとsettings.jsonは別ファイル
このエラーは settings.json の話ではありません。両者は保存する内容も、壊れたときの挙動も違います。混同して settings.json ばかり確認しても解決しません。ファイル名が似ていて紛らわしいうえに、片方だけ拡張子の前にドットが付く(.claude.json)ことも見分けにくさに拍車をかけています。エディタのファイル一覧で見比べる際は、ドットの位置を意識してください。
| ファイル | 保存する内容 | 壊れたときの挙動 |
|---|---|---|
~/.claude.json | 保存する内容OAuthセッション・MCPサーバー設定(user/local)・プロジェクトごとの許可ツールと信頼設定・キャッシュ | 壊れたときの挙動claude import は本記事のエラーで終了。通常セッションは復旧ダイアログを表示 |
~/.claude/settings.json 等 | 保存する内容permissions / hooks / env などの明示的な設定キー | 壊れたときの挙動セッション起動時に「Settings Error」ダイアログを表示し、修正・続行・終了を選べる |
.mcp.json(プロジェクトルート) | 保存する内容プロジェクトスコープのMCPサーバー定義 | 壊れたときの挙動単体で壊れていてもセッション起動は止まらず、該当サーバーが読み込めないだけになる |
permissions や hooks を ~/.claude.json に書いても反映されません。これらのキーは settings.json 側だけが読みます。逆にログインセッションやMCPサーバーの認証状態を settings.json に書くこともできません。
3つのファイルで壊れたときの挙動が違うのは、それぞれの読み込みタイミングが違うためです。settings.json はセッション起動の早い段階で検証され、壊れていれば対話的な修正ダイアログを出す余地があります。~/.claude.json はログイン状態そのものを保持するため、通常セッションでは復旧を最優先で扱いますが、claude import のようにセッションを起動しないサブコマンドでは復旧ダイアログを出す仕組みそのものが動きません。.mcp.json は個別サーバーの定義ファイルにすぎないため、他の設定に影響を波及させません。
再発を防ぐ運用
手動編集そのものを減らすのが一番の予防策です。MCPサーバーの追加・削除は claude mcp add / claude mcp remove を使い、~/.claude.json を直接開かないようにします。CLIコマンド経由の変更はClaude Code自身が書き込むため、構文エラーが混入しません。
どうしても手動編集が必要なとき(社内スクリプトで複数マシンに設定を配布する場合など)は、直接上書きせず一時ファイルに書き出してから python3 -m json.tool で検証し、問題なければ mv で置き換える手順にします。書き込み途中でプロセスが落ちても、壊れるのは一時ファイルだけで済みます。
定期的なバックアップも有効です。~/.claude.json はログイン情報やMCPサーバーの認証トークンを含むため、バックアップ先はローカルディスクに限定し、Gitリポジトリやクラウド同期フォルダには置かないようにしてください。
よくある質問
バックアップを取ってから直せるか
~/.claude.json はプレーンなJSONファイルなので、直す前に cp ~/.claude.json ~/.claude.json.bak でコピーを残せます。手順1の自動復旧でリセットされた場合、バックアップからMCPサーバー設定などを見比べながら手動で再登録できます。
CLAUDE_CONFIG_DIRを設定していると場所が変わるか
CLAUDE_CONFIG_DIR は設定ディレクトリ(既定は ~/.claude)を上書きする環境変数で、配下のsettingsやセッション履歴、プラグインの保存先もこのディレクトリに従います。この変数を設定している環境では、既定の ~/.claude.json だけを見て「壊れていない」と判断せず、echo $CLAUDE_CONFIG_DIR で現在のシェルの設定を確認したうえで、実際に使われている設定ディレクトリ側の状態を確認してください。空であれば既定のディレクトリが対象です。
claude importを使わない通常起動でも同じエラーが出るか
通常の claude 起動では、このエラー文言そのものは出ません。~/.claude.json が壊れていれば代わりに復旧ダイアログが表示され、その場で直すか確認されます。エラーとして表示されるのは claude import サブコマンドを直接呼んだときだけです。
手で編集する以外に壊れる原因はあるか
ディスク容量が尽きた状態で書き込みが発生した、強制終了(kill -9やOSのクラッシュ)で書き込み途中のファイルが残った、複数のプロセスが同時に同じファイルへ書き込もうとした、のいずれかでも壊れます。手で編集していなくても起こりうるので、claude import 以外の場面で急に設定が消えたように見えたときも、まず ~/.claude.json の構文を疑ってください。
プロジェクトごとの許可ツールとは具体的に何を指すか
Claude Codeは、あるプロジェクトで特定のBashコマンドやツールの実行を一度許可すると、次回以降そのプロジェクトを開いたときに同じ確認を省略します。この「一度許可した記録」が ~/.claude.json のプロジェクトエントリに保存されています。ファイルがリセットされると、プロジェクトごとの許可記録もまとめて失われ、以前は聞かれなかった操作の確認が復活します。動作に支障はなく、確認の手間が一時的に増えるだけです。
関連して確認したい設定
~/.claude.json と settings.json の役割分担を押さえておくと、似た症状の切り分けが早くなります。settings.json の全項目はClaude Code settings.json完全ガイド、インストール直後に起きやすいエラーの切り分けはClaude Codeインストールエラーの切り分けチェックリスト、起動時エラー全般の一覧はClaude Codeでよくあるエラー10選にまとめています。