こんにちは、エンジニアのオオバです。

お悩みさん
お悩みさん
  • Claude CodeとCodexの利用回数をログから数えたい
  • 数えた件数が合っているか不安
  • claude -pで要約させると変な出力になる
  • オオバ
    オオバ
    本記事ではこれらの悩みを解決します。

    AIでどれだけ作業したかを、あとから振り返れるようにしたい。

    そう思って、Claude Code と Codex のローカルログを遡って集計する仕組みを作りました。

    数えるだけなら簡単そうに見えます。

    ところが実際にやってみると、件数がズレる罠が3つありました。

    Codexの取り込みセッションを除外し、新旧2つのログ形式を両方読み、要約用のclaude -pはフックと設定を切って呼ぶ

    先に結論をまとめます。

    AI利用ログを集計するときの罠と対策

    ①CodexアプリはClaude Codeのセッションを取り込んで自分のログにも保存する → 取り込みスレッドを除外し、元のClaudeログで数える

    ②Codexのユーザー発言の記録形式が途中で変わっていた → 新旧両方の形式に対応し、両方入っている版では片方だけ使う

    ③要約用のclaude -pで自分のStopフックが発火した → 設定・ツール・MCP・スラッシュコマンドを切って呼ぶ

    ここから順番に説明します。

    →11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら

    やりたかったこと:AI活用ログを日別に見る

    目的は「AIで作った・活用できた記録」を自動で溜めることです。

    データの元は次の2か所のローカルログ。

    ここを遡って、日別に「何セッション・何プロンプト・何の成果」があったかを集計しました。

    集計結果は Mac mini の画面で見られるようにしています。

    AI活用ログの画面(草・日別のClaude/Codex内訳)

    AI活用ログの画面(草・日別のClaude/Codex内訳)

    上にセッション数・成果・プロンプト数・活用した日・連続日数のカード、真ん中に 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 側の集計から除外しました。

    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 "..."  
    

    それぞれの役割は次のとおりです。

    結果、入力は 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 で記録されます。

    これらは人間のプロンプトではないので除外しました。

    逆に、/add-task のようなスキル呼び出しは、そのままだとプロンプトとして拾えません。

    こちらは <command-name> タグから依頼として復元しています。

    BtoBは件数だけ

    BtoB 案件のセッションは件数だけ数えて、タイトルは伏せています。

    結果

    2025年4月から集計して、次の数になりました。

    自分で使っている感覚よりも、数字で見ると「こんなに使ってたんだ」と驚きます。

    罠1と罠2を直す前は、Codex 側に Claude の作業が混ざる一方で、Codex 自身のプロンプトは取りこぼしていました。

    まとめ:AI利用ログは「同じ作業が2回入っていないか」と「形式が変わっていないか」を疑う

    Claude CodeとCodexのログでAI利用回数を数えるときの罠

    ①CodexアプリはClaude Codeのセッションを取り込む。imported_thread_idやexternal-import-turn-で見分けて除外する

    ②Codexは2026年春頃までユーザー発言をitem_completedで記録していた。新旧両方を読み、両方ある版は片方だけ使う

    ③claude -pでもStopフックは発火する。設定・ツール・MCP・スラッシュコマンドを切ると、コストも約270分の1になった

    ログを数えるだけの仕組みでも、ツール同士の取り込みやバージョンアップでの形式変更で、数字は簡単にズレます。

    画面に出た数字が感覚と合わないときは、まずログの中身を1本開いて見るのがおすすめです。

    同じように AI の利用ログを集計しようとしている人の参考になれば嬉しいです。

    オススメ記事
    検証環境