Claude CodeのdiffTool設定でIDEと端末の差分表示を切り替える
Claude Codeの設定キーdiffToolは、編集提案の差分をIDEのビューアーか端末のどちらに出すかを切り替えます。設定場所と/configでの操作手順、任意の外部ツールを指定する仕組みではない点を扱います。
diffToolでできること
diffTool は、Claude CodeがEditやWriteツールでファイル変更を提案するときに、その差分をどこに表示するかを決める設定キーです。値は auto と terminal の2つだけで、既定値は auto です。
auto はVS CodeまたはJetBrainsのIDEに接続しているとき、そのIDE内蔵のdiffビューアーで変更案を開きます。terminal を選ぶと、IDEに接続していてもターミナル上に差分を表示したままにします。設定できるのはこの2択だけです。gitの difftool のように、vimdiffやKDiff3などの任意の外部プログラムをコマンドとして登録する仕組みではありません。
SSH接続したリモート環境や画面共有しながらのペアプログラミングでは、IDEに接続していてもターミナル側の表示に統一したい場面があります。terminal はそうした用途のために用意された選択肢です。
diffToolが効くのはどの場面か
diffTool が意味を持つのは、Claudeがファイル編集の許可を求める場面に限られます。VS Code拡張では、プロンプト欄下のパーミッションモードによって挙動が変わります。Autoモードでは分類器が大半の操作を自動判断し、Edit automatically モードではClaudeが許可を求めずに編集を進めます。どちらも許可を求める一連の流れ自体が発生しないため、diffTool の値による見た目の差は出ません。Plan モードは、Claudeが計画を説明し承認を待ってから変更に入る段階を挟むため、実際の編集はそのあとに選んだモード次第になります。
差分と許可プロンプトが並んで出るのはManualモードです。公式ドキュメントは「ファイル編集とほとんどのシェルコマンドの前にClaudeが許可を求める」モードと説明しています。Claudeが編集を提案すると、オリジナルと変更案の比較が表示され、受け入れ・拒否・指示のやり直しを選べます。VS Codeのdiffビュー内で提案内容を直接編集してから受け入れることもでき、その場合Claudeは自分の提案どおりにファイルが確定していないことを認識します。diffTool を切り替えて効果を確かめたいときは、まずパーミッションモードが確かにManualになっているかを確認する必要があります(VS Code拡張の基本的な使い方はパーミッションモードの切り替え手順も扱っています)。
diffToolを設定する2つの方法
設定を変えるには /config を使う方法と、設定ファイルを直接編集する方法があります。/config はその場で反映され操作の手間も少ないため基本の選択肢になり、設定ファイルの直接編集は複数マシンへの展開やスクリプトからの一括設定に向いています。
まず /config から変える場合です。VS CodeまたはJetBrainsのターミナルからClaude Codeを起動するか、外部ターミナルから /ide でIDEに接続してから /config を開きます。/ide を実行したとき、起動中のIDEにプラグインが入っていなければ、Claude Codeがプラグインのインストールまで進め、あとはIDE側の再起動を求めるだけで済みます。再起動して接続が確立すると、次に開いた /config にDiff tool欄が現れます。
外部ターミナルを使うたびに /ide を打つのが手間なら、autoConnectIde を true にしておくと外部ターミナルから起動したときも自動でIDEに接続します(1回だけ挙動を変えたいときは環境変数 CLAUDE_CODE_AUTO_CONNECT_IDE の方が優先されます)。autoConnectIde も diffTool と同じ Global config 区分のキーで、~/.claude.json に保存されます。
claudeClaude Codeのセッション内で /config を実行すると設定画面が開きます。
/config設定一覧からDiff toolを選び、auto か terminal を選択します。この項目はIDEに接続されているときだけ画面に現れます。接続していない外部ターミナルでは項目自体が表示されません。/config から選んだ値は、そのセッション内ですぐに反映されます。
もう一つの方法は、設定ファイルを直接書き換えることです。diffTool は ~/.claude.json に書く「グローバル設定」で、.claude/settings.json や .claude/settings.local.json には書けません。
{
"diffTool": "terminal"
}Claude Codeが変更を自動で検知して読み直すのは .claude/settings.json のようなユーザー・プロジェクト・ローカル・管理設定のファイル群で、diffTool が属する ~/.claude.json はこの監視対象に含まれません。手編集で diffTool を書き換えたときは、確実に反映させるためにセッションを再起動しておくのが安全です。
CLIの --settings フラグでJSONを直接渡してもdiffToolは変わりません。--settings はユーザー設定ファイルが書けるキーまでしか上書きできず、グローバル設定のキーは対象外です。diffTool を変えるなら /config を使うか、~/.claude.json を直接編集するかの二択になります。
公式ドキュメントの設定一覧は、キーごとに書き込める先を User Project Local Managed Global config の5区分で示しており、diffTool は Global config 区分だけに属します。
autoとterminalの動作を表で確認する
| 値 | 動作 | 既定 |
|---|---|---|
auto | 動作VS Code / JetBrainsのIDEに接続していれば、そのIDEのdiffビューアーで変更案を開く | 既定✓ |
terminal | 動作IDEへの接続有無にかかわらず、ターミナル上に差分を表示する | 既定— |
CLIだけで作業していてIDEに接続していない場合は、差分がターミナルに表示されます。
設定ファイルの置き場所を間違えると効かない
diffTool はプロジェクトの .claude/settings.json に書いても無視されます。Claude Codeがグローバル設定として読むのは ~/.claude.json だけで、チームで共有する設定ファイル側に置いても他のメンバーには反映されません。ユーザーごとに自分の ~/.claude.json で設定する項目だと考えておくと迷いません。
同じ理由で、autoConnectIde や autoInstallIdeExtension のような他のIDE関連設定も同じ扱いです(VS Code拡張の設定項目にはこの2つを含む拡張機能側の設定がまとまっています)。Claude Codeや /config がこれらのキーの大半を代わりに書き込むため、手で直接編集することもできますが、通常は /config に任せておけば十分です。設定を変えたのに反映されていないように見えたら、~/.claude.json の中身を読む前に /config のDiff tool欄の表示値を確認すると、意図した値と違うことから書き込み先の取り違えだとすぐに切り分けられます。
diffToolは/diffコマンドの表示先を変えない
diffTool と名前が似ている /diff コマンドは、別の仕組みです。/diff はいまの作業ツリーの変更点を見返すための操作で、フルスクリーン表示ではdiffパネルを会話の横に開き、クラシック表示ではdiffビューアーをプロンプトの位置に開きます。どちらもClaude Code自身の画面内に表示され、diffTool の値には影響されません。
diffTool が対象にしているのは、Claude Codeがファイルの変更を提案し、実行許可を求める場面の差分表示だけです。読み返し用の /diff と、変更提案時の diffTool は別の設定だと切り分けて考える必要があります。
/diff のdiffパネルは、フルスクリーン表示・gitリポジトリ・ターミナル幅110列以上・Claude Code v2.1.260以降がそろったときだけ開き、条件を満たさない環境ではクラシックなdiffビューアーに切り替わります。パネルでは比較対象を切り替えられ、その選択も diffTool の値とは無関係です。
VS CodeとJetBrainsでの見え方
VS Code拡張が接続されている状態で diffTool が auto のとき、Claudeがファイル編集を提案すると、オリジナルと変更案を左右に並べたビューが開き、その場で許可・拒否や修正を選べます。ビュー内で提案内容を直接編集すると、Claudeはその変更を認識したうえで続きを進めます。
JetBrainsプラグインでも仕組みは同じで、Diff tool を auto にするとIDEのdiffビューアーで変更案が開き、terminal にするとターミナル表示に戻ります。この設定項目はプラグインの Settings → Tools → Claude Code ではなく、Claude Code本体の /config 側にあります。JetBrains側の手順もCLIと同じで、プラグインが動くターミナルから claude を起動するか、外部ターミナルから /ide で接続してから /config を開き、Diff toolの欄を切り替えます。VS Code拡張とJetBrainsプラグインのどちらでも、値の意味と切り替え先は共通です(JetBrainsプラグインの導入手順は接続の確認方法から扱っています)。
差分の表示先ではなく見た目を変える設定
diffTool と混同しやすいものに、差分の色付けを変える設定があります。syntaxHighlightingDisabled の既定値は false で、true にするとターミナルのdiff・コードブロック・ファイルプレビューすべての構文ハイライトを無効にできます。diffだけを対象にしたいときは、環境変数 CLAUDE_CODE_SYNTAX_HIGHLIGHT を false にする方法もあります。どちらも「差分をどこに出すか」を決める diffTool とは役割が異なり、「差分をどう見せるか」を調整する設定です。ターミナルの配色とdiffの色が干渉する場合はこちらを調整し、表示先そのものを変えたいときは diffTool を使うと目的に合った設定にたどり着けます。
書き込める場所も違います。syntaxHighlightingDisabled は Any file 区分で、ユーザー・プロジェクト・ローカル・管理設定のどのファイルにも書けます。プロジェクトの .claude/settings.json にチーム共通の値として置いても構いません。一方の CLAUDE_CODE_SYNTAX_HIGHLIGHT は環境変数なので、設定ファイルに書き込む値ではなく、シェルやセッションの起動時に指定して使います。恒常的にチームへ配りたいなら syntaxHighlightingDisabled、その場だけ手元で切り替えたいなら環境変数、という使い分けになります。
まとめ
diffTool はVS Code・JetBrainsのIDEに接続しているときに、Claudeの変更提案をIDE内で見るかターミナルで見るかを選ぶための設定です。設定できる値は auto と terminal の2つだけで、外部の差分プログラムを指定する機能ではありません。/config からいつでも切り替えられます。
普段ターミナルだけで作業している人がこの設定を気にする場面はほとんどありませんが、IDEとCLIを行き来するチームでは、レビューのしやすさに直結する項目です。IDEのdiffビューアーに慣れているならauto、ターミナルの表示に統一したいならterminalを選ぶという単純な基準で決めて構いません。