この記事の結論
Claude Codeが日本語の指示を無視して英語で返すときは、language設定・CLAUDE.md・毎回念押しするフックの3段で止めます。3日で6回英語に戻った当社の実例と設定の中身を公開します。
目次6項目
【実践講座】Claude Code 2daysセミナー(第二の脳構築講座)の詳細を見る →
Claude Codeが「日本語で」と言っても英語で返すのは、日本語の指示が強制ではなく、英語の作業結果を大量に読むと引っぱられるためです。まず設定ファイルに "language": "japanese" を入れ、CLAUDE.mdの冒頭にルールを書き、それでも戻るなら毎回の入力時に念押しするフックを足します。
「日本語で」と言っても英語で返ってくる3つの原因
英語に戻る原因は、大きく3つに分けられます。1つ目は、日本語の指示がどこに書いてあっても「守るかどうかをClaudeが判断する指示」でしかないこと。2つ目は、英語のツール出力を大量に読んだ直後に、返答の言語が英語に引っぱられること。3つ目は、会話の中でだけ頼んだ指示が、長い作業の途中で薄れることです。
原因1:日本語のルールは「強制」ではなく「指示」として渡される
CLAUDE.mdとは、Claude Codeが起動時に読み込む、作業ルールを書いておくためのMarkdownファイルです。公式ドキュメントは、CLAUDE.mdを「強制される設定」ではなく「文脈」として扱うと説明しています。書いてあることを毎回必ず実行する仕組みではなく、Claudeが読んで従う指示です。
設定ファイルの language も同じ性質です。languageとは、Claude Codeの返答の言語を決める設定項目です。公式の説明では、Claude Codeはこの値を手を加えずにそのままClaudeへ渡し、「常にその言語で返答する」という指示にします。値の綴りもチェックしないので、japanese を打ち間違えてもエラーは出ません。
つまり「設定したのに英語になる」のは、設定が壊れているのではなく、指示が負けている状態です。
原因2:英語のツール出力を読んだ直後に引っぱられる
Claude Codeは作業の途中で、コマンドの実行結果、エラーメッセージ、英語の公式ドキュメント、ログなどを大量に読みます。当社の記録では、英語に戻りやすかったのは次の3つの場面でした。
- 英語のツール出力や検品結果を大量に読んだ直後
- 複数のエージェントを動かすワークフローが終わった後の、長い完了報告
- セッションを再開した直後や、会話の要約(コンパクト)が走った直後
本文は日本語でも、ツールを呼ぶ合間の短い進捗文や、コマンドの説明文だけが英語になる、という戻り方もよく起きます。短い返事ほど気が抜けて英語になりやすい、というのが当社の実感です。
原因3:会話の中でだけ頼んだ指示は、長い作業で薄れる
チャット欄で「日本語でお願いします」と頼んだだけの指示は、会話の履歴の中にしかありません。公式ドキュメントは、/compact で会話を圧縮した後に指示が消えた場合、その指示は会話の中でしか伝えていなかった可能性がある、と説明しています。プロジェクトの根にあるCLAUDE.mdは、圧縮の後にディスクから読み直されます。
何度言い直しても戻るときは、「言い方が足りない」のではなく、言った場所が会話の中だけになっていないかを疑ってください。
原因と対処の早見表
| 症状 | 主な原因 | まずやる対処 |
|---|---|---|
| 最初から英語で返ってくる | 言語の指定がどこにも無い | 設定ファイルに language を入れる |
| 途中から英語に戻る | 英語のツール出力に引っぱられる | フックで毎回の入力時に念押しする |
| 圧縮・再開の後から英語になる | 会話の中でだけ頼んでいた | CLAUDE.mdにルールを書く |
| 本文は日本語、進捗文や説明文だけ英語 | ルールの対象が本文だけになっている | ルールに対象(進捗文・説明文・選択肢)を列挙する |
| CLAUDE.mdに書いたのに守られない | ファイルが長く、ルールが埋もれている | 日本語のルールを冒頭に短く置く |
language設定・CLAUDE.md・フックで英語返答を止める手順
対処は、軽いものから順に3段で重ねます。1段目の設定だけで直る人もいますが、長い作業を任せる使い方なら、3段目のフックまで入れておくと安心です。
手順1:settings.jsonに language を入れる
- 自分のパソコン全体に効かせるなら
~/.claude/settings.json、そのプロジェクトだけなら.claude/settings.jsonを開きます。公式ドキュメントでは、languageはどの設定ファイルにも書ける項目です。 - 次の1行を足します。
{
"language": "japanese"
}
- 保存したら、新しいセッションを起動して返答の言語を確かめます(当社では、設定を変えたら必ず新しいセッションで確認しています)。
この設定は、返答の言語だけでなく、音声入力の言語と、自動で付くセッション名の言語にも使われます。音声入力を使っている人は、入力の言語も変わる点に注意してください。
手順2:CLAUDE.mdの冒頭に、日本語のルールを短く書く
- 全プロジェクトに効かせるなら
~/.claude/CLAUDE.md、プロジェクトごとなら、そのフォルダのCLAUDE.mdに書きます。 - ルールはファイルの冒頭に置きます。公式ドキュメントは、1ファイル200行未満を目安にし、長いファイルほど守られにくくなると書いています。
- 「日本語で返答する」だけでなく、対象を列挙します。本文だけでなく、進捗の一言、ツール実行の説明文、選択肢の文言まで書くのがコツです。
- セッションの中で
/contextを実行し、「Memory files」の一覧にそのCLAUDE.mdが入っているかを確かめます。入っていなければ、Claudeはそのファイルを読めていません。
CLAUDE.mdの書き方そのものは、毎回読ませるルールの書き方をまとめた記事で詳しく書いています。
手順3:UserPromptSubmit フックで、毎回の入力時に念押しする
フックとは、Claude Codeの決まったタイミングで、自分で用意したスクリプトを自動で動かす仕組みです。UserPromptSubmitは、こちらが依頼を送った直後、Claudeが処理を始める前に動くフックのイベントです。
- 念押しの文を出力するだけの短いスクリプトを用意します(当社の中身は次の章に載せます)。
- settings.jsonの
hooksに、UserPromptSubmit のフックとして登録します。
{
"hooks": {
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "python3 ~/.claude/hooks/japanese-reply-reminder.py"
}
]
}
]
}
}
(当社の実際の設定ファイルでは、スクリプトの場所をホームフォルダからの絶対パスで書いています。)
- スクリプトは、JSONの
hookSpecificOutputの中のadditionalContextに念押しの文を入れて出力します。公式ドキュメントでは、この文字列はシステムリマインダーとして、フックが動いた時点の会話に差し込まれます。上限は1万字です。 - 新しいセッションで何か依頼を送り、日本語で返ってくるかを確かめます。
UserPromptSubmitは matcher(対象を絞る条件)に対応しておらず、毎回必ず動きます。また、この種類のフックはタイムアウトの既定値が30秒に下げられているので、念押しの文を返すだけの軽い処理にとどめてください。
フック全般の仕組みと、当社が登録しているほかのフックは、Claude Code hooksの使い方と実録にまとめています。
裏方でClaude Codeの英語返答が6回起きて4層の対策にした記録
ここからは、当社(株式会社UrakaTA)で実際に起きたことです。僕の会社はエンジニアのいないマーケティング支援の会社で、広告の集計、LPの修正、記事の下書きなどをClaude Codeに毎日任せています。
何が起きたか:3日で6回、英語で返ってきた
2026年10月1日から10月3日の3日間に、Claude Codeが僕への返答を英語で書いたことが6回ありました。毎回「日本語で」と指摘しても、しばらくすると戻ります。10月2日には、僕からClaudeに「日本語でやって、これは約束して」と念を押したほどです。
社内ルールの記録(2026年10月3日付)には、最も英語に戻りやすい場面として「英語のツール出力や検品結果を大量に読んだ直後」「ワークフロー完了後の長い報告」「セッション再開や要約の直後」の3つを残しています。どれも、こちらが細かく見ていない、作業が一区切りついた場面でした。
最初の対策:毎回念押しするフック(10月2日)
10月1日と2日に計3回指摘した時点で、心がけでは直らないと判断し、10月2日にUserPromptSubmitのフックを入れました。スクリプトの説明文には、導入の理由をこう書いています。長い作業の途中で英語に戻ってしまうので、毎ターン仕組みで思い出させる、という考え方です。
スクリプトの中身は、念押しの文をJSONで出力するだけの20行ほどのPythonです。差し込む文の要点は次のとおりです。
- 返答は必ず日本語で書く
- 対象は、応答本文、ツールを呼ぶ合間の短い進捗文、質問と選択肢、ツール実行の説明文、キャプションまで
- 英語で書きかけたら、その場で日本語に直す
- コード・コマンド・固有名詞はそのままでよい
出力部分の骨組みはこうなっています。
print(json.dumps({
"hookSpecificOutput": {
"hookEventName": "UserPromptSubmit",
"additionalContext": "(日本語で返答する約束と、その対象の一覧)",
}
}, ensure_ascii=False))
ensure_ascii=False を付けているのは、日本語の文をそのまま出力するためです。
フックだけでは戻ったので、4層に広げた(10月3日)
フックを入れた後も、短い返事と、ワークフロー完了後の報告で英語に戻りました。そこで10月3日に、日本語のルールを次の4か所に置き直しました。
- 社内ルールの正本:返答の言語を「最優先・恒久」のルールとして独立した節にし、対象と例外、戻りやすい場面を書いた。CLAUDE.md・エージェントの定義・セッション開始時に読み込む内容は、この正本を写す側と決めた
- プロジェクトのCLAUDE.md:基本姿勢の先頭に、佐藤への出力は例外なくすべて日本語、と1行で書いた
- UserPromptSubmitのフック:10月2日に入れたものをそのまま続ける
- 公式の language 設定:10月3日の深夜1時半ごろ、社内で使っている2台のMacの
~/.claude/settings.jsonに"language": "japanese"を入れた
もう1つ効いたのが、サブエージェント(作業を分担させる別のAI)の扱いを決めたことです。サブエージェントの返却が英語だったら、そのまま貼らずに日本語に直してから僕に出す、というルールを足しました。英語の報告をそのまま貼る流れが、英語に戻るきっかけの1つになっていたためです。
今の状態と、まだ分かっていないこと
language設定を入れた後に、英語の混入が何回あったかは、この記事を書いた2026年10月4日の時点では数えていません。なので「この設定で直った」とは書けません。分かっているのは、フック1つでは足りず、設定・ルール・フックを重ねる必要があった、というところまでです。回数を記録できたら、この記事に追記します。
なお、同じ症状は公式のGitHubにも複数報告されていて、2026年10月4日に確認した時点ではどれも未解決(Open)でした。日本語で使う人の多くが、どこかで一度はぶつかる症状だと考えておくのがよさそうです。
Claude Codeの英語返答を再発させない運用ルール
設定を入れた後に戻さないための、当社の運用ルールです。
- 最初の1文字を書く前に日本語かを確かめさせる:ルールの文に、この一文を入れています。短い相づちほど英語になりやすいためです。
- 戻りやすい場面を名指しで書く:「英語の出力を大量に読んだ直後」「ワークフロー完了後の報告」「再開・要約の直後」を、ルールに具体的に書いています。場面を書くと、その場面で意識して日本語で書き始めるようになります。
- ルールは1か所を正本にし、ほかは写しにする:CLAUDE.md、フック、エージェントの定義に同じルールを置くと、どれかだけ古くなりがちです。当社は社内ルールのファイルを正本と決め、ほかはその写しとして扱っています。
- 会話で指摘したことは、その場でファイルに書く:チャットで「日本語で」と言うだけでは、圧縮や再開で消えます。指摘したら、CLAUDE.mdかルールのファイルに書き足すところまでを1セットにしています。
- 設定を変えたら新しいセッションで確かめる:当社では、設定やルールを変えたら新しいセッションを立ち上げ、短い依頼を1つ送って返答の言語を確かめる決まりにしています。
Claude Codeを使い始めたばかりで、設定ファイルやCLAUDE.mdの置き場所がまだ分からない方は、Claude Codeの使い方ガイドから読むと全体がつかめます。
チームでClaude Codeを日本語で使うときの注意
社内の複数人でClaude Codeを使う場合は、次の点に気をつけてください。
どこに書くかで、効く範囲が変わる。 ~/.claude/settings.json と ~/.claude/CLAUDE.md は自分のパソコンの全プロジェクトに効き、ほかの人には効きません。全員にそろえたいなら、プロジェクトの .claude/settings.json と CLAUDE.md に書き、Gitで共有します。個人だけの好みは、Gitに入れない .claude/settings.local.json や CLAUDE.local.md に分けると、他人の環境を勝手に変えずに済みます。
音声入力とセッション名も変わる。 languageは返答だけでなく、音声入力の言語と自動で付くセッション名の言語にも使われます。英語で音声入力している人がいるチームでは、プロジェクト全体に入れる前に一声かけてください。
フックは自分の権限で動くスクリプトである。 フックは、Claude Codeを動かしている人の権限でコマンドを実行します。チームでフックを共有するときは、スクリプトの中身を必ず読んでから登録してください。今回の念押しのフックは文を出力するだけで、ファイルの書き換えや外部への送信はしていません。
念押しの文に、秘密の情報を入れない。 additionalContextに入れた文は、毎回Claudeの会話に差し込まれます。社内のURL、パスワード、顧客の名前などを念押しの文に書かないでください。毎回送る文なので、短く保つほど使用量の負担も小さくなります。
英語のまま残してよいものを決めておく。 コード、コマンド、ファイル名、エラーメッセージの原文まで日本語に訳されると、かえって作業しにくくなります。当社のルールでは、コード・コマンド・ファイル名・URL・固有名詞・英語原文の引用は例外にしています。この例外も一緒に書いておくと、余計な翻訳が起きません。
よくある質問
languageを設定すれば英語の返答は完全に止まりますか?
完全に止まるとは言えません。公式の説明では、languageの値は「その言語で返答して」という指示としてClaudeに渡されます。CLAUDE.mdと同じく指示の一種なので、長い作業の途中で戻ることがあります。当社は設定に加えて、毎回念押しするフックとCLAUDE.mdのルールを重ねています。
CLAUDE.mdに「日本語で」と書いたのに守られないのはなぜですか?
CLAUDE.mdは強制される設定ではなく、Claudeが読む文脈として扱われるためです。公式ドキュメントも、ファイルが長いほど守られにくくなると書いています。日本語のルールはファイルの冒頭に短く置き、毎回の入力時にフックで同じ内容を差し込むと戻りにくくなります。
チーム全員のClaude Codeを日本語にそろえる方法はありますか?
プロジェクトの.claude/settings.jsonにlanguageを書き、Gitで共有するのが手軽です。languageはどの設定ファイルにも書ける項目です。音声入力の言語と、自動で付くセッション名の言語も同じ値で変わる点は、メンバーに先に伝えておくと混乱しません。
引用元・参考にした記事
- [BUG] Replies drift into English right after reading English tool output, despite a CLAUDE.md rule requiring Japanese; corrections do not hold
- [Model] Repeatedly switches to English despite CLAUDE.md + memory + repeated in-chat instructions to reply only in Japanese
- All settings
- Hooks reference
- How Claude remembers your project