こんにちは、エンジニアのオオバです。
AIでどれだけ作業したかを、あとから振り返れるようにしたい。
そう思って、Claude Code と Codex のローカルログを遡って集計する仕組みを作りました。
数えるだけなら簡単そうに見えます。
ところが実際にやってみると、件数がズレる罠が3つありました。
Codexの取り込みセッションを除外し、新旧2つのログ形式を両方読み、要約用のclaude -pはフックと設定を切って呼ぶ
先に結論をまとめます。
①CodexアプリはClaude Codeのセッションを取り込んで自分のログにも保存する → 取り込みスレッドを除外し、元のClaudeログで数える
②Codexのユーザー発言の記録形式が途中で変わっていた → 新旧両方の形式に対応し、両方入っている版では片方だけ使う
③要約用のclaude -pで自分のStopフックが発火した → 設定・ツール・MCP・スラッシュコマンドを切って呼ぶ
ここから順番に説明します。
→11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら
やりたかったこと:AI活用ログを日別に見る
目的は「AIで作った・活用できた記録」を自動で溜めることです。
データの元は次の2か所のローカルログ。
- Claude Code:
~/.claude/projects - Codex:
~/.codex/sessions
ここを遡って、日別に「何セッション・何プロンプト・何の成果」があったかを集計しました。
集計結果は Mac mini の画面で見られるようにしています。

上にセッション数・成果・プロンプト数・活用した日・連続日数のカード、真ん中に GitHub の草のような日別ヒートマップ、下に直近90日のセッション数を Claude Code と Codex で色分けした棒グラフを並べています。
この画面を作る途中で、3回ハマりました。
罠1:CodexがClaude Codeのセッションを取り込んでいた
起きたこと
Codex のログを数えたら、思っていたより多い。
調べてみると、Codex アプリは Claude Code のセッションを取り込んで、自分のログ(rollout-*.jsonl)にも保存していました。
MacBook の Codex ログは951本。
そのうち 396本が Claude Code からの取り込み分 でした。
4割ほどが Claude の作業だったことになります。
そのまま数えると、Claude Code で作業した分が Claude 側と Codex 側の両方に入ってしまいます。
取り込みセッションの目印
取り込み分は、次の目印で見分けられました。
~/.codex/external_agent_session_imports.jsonにimported_thread_idとして載っているturn_idがexternal-import-turn-で始まる- 応答が
[external_agent_tool_call: ...]で始まる
対策
取り込みスレッドは Codex 側の集計から除外しました。
Claude Code の作業は、元の Claude Code のログだけで数えます。
ログを複数のツールから集めるときは、同じ作業が別のツールのログにも入っていないか を最初に疑った方がいいですね。
罠2:Codexのログ形式が途中で変わっていた
起きたこと
今度は逆に、Codex の利用が少なすぎました。
ユーザーの発言は event_msg の user_message として記録されています。
最初はここだけを数えていました。
ところが2026年春頃までの Codex アプリは、ユーザーの発言を item_completed(item.type が UserMessage)で記録していたんです。
user_message だけを見ると、530本のセッションがプロンプト0件 になりました。
結果として、Codex の利用が実際の4分の1以下に見えていました。
気づかないままだと、「最近 Codex をあまり使っていない」と読み違えるところでした。
対策
新旧両方の形式からユーザーの発言を拾うようにしました。
ただし、両方の形式が入っている版もあります。
両方を足すと、今度はプロンプトが二重に数えられてしまう。
そこで、両方入っている版では片方だけを使うようにしています。
ログ形式はツールのバージョンアップで黙って変わります。
古いログまで遡って集計するなら、期間ごとに件数が極端に落ち込んでいないか を見ておくと気づきやすいです。
罠3:要約用のclaude -pで自分の終了フックが走った
起きたこと
各セッションの成果を要約するために、claude -p で Claude Code をヘッドレスで呼んでいました。
返ってくるのは JSON のはず。
ところが出力は「finalizing-changes: 変更なし → スキップ」でした。
原因
僕の Claude Code には、作業の終わりに作業記録を促すプロンプトを出す Stop フックを入れています。
この Stop フックが claude -p のヘッドレス実行でも発火していました。
フックのせいで2ターン目に入り、欲しかった要約の結果が上書きされていたんです。
さらに、UserPromptSubmit フックで動かしているタスク管理(AI TASK BOARD)にも、要約の依頼がタスクとして登録されていました。
コストも高かった
調べてみると、お金の面でも問題がありました。
1回の要約で、入力が約30万トークン(キャッシュ込み)。
金額にして 1回 $0.43 かかっていました。
CLAUDE.md・ルール・ツール定義を毎回全部読み込んでいたのが原因です。
解決:設定とツールを切ってclaude -pを呼ぶ
次のオプションを付けて呼ぶようにしました。
claude -p \
--no-session-persistence \
--setting-sources project \
--tools "" \
--strict-mcp-config \
--disable-slash-commands \
--system-prompt "..."
それぞれの役割は次のとおりです。
--no-session-persistence: 要約の呼び出しをセッションとして保存しない。保存されると、次の集計で自分の要約呼び出しまで数えてしまう--setting-sources project: 読み込む設定をプロジェクトのものに絞る。ユーザー設定に入れているフックを読ませない--tools "": ツールを渡さない--strict-mcp-config: 指定した MCP 設定だけを使う(指定していないので MCP は無し)--disable-slash-commands: スキルやスラッシュコマンドを無効にする--system-prompt: 既定のシステムプロンプトを、要約用の短いものに置き換える
結果、入力は 777トークン、1回 $0.0016 になりました。
約270分の1です。
出力も、狙いどおり JSON だけが返るようになりました。
--bareは使えなかった
最初は --bare で余計なものをまとめて切ろうと考えました。
ところが --bare は OAuth の認証を読まず、API キーが必須です。
僕は OAuth でログインして使っているので、--bare は選べませんでした。
そのため、上のようにオプションを1つずつ指定しています。
その他の判断
件数の数え方で決めたことも残しておきます。
1日の件数は「その日に人間のプロンプトがあったセッション数」
最初はセッションの開始日で数えようとしていました。
ところが Claude デスクトップは、1つのセッションを何日も使い続けます。
開始日で数えると、2日目以降の作業が消えて少なく出てしまう。
そのため、その日に人間のプロンプトが1件でもあったセッションを、その日の1件として数えています。
type=userでも人間の発言とは限らない
Claude Code のログでは、次のものも type=user で記録されます。
- ツールの実行結果
- task-notification
[Request interrupted]
これらは人間のプロンプトではないので除外しました。
逆に、/add-task のようなスキル呼び出しは、そのままだとプロンプトとして拾えません。
こちらは <command-name> タグから依頼として復元しています。
BtoBは件数だけ
BtoB 案件のセッションは件数だけ数えて、タイトルは伏せています。
結果
2025年4月から集計して、次の数になりました。
- 約1,900セッション
- 約8,000プロンプト
- AIを活用した日は225日
- 連続19日
自分で使っている感覚よりも、数字で見ると「こんなに使ってたんだ」と驚きます。
罠1と罠2を直す前は、Codex 側に Claude の作業が混ざる一方で、Codex 自身のプロンプトは取りこぼしていました。
まとめ:AI利用ログは「同じ作業が2回入っていないか」と「形式が変わっていないか」を疑う
①CodexアプリはClaude Codeのセッションを取り込む。imported_thread_idやexternal-import-turn-で見分けて除外する
②Codexは2026年春頃までユーザー発言をitem_completedで記録していた。新旧両方を読み、両方ある版は片方だけ使う
③claude -pでもStopフックは発火する。設定・ツール・MCP・スラッシュコマンドを切ると、コストも約270分の1になった
ログを数えるだけの仕組みでも、ツール同士の取り込みやバージョンアップでの形式変更で、数字は簡単にズレます。
画面に出た数字が感覚と合わないときは、まずログの中身を1本開いて見るのがおすすめです。
同じように AI の利用ログを集計しようとしている人の参考になれば嬉しいです。

この記事が気に入ったらフォローしよう
- Claude Code 2.1.29x
- Codex 0.162
- Python 3.9
