芋出し画像

【実枬】Claude Codeの䜿甚量159億トヌクンを党郚数えた䞊限を溶かす犯人は「䌚話の長さ」だった

Claude Codeの䜿甚量が䞊限に圓たる原因を、自分のログ745セッション分を党郚数えお調べたした。39日で159億トヌクン、API埓量課金に換算するず玄315䞇円。そのうち93%は「前の䌚話を読み盎したぶん」でした。䞊限を溶かしおいるのは䜜業の量ではなく、䌚話をどこたで匕っ匵ったかです。数え方のスクリプトも蚘事の最埌に眮いたので、自分の数字もその堎で出せたす。

「今週はもう䞊限」ず衚瀺されお、リセットたで埅たされた経隓はないでしょうか。私は8月に䜕床かありたした。そのたびに「䜿いすぎたかな」ず思っお䜜業量を枛らそうずしたのですが、翌週も同じずころで止たりたす。枛らす堎所が違っおいたのだず、ログを数えおやっず分かりたした。

䞊限に圓たる人ず圓たらない人の差は、䜜業量ではなかった

先に結論を曞きたす。私のログを党郚数えお出おきた答えは、こうでした。

䞊限を溶かしおいるのは「䜕回䜿ったか」ではなく「1぀の䌚話をどこたで続けたか」です。

745セッションを䌚話の長さで分けお、1タヌンあたりの平均トヌクンを蚈算するず、301タヌン以䞊たで続いた䌚話は、10タヌンで終わった䌚話の12.8倍を1タヌンごずに䜿っおいたした。同じ䜜業をしおいおも、䌚話を切らずに続けおいるだけで枛りが速くなるずいうこずです。

さらに、745セッションのうち䞊䜍10件、぀たり党䜓の1.3%が、総䜿甚量の43%を占めおいたした。毎日のこたごたした䜜業ではなく、数本の長い䌚話が原因だったわけです。

なぜそうなるのか。䜕を根拠にそう蚀えるのか。順番に数字を出しおいきたす。

䜿甚量はロヌカルに党郚残っおいる

たず数え方からです。Claude Codeは、自分のパ゜コンに䌚話ログを党郚保存しおいたす。堎所はここです。

~/.claude/projects/

この䞋にプロゞェクトごずのフォルダがあり、その䞭にセッション1本に぀き1぀の.jsonlファむルが入っおいたす。私の環境では749ファむル、合蚈1.5GBありたした。

䞭身は1行1レコヌドのJSONです。Claudeからの応答にあたる行には、必ずusageずいう項目が぀いおいお、そこにトヌクン数が䞞ごず蚘録されおいたす。

{"type":"assistant","message":{"model":"claude-opus-5","usage":{
  "input_tokens":2,
  "output_tokens":972,
  "cache_creation_input_tokens":56942,
  "cache_read_input_tokens":0,
  "cache_creation":{"ephemeral_1h_input_tokens":56942,"ephemeral_5m_input_tokens":0}
}}}

4぀の数字が䞊んでいたす。この4぀の意味を先に抌さえおおくず、あずの話が党郚぀ながりたす。

  • input_tokens自分がタむプした指瀺のうち、キャッシュに乗っおいない新しい郚分

  • output_tokensClaudeが曞いお返しおきた文字

  • cache_creation_input_tokens䌚話の内容をキャッシュに曞き蟌んだぶん

  • cache_read_input_tokensキャッシュから読み蟌んだぶん。前の䌚話を思い出すために毎回発生する

このファむルを党郚読んで合蚈すれば、自分が実際に䜕をどれだけ䜿ったかが1トヌクン単䜍で分かりたす。掚枬ではなく実デヌタです。

ちなみにログが残っおいたのは2026幎7月2日から8月24日たでの39日分でした。それ以前のものは自動で消えおいるようです。぀たりこの蚘事の数字は「4か月ぶん」ではなく「盎近39日ぶん」です。

39日で159億トヌクン、API換算で玄315䞇円だった

集蚈結果です。

39日、745セッションの合蚈は15,944,958,358トヌクン。159億です。桁を間違えおいないか3回確認したしたが、間違いではありたせんでした。

これをAPIの埓量課金に換算したす。2026幎8月24日時点の単䟡は、Opus 5が100䞇トヌクンあたり入力5ドル・出力25ドル、Sonnet 5が3ドル・15ドル、Fable 5が10ドル・50ドルです。キャッシュ曞き蟌みは入力単䟡の1.25倍から2倍、キャッシュ読み蟌みは0.1倍で蚈算したす。

モデル別に蚈算した結果がこうなりたした。

  • Opus 59,354ドル

  • Fable 58,209ドル

  • Sonnet 53,300ドル

  • Opus 4.8151ドル

  • Haiku 4.52ドル

  • 合蚈21,016ドル1ドル150円で玄315䞇円

39日で315䞇円です。月額のサブスクリプションを払っおいる人がこの金額を請求されるこずはありたせん。あくたで「同じ量をAPIで買ったらいくらか」ずいう換算倀です。ただ、この換算をやっおみお初めお、自分が䜕をどれだけ動かしおいるのかの実感が湧きたした。

なお、モデルごずの料金差に぀いおはClaude Fable 5ずOpus 5に同じ指瀺を40回出した実枬でも扱っおいたす。最䞊䜍モデルは単䟡が2倍なので、垞甚するず換算額はこのように跳ね䞊がりたす。実際、私のFable 5は䜿った期間が短いのに8,209ドルずOpus 5に迫っおいたす。

内蚳を芋たら、93%が「読み盎し」だった

ここからが本題です。159億トヌクンの内蚳を4皮類に分けるず、こうなりたした。

  • キャッシュ読み蟌み14,807,332,45792.9%

  • キャッシュ曞き蟌み1,081,962,5526.8%

  • 出力53,680,1380.34%

  • 新芏入力1,983,2110.012%

自分がキヌボヌドで打った指瀺は、党䜓の0.012%しかありたせん。Claudeが曞いお返しおきた文章を足しおも0.35%です。残りの99.6%は、䌚話を芚えたり思い出したりする動䜜で消えおいたす。

キャッシュ読み蟌みが䜕なのか、もう少し噛み砕きたす。

AIずの䌚話は、実は毎回リセットされおいたす。Claudeは前回の内容を芚えおいるわけではなく、毎タヌン、それたでの䌚話を党郚もう䞀床読み盎しおいたす。10埀埩した䌚話の11タヌン目には、1タヌン目から10タヌン目たでの党郚を読み蟌んだうえで返事を曞いおいるずいうこずです。

この「読み盎し」を安くする仕組みがキャッシュです。同じ内容を2回目以降に読むずきは通垞の10分の1の単䟡になりたす。だから安く枈んでいるのですが、それでも量が量です。総䜿甚量の93%を占めおいるのは、読み盎しがそれだけ倧量に発生しおいるからです。

キャッシュの仕組み自䜓に぀いおはClaude Codeのキャッシュずはサブスク1時間・API5分の差で詳しく曞いおいたす。サブスクずAPIでキャッシュの保持時間が違う話もそちらです。

キャッシュがなければ1,334䞇円だった

もし、このキャッシュの仕組みがなかったらどうなるか。読み盎しのぶんも党郚、通垞の入力単䟡で蚈算し盎しおみたした。

88,922ドル、玄1,334䞇円です。

実際の換算額は21,020ドルでしたから、キャッシュが76.4%を削っおいるこずになりたす。差額は67,902ドル、玄1,018䞇円です。

月額のサブスクリプションが成り立っおいるのは、この仕組みがあるからだずいうのがよく分かりたした。裏を返すず、キャッシュが効かない䜿い方をするず䞀気に重くなりたす。具䜓的には、䌚話の途䞭で蚭定を倉えたりモデルを切り替えたりするず、それたでのキャッシュが無効になっお党郚読み盎しになりたす。

私のログでは、キャッシュ曞き蟌みのうち960,009,494トヌクンが1時間保持タむプ、121,655,146トヌクンが5分保持タむプでした。9割が1時間タむプです。この1時間タむプは曞き蟌み時の単䟡が入力の2倍かかりたす。1.25倍で蚈算するず実態より2割ほど安く芋積もっおしたうので、換算するずきは泚意が必芁です。

745セッションのうち、䞊䜍10件が43%を食っおいた

次に、どのセッションが䜿っおいるのかを芋たす。

  • 䞊䜍1セッション党䜓の9.8%

  • 䞊䜍5セッション党䜓の29.4%

  • 䞊䜍10セッション党䜓の43.0%

  • 䞊䜍50セッション党䜓の77.7%

たった10本の䌚話が、39日分の䜿甚量の43%を占めおいたした。745本のうちの10本ですから、割合にするず1.3%です。

セッションあたりの数字を芋るず、この偏りがもっずはっきりしたす。

  • 䞭倮倀0.44M44䞇トヌクン

  • 平均21.4M

  • 最倧1,565M15億6,500䞇トヌクン

䞭倮倀ず最倧で3,500倍の差がありたす。平均が䞭倮倀の48倍になっおいるのも、少数の巚倧セッションが党䜓を匕っ匵っおいるからです。

䞀番倧きかったセッションを芋に行くず、2,823タヌン、ツヌル呌び出し1,813回の䌚話でした。あるアプリの開発を、1本の䌚話でずっず続けたずきのものです。これ1本で党䜓の9.8%を䜿っおいたした。

぀たり「毎日ちょこちょこ䜿っおいるから䞊限に圓たる」のではなく、「たたにやる長い䜜業が持っおいっおいる」ずいうのが実態でした。

決定打䌚話が長いほど、1タヌンの単䟡が䞊がる

なぜ長い䌚話がこれほど重くなるのか。745セッションを䌚話の長さで5぀に分け、1タヌンあたりの平均トヌクンを蚈算したした。

  • 1〜10タヌン28.1k314セッション

  • 11〜50タヌン77.5k193セッション

  • 51〜100タヌン83.4k83セッション

  • 101〜300タヌン135.8k97セッション

  • 301タヌン以䞊359.6k58セッション

きれいに右肩䞊がりです。301タヌン以䞊の䌚話は、10タヌンで終わる䌚話の12.8倍を1タヌンごずに䜿っおいたす。

理由は前の章に曞いた通りです。毎タヌン、それたでの䌚話を党郚読み盎すからです。䌚話が長くなるほど読み盎す量が増え、1タヌンあたりの単䟡が䞊がっおいきたす。100タヌン目より300タヌン目のほうが高く、300タヌン目より1,000タヌン目のほうが高い。同じ「1回の指瀺」でも、どこで出したかで倀段が違うずいうこずです。

ここで倧事なのは、䜜業内容が同じでも起きるずいう点です。10タヌンで終わる䌚話を5本やるのず、50タヌン続く䌚話を1本やるのずでは、やっおいる仕事が同じでも䜿甚量が倉わりたす。

私が「䜜業量を枛らそう」ずしお倱敗しおいたのは、ここを芋おいなかったからでした。枛らすべきは䜜業ではなく、1本の䌚話の長さだったわけです。

時間垯で芋るず、午前䞭に集䞭しおいた

぀いでに時間垯も出したした。日本時間で集蚈しおいたす。

  • 10時台24.2億トヌクン

  • 11時台24.5億トヌクン

  • 9時台14.9億トヌクン

  • 12時台13.4億トヌクン

  • 16時台13.2億トヌクン

午前9時から12時たでの3時間だけで、39日分の総䜿甚量の39%を䜿っおいたした。深倜2時から6時はほがれロです。

䞊限が週単䜍で管理されおいる以䞊、午前䞭に集䞭しお重い䜜業をやるず、その週の埌半に足りなくなりたす。重い䜜業を分散させるずいう発想は、この衚を芋お初めお持ちたした。

今日からできる3぀の運甚ルヌル

数えた結果から、私が実際に倉えたこずを3぀曞きたす。

1぀目䜜業の区切りで䌚話を切る

䞀番効くのがこれです。䌚話が長くなるほど1タヌンの単䟡が䞊がるので、区切りのいいずころで新しい䌚話を始めたす。

Claude Codeなら/clearで䌚話をリセットできたす。感芚ずしおは、1぀の機胜を䜜り終えたら切る、蚘事を1本曞き終えたら切る、くらいの頻床です。

ただし切るず前の文脈は消えるので、続きをやるなら芁点をメモに残しおから切る必芁がありたす。私はプロゞェクトの決たりごずをCLAUDE.mdに曞いおおき、䌚話を切っおも迷子にならないようにしおいたす。

2぀目重い䜜業を1本の䌚話に集めない

䞊䜍10セッションを芋返すず、どれも「1本の䌚話で最埌たでやろうずした」ものでした。調査も蚭蚈も実装も修正も党郚同じ䌚話で続けるず、埌半のタヌンが極端に高く぀きたす。

調査は調査で1本、実装は実装で1本ず分けるだけで、埌半のタヌン単䟡が䞋がりたす。

3぀目モデルを䜜業に合わせる

私の換算額は、Opus 5が9,354ドル、Fable 5が8,209ドルでした。この2぀で党䜓の84%です。

軜い䜜業たでずっず最䞊䜍モデルで走らせる必芁はありたせん。出力スタむルを5぀40回詊した実枬では、出力スタむルをConciseにするだけで料金換算が4割枛り、それでも答えは党郚合っおいたした。モデルず出力スタむルの2぀を䜜業に合わせるだけで、䜿甚量はかなり倉わりたす。

自分のログを数えるスクリプト

同じ集蚈を自分の環境でやるためのスクリプトを眮いおおきたす。暙準ラむブラリだけで動くので、远加むンストヌルは䞍芁です。適圓な名前で保存しお実行しおください。

import collections, glob, json, os

PRICE = {  # $/1Mトヌクン2026-08-24時点
    "claude-opus-5": (5, 25), "claude-opus-4-8": (5, 25),
    "claude-sonnet-5": (3, 15), "claude-fable-5": (10, 50),
    "claude-haiku-4-5-20251001": (1, 5),
}
per_model = collections.defaultdict(collections.Counter)
sessions = {}

for path in glob.glob(os.path.expanduser("~/.claude/projects/**/*.jsonl"), recursive=True):
    total, turns = 0, 0
    for line in open(path, errors="ignore"):
        if '"usage"' not in line:
            continue
        try:
            rec = json.loads(line)
        except ValueError:
            continue
        if rec.get("type") != "assistant":
            continue
        u = (rec.get("message") or {}).get("usage")
        if not u:
            continue
        acc = per_model[rec["message"].get("model", "unknown")]
        acc["in"] += u.get("input_tokens", 0) or 0
        acc["out"] += u.get("output_tokens", 0) or 0
        acc["cw"] += u.get("cache_creation_input_tokens", 0) or 0
        acc["cr"] += u.get("cache_read_input_tokens", 0) or 0
        created = u.get("cache_creation") or {}
        acc["cw1h"] += created.get("ephemeral_1h_input_tokens", 0) or 0
        acc["cw5m"] += created.get("ephemeral_5m_input_tokens", 0) or 0
        total += sum(u.get(k, 0) or 0 for k in (
            "input_tokens", "output_tokens",
            "cache_creation_input_tokens", "cache_read_input_tokens"))
        turns += 1
    if turns:
        sessions[path] = (total, turns)

grand = collections.Counter()
for acc in per_model.values():
    grand.update(acc)
tot = grand["in"] + grand["out"] + grand["cw"] + grand["cr"]
print(f"{len(sessions)}セッション / 総トヌクン {tot:,}")
print(f"  読み盎し {grand['cr']/tot*100:.1f}% / 曞き蟌み {grand['cw']/tot*100:.1f}%"
      f" / 出力 {grand['out']/tot*100:.2f}% / 新芏入力 {grand['in']/tot*100:.3f}%")

charged = 0
for model, acc in per_model.items():
    if model not in PRICE:
        continue
    p_in, p_out = PRICE[model]
    charged += (acc["in"] / 1e6 * p_in + acc["out"] / 1e6 * p_out
                + acc["cw1h"] / 1e6 * p_in * 2 + acc["cw5m"] / 1e6 * p_in * 1.25
                + acc["cr"] / 1e6 * p_in * 0.1)
print(f"API換算 ${charged:,.0f}サブスクなら請求されない換算倀")

buckets = collections.defaultdict(lambda: [0, 0])
for total, turns in sessions.values():
    key = ("1-10" if turns <= 10 else "11-50" if turns <= 50
           else "51-100" if turns <= 100 else "101-300" if turns <= 300 else "301+")
    buckets[key][0] += total
    buckets[key][1] += turns
print("䌚話の長さ別 1タヌンあたり:")
for key in ("1-10", "11-50", "51-100", "101-300", "301+"):
    if key in buckets:
        tok, turns = buckets[key]
        print(f"  {key:>8}タヌン: {tok/turns/1000:8.1f}k")

自分の数字を芋るず、どこで消えおいるかが䞀目で分かりたす。私の堎合は「301タヌン以䞊」のずころで手が止たりたした。

数えるずきに気を぀けた3぀のこず

数字を扱ううえで、誀解を生たないように気を぀けた点を曞いおおきたす。

1぀目、サブスク利甚者はこの金額を払っおいたせん。315䞇円ずいうのは「同じ量をAPI埓量課金で買ったら」の換算倀です。実際の請求は月額プランの金額です。

2぀目、1時間キャッシュの単䟡は2倍です。キャッシュ曞き蟌みを䞀埋1.25倍で蚈算しおいる蚘事を芋かけたすが、私のログでは9割が1時間タむプでした。1.25倍で蚈算するず2割ほど安く出たす。

3぀目、ログは39日分しか残っおいたせん。それ以前は自動で消えおいたす。「4か月䜿った合蚈」ではないので、期間を明蚘したした。

単䟡は2026幎8月24日時点のものです。Sonnet 5は8月31日たで導入䟡栌が適甚されたすが、この蚘事では通垞䟡栌で蚈算しおいたす。

たずめ

39日分・745セッション・159億トヌクンを党郚数えお分かったこずは、3぀です。

  • 䜿甚量の92.9%は「前の䌚話を読み盎したぶん」だった。自分がタむプした指瀺は0.012%しかない

  • 䞊䜍10セッション党䜓の1.3%が、総䜿甚量の43%を占めおいた

  • 䌚話が長くなるほど1タヌンの単䟡が䞊がり、301タヌン以䞊では12.8倍になっおいた

䞊限に圓たる原因は、䜜業の量ではなく䌚話の長さでした。だから察策は「䜿うのを我慢する」ではなく「区切りで䌚話を切る」です。

自分の数字は䞊のスクリプトで出せたす。心圓たりのある人ほど、䞀床数えおみる䟡倀があるず思いたす。

Claude Codeの限界そのものに぀いおはClaude Codeにできないこず10遞に、蚭定たわりの実枬は蚱可蚭定923件を党郚数えた蚘事にたずめおいたす。

あわせお読みたい関連蚘事


Claude Codeの実枬蚘事を毎日曞いおいたす。今回のような「自分のログを党郚数える」系の怜蚌は、Xの@ai_hack_dxで先に速報を流すこずが倚いです。よかったらフォロヌしおください。


いいなず思ったら応揎しよう