私は4つの技術ブログを個人開発の傍らで運用していて、記事生成・要約・リンク検査といった処理を同じ Claude の組織アカウントに集約しています。便利な反面、費用は一本の請求にまとめて返ってきます。合計 $4 前後という数字は見えても、「どのサイトのどの処理が食っているか」が見えない。これでは、どこを削れば効くのかを判断できません。
そこで取り組んだのが、Anthropic の Cost Report / Usage Report を group_by でワークスペース単位に割り、合算された支出をサイトごとに割り戻す仕組みです。この記事にその手順を残します。基礎的な2エンドポイントの使い方は「Claude API Usage & Cost API でコストをプログラムで監視する」に譲り、ここでは一段深い「配分(showback)」に集中します。
取得したバケットを、日付 × サイト名 のピボットに畳みます。workspace_id は不透明なので、自分で持つマップで人間可読なサイト名へ変換します。マップに無い ID は捨てずに unknown として残す——これが後で「新しく作ったワークスペースを登録し忘れた」ことに気づく手がかりになります。
from collections import defaultdictWORKSPACE_TO_SITE = { "wrkspc_claudelab": "claudelab", "wrkspc_gemilab": "gemilab", "wrkspc_antigrav": "antigravitylab", "wrkspc_rorklab": "rorklab",}def build_showback(buckets: list[dict]) -> dict[str, dict[str, Decimal]]: """{日付: {サイト: 金額}} を返す。未知の workspace は 'unknown' に集約。""" table: dict[str, dict[str, Decimal]] = defaultdict(lambda: defaultdict(Decimal)) for b in buckets: day = (b.get("starting_at") or "")[:10] for row in b.get("results", []): ws = row.get("workspace_id") or "default" site = WORKSPACE_TO_SITE.get(ws, "unknown") amount = Decimal(str(row.get("amount", "0"))) table[day][site] += amount return tabledef print_showback(table: dict[str, dict[str, Decimal]]) -> None: sites = sorted({s for day in table.values() for s in day}) header = "date".ljust(12) + "".join(s.rjust(14) for s in sites) + "total".rjust(14) print(header) grand = defaultdict(Decimal) for day in sorted(table): row = table[day] line = day.ljust(12) day_total = Decimal("0") for s in sites: v = row.get(s, Decimal("0")) day_total += v grand[s] += v line += f"${v:.3f}".rjust(14) line += f"${day_total:.3f}".rjust(14) print(line) total_all = sum(grand.values()) foot = "TOTAL".ljust(12) + "".join(f"${grand[s]:.2f}".rjust(14) for s in sites) foot += f"${total_all:.2f}".rjust(14) print("-" * len(header)); print(foot) for s in sites: share = (grand[s] / total_all * 100) if total_all else Decimal("0") print(f" {s:<16} {share:5.1f}%")
もし複数のプロジェクトを一つの Claude 組織で回しているなら、まずはワークスペースを分けるところから始めてみてください。割れるようになるだけで、コストの会話が「なんとなく高い」から「ここを直す」に変わります。私自身まだ調整の途中ですが、同じように運用されている方の役に立てば嬉しいです。お読みいただき、ありがとうございました。
シェア
お読みいただきありがとうございます
Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。