概要
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 と相談し、仕様や実装方針をブラッシュアップする
ここでは言語での定義で十分としましたが、詳細設計まで落とし込めばブレが減ると思います
タスク化
並列処理向けのタスクリストを作成
以下のプロンプトを入力し、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 を起動し実行するタスクの番号を与え、実装を行う
並列の問題点
タスクの関連図を可視化しましたが...解りづらい
claude code にタスクリストを読み込ませ、手順を指示してもらうという手法にしました
自分の脳を使わなくなっているのが実感できます
並列化による精錬
上述の作成手順は人の手を介しゆっくりと進めました
agent の動作はランダム性があるため、要件定義、設計なども複数の agent に記述して貰い、それらを纏め精錬すると良いと思います
大量の並列化と試行は、進化アルゴリズムや強化学習などでも用いられるので、コストが許せば coding にも有用かもしれません
以上となります