この記事でわかること
- Claude Code の会話ログ(
.jsonl)の保存場所 - 古いログが消えている範囲を日付別に確認するコマンド
- 保持日数を決める設定
cleanupPeriodDaysの既定値と変え方 - 保持日数を変えない場合に、集計がぶれないようにする方法
何が起きたか
Claude Code の会話ログから利用状況を集計しています。「過去30日」の条件で出した件数が640件。数日後に同じ条件で再実行すると632件でした。
集計スクリプトの打ち切りを疑って修正しましたが変わらず、3通りの数え方を試しても結果は632で一致しました。スクリプトは正しく、集計対象のログファイル自体が消えていたのが原因です。
ファイルが無い日は0件として扱われるだけなので、エラーも警告も出ません。気づく手がかりは「合計が減った」ことだけでした。
ログの保存場所
~/.claude/projects/<プロジェクト>/<セッションID>.jsonl
1セッション1ファイルで、会話の全文(入力・ツール呼び出し・その結果)が入っています。
消えている範囲を確認する
更新日ごとのファイル数を数えます(GNU find 前提。Windows なら Git Bash で動きます)。
cd ~/.claude/projects
find . -name "*.jsonl" -printf "%TY-%Tm-%Td\n" | sort | uniq -c
2026年9月22日に実行した結果です。
1 2026-08-01
1 2026-08-06
86 2026-08-23
87 2026-08-24
195 2026-08-25
43 2026-08-26
(中略)
247 2026-09-21
9 2026-09-22
8/6〜8/23 が空白で、8/23 は実行日のちょうど30日前です。毎日使っていた期間なので、削除されたと判断できます。8/1・8/6 の2本は使わなくなった古いプロジェクトのフォルダに残っていたもので、30日を過ぎても消えないケースがあることもわかりました。
原因:cleanupPeriodDays(既定30日)
公式ドキュメントの仕様は次の通りです。
| 項目 | 内容 |
|---|---|
| 動作 | 保持期間を安全に判定できる場合に限り、指定日数より古いファイルを削除 |
| 既定値 | 30日 |
| 最小値 | 1日 |
0 を指定 |
検証エラー |
設定ファイルに書かなくても既定の30日で動いています。 私の環境では、ユーザー側・プロジェクト側のどちらの settings.json にも cleanupPeriodDays は書かれていませんでした。設定ファイルを探しても原因が見つからないのはこのためです。
対処1:保持期間を延ばす
~/.claude/settings.json に追記します。
{
"cleanupPeriodDays": 90
}
延ばす前に確認しておきたいことが2つあります。
容量
du -sh ~/.claude/projects
# 2.9G /c/Users/.../.claude/projects
私の環境では30日分で2.9GB。90日なら単純計算で3倍近くになります。
中身が平文であること
ログには、貼り付けた設定値・コマンド出力・エラーメッセージがそのまま残ります。保持期間を延ばすと、それだけ長く平文の記録を手元に置くことになります。
なお、同じ設定を複数の階層に書くとどれが効いているか追いにくくなるので、書く場所は1か所にするのが無難です。
対処2:延ばさずに、集計側を合わせる
私はこちらを選びました。
-
集計の窓を保持期間より短くする(30日 → 14日)
30日窓は常に「消えかけの端」を含むため、前回の値と比べられません。 -
集計結果を別ファイルに保存する
元ログが消えても、結果が残っていれば時系列で比較できます。
作業記録を外部のノートに残す仕組みはもともと使っていましたが、残していたのは「何をしたか」の文章で、「何件だったか」の数値ではありませんでした。数値は数値として残しておく必要がありました。
日数で消えないもの
| 対象 | 扱い |
|---|---|
~/.claude/history.jsonl(入力履歴。↑キー/Ctrl+R で呼び出すもの) |
日数による削除の対象外。プロジェクト単位の整理は claude project purge
|
| Claude Desktop / Cowork で開始(または最後に継続)したセッション | 既定は無期限。期限を付けるなら desktopSessionCleanupPeriodDays
|
| 保持期間を安全に判定できないファイル | 30日を過ぎても残ることがある |
「30日より前は必ず無い」ではなく「30日より前は当てにならない」と考えておくのが安全です。
まとめ
- 会話ログは
cleanupPeriodDays(既定30日・書かなくても有効)で自動削除される - 削除範囲は
find ... -printf "%TY-%Tm-%Td\n" | sort | uniq -cで確認できる - 延ばすなら容量と平文の長期保存を先に検討する
- 延ばさないなら、集計窓を保持期間の内側に取り、結果を別に保存する
件数が減ったとき、数え方より先に「数える対象がまだ残っているか」を確かめると早く原因に届きます。
参考: Claude Code 公式ドキュメント「Explore the .claude directory」