Claude Code(デスクトップアプリ)を使っていると、サイドバーのスレッド名がすべて英語で生成されます😇
「GAS spreadsheet date navigation」とか「Fix SSH permission denied error」とか。
日本語にしたくていろいろ試した結果、過去スレッドが全部消えました。
タイトル問題は未解決です。ご存知の方はコメントで教えてください。
先にまとめ
| 試した方法 | 結果 |
|---|---|
settings.json に "language": "japanese"
|
❌ 応答言語は変わるがスレッド名には効かない |
SessionStart フックで日本語指示を注入 |
❌ Windows環境のCP932文字化けで機能せず |
~/.claude/CLAUDE.md に指示を記載 |
△ 一定の効果あり。ただし完全ではない |
~/.claude/projects/.../*.jsonl の aiTitle を書き換え |
❌ UIが参照していないフィールドだった |
AppData/Roaming/Claude/claude-code-sessions/local_*.json の title を書き換え |
❌ スレッドがアプリから消えた |
現時点でのベストプラクティス: ~/.claude/CLAUDE.md にプロンプト指示を書く(完全ではないが最も安全)
やりたかったこと
Claude Codeのサイドバーに表示されるスレッド名を、自動で日本語生成させたい。
英語でも困るわけではないのですが、同僚に画面を見せるときや、あとで探すときに日本語のほうが圧倒的に便利です。設定1つで解決できそうなものですが、これが意外と一筋縄ではいかない。
試したこと① language 設定
まず思いつくのはこれ。Claude Codeの settings.json に以下を追記します。
{
"language": "japanese"
}
設定後にアプリを再起動しましたが、スレッド名は依然として英語のままでした。
language 設定はClaudeの応答言語(本文)には効きますが、スレッド名の自動生成ロジックとは別の制御になっているようです。
試したこと② SessionStart フックで指示を注入
次に試したのが SessionStart フックです。新しいセッションが始まったときに、モデルのコンテキストへ「スレッド名は日本語で」という指示を流し込む作戦です。
{
"hooks": {
"SessionStart": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "echo '{\"type\": \"system\", \"content\": \"スレッド名は必ず日本語で生成してください\"}'"
}
]
}
]
}
}
これも機能しませんでした。原因はWindows環境特有の問題で、PowerShellのデフォルトエンコーディング(CP932)のせいで日本語が文字化けし、モデルに正しく届いていませんでした。
フックを削除してなかったことにしました。
試したこと③ CLAUDE.md に指示を書く(現在のベストプラクティス)
現在も使っている方法です。ユーザーレベルのグローバル設定ファイル ~/.claude/CLAUDE.md に以下を記載します。
# グローバル設定
## スレッド名(セッションタイトル)
新しい会話のスレッド名・セッションタイトルを自動生成するときは、**必ず日本語**で生成してください。英語のタイトルは使わないでください。
CLAUDE.md は全プロジェクト共通でモデルに読み込まれるシステムプロンプトです。language 設定と違いプロンプト層での指示なので、スレッド名生成にも届きます。
ただし完全ではありません。この記事を書いているセッション自体、タイトルが英語で生成されています("Write Qiita article on...")。効いたり効かなかったりするのが正直なところです。
セッション情報の保存場所を調べた
「直接書き換えれば確実では?」と思い、保存場所を調査しました。
最初に見つけた(ダミーの)場所
~/.claude/projects/<project-hash>/<session-id>.jsonl
このjsonlファイルをのぞくと aiTitle というフィールドがあり、スレッド名らしきものが入っています。「これだ!」と思い9件を日本語に書き換えましたが、UIは変わりませんでした。
本当の保存場所
試行錯誤の末に見つけたのがここです。
%APPDATA%\Claude\claude-code-sessions\<org-id>\<ws-id>\local_<session-id>.json
Windowsの場合の実パスは以下になります。
C:\Users\<ユーザー名>\AppData\Roaming\Claude\claude-code-sessions\<org-id>\<ws-id>\local_<session-id>.json
各ファイルの中身はこんな感じです。
{
"sessionId": "local_xxxx-xxxx-xxxx-xxxx",
"cliSessionId": "xxxx-xxxx-xxxx-xxxx",
"cwd": "C:\\Users\\<ユーザー名>\\Desktop\\project",
"createdAt": 1778551510584,
"lastActivityAt": 1778552170476,
"model": "claude-sonnet-4-6",
"title": "Write Qiita article on thread name investigation",
"titleSource": "auto",
"permissionMode": "acceptEdits",
"completedTurns": 4
}
title フィールドがサイドバーに表示されるスレッド名の実体です。titleSource: "auto" は自動生成されたことを示しています。
macOSの場合は以下のパスと思われますが、筆者環境がWindowsのため未検証です。
~/Library/Application Support/Claude/claude-code-sessions/...
ハマり:aiTitle と title は別物
| フィールド | 場所 | UIへの影響 |
|---|---|---|
aiTitle |
~/.claude/projects/.../*.jsonl |
❌ UIが参照していない |
title |
AppData/Roaming/Claude/claude-code-sessions/local_*.json |
✅ これがサイドバー表示 |
最初に aiTitle を書き換えて無意味だったのは、UIが全く別の場所を見ていたからでした。
JSON を直接書き換えたら過去スレッドが消えた
title の場所を特定できたので、39件のJSONファイルを一括で日本語タイトルに書き換えました。Claude Codeアプリを再起動すると……サイドバーから過去スレッドが全部消えました。
原因の特定まではできていませんが、おそらく AppData/Roaming/Claude/IndexedDB や Local Storage などのElectronキャッシュとJSONファイルの間で整合性が崩れたのだと思います。Electronアプリが内部的にLevelDB等を使ってインデックスを持っていて、JSONを直接書き換えてもそちらに追随できなかった可能性が高いです。
過去スレッドが消えたのは痛手でしたが、ログ自体(~/.claude/projects/ 配下のjsonl)は残っていたため、作業内容は失われませんでした。
まとめ
現時点のベストは ~/.claude/CLAUDE.md への記載です。完全ではないですが、少なくとも「新しいスレッドが日本語になりやすくなる」効果は感じています。
## スレッド名(セッションタイトル)
新しい会話のスレッド名・セッションタイトルを自動生成するときは、必ず日本語で生成してください。
JSONの直接書き換えは絶対にやめましょう。スレッドが消えます。
Claude Codeはまだプレリリース段階。今後のアップデートで公式に言語設定が効くようになることを期待しつつ、もっといい方法をご存知の方はコメントで教えてください🙏
GMOコネクトでは一緒にはたらく仲間を募集しています。
https://www.gmo-connect.jp/recruit/