0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

claude code で claude code のコスト集計コマンドを作成

Last updated at Posted at 2025-06-03

概要

claude code(cc) + claude 4 sonnet の実力の片鱗を知るために claude code で command (python)を作成してみました

題材

claude code のログからコストの集計をする

環境

  • mac M3
  • sequoia 15.1
  • claude code 1.0.7
  • claude sonnet 4
  • python 3.13

結果

  • 成果
    • 大きな問題も出ず、期待の成果物を cc のみで作成できた
  • 所要時間
    • pip package として公開するまで約12時間
    • 100$ max plan で api limit にかからない程度に使用
  • 費用
    • 約120$ 換算 // 今回作成したツールで集計

成果物

claude code cost collector

所管

claude max plan

  • claude max は定額利用なので存分に試せる
  • 100ドル / 月 ですが、1日で100$以上は消費し、特に ralte limit にかかりませんでした
  • 肌感覚を得られたのでよかったです

速度

  • 人間より 5 ~ 10倍早い
  • Review で人間がボトルネックになる
    • Review も LLM に任せると良さそうだが...微妙な Review 結果も多い
    • 小さくタスクを切り出すと良さそう

追従性の向上

  • CLAUDE.md に記述しておけば大筋踏襲して動作する
  • 説明が矛盾、曖昧、論理的に変な記述だと混乱する事もある

綺麗に保つルールが必用

  • ドキュメント生成
    • 都度ドキュメントへ高速に反映してくれるので有り難い
    • 明示しておくと agent の判断材料になる
  • コーディングルールを敷く
    • linter、formatter、test など一式、修正毎に必ず走らせ rail を敷くと安心
  • test は必須
    • 意図から外れないための rail になる
    • 大量の test を書いてくれるので有り難い
  • リファクタリングが必用
    • コードベースが汚れていく // 未使用関数が残置するなど
    • ガベージコレクションのルールを敷いた方が良さそう
  • 非公開情報の混入
    • ローカル情報が若干漏れでる可能性もある
    • 網羅するためには、様々観点を CLAUDE.md に記述しておくと良さそう
    • ランダム性もあるので、cc を並列動作させると良さそう
    • think harder などの強い thinking mode で幅広く確認する必用がある
    • 最後は怖いので目視で確認
  • 最初は対話形式が良さそう
    • 上記の様にルールを敷くべき所が明確化してくるため

開発の過程

  • 要件定義
    • 自身の欲しいものを自分でざっと記述
    • gemini に喰わせ不足機能や細かい点を話し合い、ブラッシュアップ
  • 設計
    • gemini に要件定義から基本設計を記述してもらう
  • タスク化
    • 設計から作成手順を起こし小さな単位でタスク化

要件定義、詳細設計

欲しい内容を gemini へ入力する

以下の様なソフトをつくりたいと思っています
コーディングは不要です
全体の実装計画を作成してください
以下の定義の中で不明確になっている dir 探索やデータ構造の解析も加味すること


# 要件定義
## 目的
claude code が用いたコストを日ごとにまとめて表示する

## 利用形態
- linux command の様にコマンド形式で実行できるのが望ましい
- option によって動作が変わるのが望ましい
    - default は日毎の動作
    - 月毎
    - 日毎などにまとめずにすべて個別に出力する
    - session, project 毎に算出
- 出力形式
    - 以下の format の形式が default
    - option で json, yaml, csv 形式での出力に対応する
- ドル, 円
    - 円は option で


## format
┌─────────────┬─────────────┬─────────────┬─────────────┬─────────────┐
│ Date        │ Input       │ Output      │ Total       │ Cost USD    │
├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
│ 2025-05-30  │         787 │      51,384 │      52,171 │       $2.34 │
│ 2025-05-29  │     158,565 │       1,031 │     159,596 │       $0.92 │
│ 2025-05-28  │      88,999 │         157 │      89,156 │       $0.27 │
├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
│ Total       │  10,277,006 │     433,733 │  10,710,739 │     $134.82 │
└─────────────┴─────────────┴─────────────┴─────────────┴─────────────┘


## 解析対象ファイルの所在
以下の辺りにあるので, コマンドはディレクトリを内をくまなく探して該当のデータを収集する必用がある
~/.claude/projects/dummy_project_path/


## データ構造
以下実際の構造を添付する

{
  "uuid": "xxxxxxxxxxxxx",
  "parentUuid": "xxxxxxxxxx",
  "sessionId": "xxxxxxxxxxxx",
  "timestamp": "2025-05-09T12:03:20.000Z",
  "type": "assistant",
  "cwd": "yyyyyyyyyyyyyyyyyyy",
  "originalCwd": "yyyyyyyyyyyyyyyyyyyyyyyyyy",
  "userType": "external",
  "version": "0.2.104",
  "isSidechain": false,
  "costUSD": 0.09317325,
  "durationMs": 7085,
  "message": {
    "id": "msg_bdrk_zzzzzzzzzzzzzzzzzzzzzzzzzzz",
    "type": "message",
    "role": "assistant",
    "model": "claude-3-7-sonnet-20250219",
    "content": [
      {
        "type": "text",
        "text": "dummy text"
      },
      {
        "type": "tool_use",
        "id": "toolu_bdrk_zzzzzzzzzzzzzzzzzzzzzzzzzzzzz",
        "name": "Read",
        "input": {
          "file_path": "/Dummy/Path"
        }
      }
    ],
    "stop_reason": "tool_use",
    "stop_sequence": null,
    "usage": {
      "input_tokens": 4,
      "cache_creation_input_tokens": 24399,
      "cache_read_input_tokens": 0,
      "output_tokens": 111
    }
  },
  "isApiErrorMessage": false,
  "model": "claude-3-7-sonnet-20250219"
}


## コストの算出
- costUSD column から値を取得し集計する
- ドルから円に変換する場合は, 為替情報の取得も必用となる


## 使用する言語
python 3.13

gemini と相談

以下の様な要件清書と基本設計が出力される
不明点などを gemini と相談し、仕様や実装方針をブラッシュアップする
ここでは言語での定義で十分としましたが、詳細設計まで落とし込めばブレが減ると思います

スクリーンショット 2025-06-03 13.08.59.png

タスク化

並列処理向けのタスクリストを作成

以下のプロンプトを入力し、gemini にタスクリストを作成して貰います

ではこれまでの要件と設計を元にした task list を作成しましょう

この task list を元に coding agent が作業を実施します
複数の関数、ファイルに分けるなど小さく分割し、並列処理を行える単位にしましょう


# フォーマットは以下に準ずる事
----
todos:
  Task management for Claude Cost Visualization Project
  Format:
  - id: unique_id
    title: "Task title"
    status: "pending|in_progress|completed"
    description: "Detailed description"
    file_ref: "bank/issues/filename.md" # if applicable
    dependencies: [required taks ids]
    extra: any other info
  
# Example:
# - id: "1.0"
#   title: "Initial project setup and architecture design"
#   status: "pending"
#   description: "Create initial project structure and define architecture"
#   file_ref: "bank/issues/initial_setup.md"
#   extra:

以下、生成された task list の一部

 - id: "6.1"
    title: "テキストテーブル出力の実装 (formatter.py)"
    status: "pending"
    description: |
      `formatter.py` に、`rich` または `tabulate` ライブラリを使用してテキストテーブル出力用のヘルパー関数を実装する。
      集計タイプに基づいて動的に列を作成する(例: '日付', 'プロジェクト', 'セッションID')。
      標準列: `Input`, `Output`, `Total tokens`, `Cost $USD`。オプションで `Cost ¥JPY`。
      数値の3桁区切りを実装する。最後に「合計」行を含める。
      指示:このタスク用にフィーチャーブランチ(例: feature/6.1-text-table-formatter)を作成してください。
    file_ref: "bank/issues/6.1_text_table_formatter.md"
    dependencies: ["6.0", "5.1"] # データソースの例として集計タスクに依存
    extra: { git_branch_suggestion: "feature/6.1-text-table-formatter" }

  - id: "6.2"
    title: "JSON出力の実装 (formatter.py)"
    status: "pending"
    description: |
      `formatter.py` に、JSON出力用のヘルパー関数を実装する。
      可読性のために適切なインデントを付けて `json.dumps()` を使用する。
      データ構造は、各辞書がデータ行を表す辞書のリストとする。
      指示:このタスク用にフィーチャーブランチ(例: feature/6.2-json-formatter)を作成してください。
    file_ref: "bank/issues/6.2_json_formatter.md"
    dependencies: ["6.0", "5.1"]
    extra: { git_branch_suggestion: "feature/6.2-json-formatter" }

タスクリストと設計の保存

タスクリスト、設計をプロジェクト内の bank ディレクトリに書き出し管理します

実装

以下の様に cc を複数稼働、対話し、タスクを全て消化します
なお、git worktree を用いてブランチ事の各ディレクトリ内部で cc を実行しています

  • 統括
    • 並列処理の指示やタスクリストの状況確認
    • 全体状況の把握
  • coding
    • 4 ~ 5 ほど cc を起動し実行するタスクの番号を与え、実装を行う

スクリーンショット 2025-06-03 13.37.09.png

並列の問題点

タスクの関連図を可視化しましたが...解りづらい

claude code にタスクリストを読み込ませ、手順を指示してもらうという手法にしました
自分の脳を使わなくなっているのが実感できます

スクリーンショット 2025-06-03 13.23.09.png

並列化による精錬

上述の作成手順は人の手を介しゆっくりと進めました
agent の動作はランダム性があるため、要件定義、設計なども複数の agent に記述して貰い、それらを纏め精錬すると良いと思います

大量の並列化と試行は、進化アルゴリズムや強化学習などでも用いられるので、コストが許せば coding にも有用かもしれません

以上となります

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?