Claude Code(クロード コード)の料金は、AIが書いた文章の量で決まると思っていませんか?

Claude Codeは、AIがプログラムを書いてくれる道具です。私は自分が使った424本の会話の料金を、AIが書いた分や読んだ分といった種類ごとに数え直しました。

結果は、料金の約6割がAIが書いた分ではありませんでした。いちばん大きかったのは、AIが返事をするたびに会話の履歴を読み直す分です。この記事では数え方と、計算の途中でつまずいた2つのしくじりを書いています。

ジライヤ(驚き3)

おやかたさまぁぁぁぁぁ! 拙者の料金を数え直したら AIが書いた分は約7分の1しかなかったでござる

お館様(驚き2)

なんと! では料金の6割近くは何に使われておるのじゃ?

ジライヤ(サングラス2)

返事のたびにAIが会話の履歴を読み直す分でござる

こんな方におすすめ

  • Claude Codeの料金が何で決まるのか知りたい方
  • 使っていて料金が思ったより高くなる理由が気になる方
  • 自分のログから料金の内訳を数えてみたい方

全体像

この記事でやったことの流れです。

この記事でやった流れ

Claude Codeの会話の記録を集める

使った分を種類ごとに分ける

種類ごとに料金表の単価を掛けて金額にする

使った量の割合と金額の割合を並べて見る

元のログからも数え直して確かめる

料金の6割は読み直しだった

料金の約6割(57.1%)は、AIが書いた分ではなく会話の履歴を読み直す分でした。AIが書いた分は約7分の1です。

数えたのは私が開いた会話のうち、AIの返事が20回以上ある424本です。開いたのは日本時間の2026年7月23日から10月18日の朝までです。

会話はClaude Codeの記録のファイル1つ分のことで、開いてから閉じるまでが基本です。再開すると別の会話になります。返事はAIが1回動くことで、ファイルを読むなどの作業も1回に数えます。返事が20回未満の会話159本と、Claude Codeが裏で別のAIに任せた子の作業181件は除きました。

金額はAnthropic公式の料金表の単価を掛けたAPI換算の値で、使った分だけ払う契約で使った場合の金額です。合計は約$2,891でしたが、実際の支払いは定額プランの月額でこの金額とは別です。全部の会話の費用を数えた記事もあります。

料金は4種類に分かれます。量はトークンという単位で数えます。トークンはAIが文章を数える単位です。

  • 読み直し:AIが返事をするたびに、預けてある会話の履歴を読み出す分です。履歴を預ける保管場所をキャッシュといいます
  • 書き込み:会話の履歴をキャッシュに預ける分です
  • 出力:AIがその返事で新しく書いた文章の分です
  • 通常入力:キャッシュを使わずに新しく読ませた分です

AIは返事をするたびに、それまでの会話を最初から読み直す必要があります。キャッシュは、その読み直しを安く済ませる仕組みです。

「AIが書いた分」は出力だけの話です。AIが書いた文章は次の返事から履歴に入り、書き込みと読み直しの分に数えられます。

通常入力は量も金額も0.02%未満なので、図から省きました。4種類の量と金額は次のとおりです。

種類 量 金額
読み直し 76.9億 $1,652
書き込み 1.54億 $798
出力 3,294万 $441
通常入力 12.8万 $0.36
合計 78.7億 $2,891

424本のうち235本は、読み直しだけで金額の半分を超えていました。

お館様(困惑3)

読み直しは1回あたりが安いはずじゃのに なぜ6割近くにもなるのじゃ?

ジライヤ(やる気)

安い代わりに量がとんでもなく多いのでござる 次は値段と量を並べるでござるよ

読み直しは量が圧倒的でも単価が安いので金額は6割だった

Sonnet 5の単価では、読み直し1トークンの値段は出力1トークンの50分の1です。次の表は100万トークンあたりの値段です。

種類 値段 読み直し比
読み直し $0.20 1倍
通常入力 $2 10倍
書き込み(1時間) $4 20倍
出力 $10 50倍

値段は出力のほうが50倍高いのに、量は読み直しのほうが約233倍ありました。424本の合計では、金額も読み直しが出力の約3.7倍でした。

424本にはSonnet 5のほかにSonnet 5.5・Opus 5・Opus 5.5も混ざります。金額はモデルごとの単価で計算しました。Sonnet 5.5とOpus 5.5は読み直しの値段が入力の0.05倍です。Sonnet 5の0.1倍より安くなっています。

この記事の数字は公式の料金表と突き合わせて直したあとの単価で数えています。直す前との違いは後ろの「単価表の1か所が公式とずれていた」の節に書きました。

書き込みには、預ける時間が5分で$2.50のものもあります。424本の書き込みは99.9%が1時間保管でした。

預けた履歴を中央値で47倍も読み直していた

AIは返事のたびに履歴の全体を読み直します。返事の回数が多い会話ほど、読み直しも積み上がります。

会話ごとに読み直しの量を書き込みの量で割り、424本の中央値を取ると46.9倍でした。つまり預けた履歴の量に対して、約47倍の量を読み直していました。424本の合計どうしで割ると約50倍です。

AIの返事は1本あたり中央値75.5回でした。

お館様(満足4)

料金の約6割は AIが書いた分ではなく 履歴の読み直しだったのじゃな

ジライヤ(喜び2)

左様でござる! しかも中央値で 預けた履歴の46.9倍も読み直しておったでござる

答えが2通りになったのに元のファイルを見ていなかった

数え直しの最初は、手元の集計表(sessions.csv)だけで計算しました。この表には書き込みの合計しか載っていません。書き込みは預ける時間が5分か1時間かで値段が違うので、どちらの値段を使えばよいか決められませんでした。

そこで両方で計算しました。全部を5分の値段にすると読み直しは金額の63.6%で、全部を1時間の値段にすると56.9%です。同じデータなのに、値段の前提をひとつ変えるだけで6.7ポイント動きました。

この作業の会話にも、集計表から元のファイルへ切り替えた様子が残っています。usage_by_modelは、元のファイルでモデルごとの使用量を入れてある欄です。

会話の記録

全文の3〜4番目を読む

Claude ソースデータ(sessions.csv)から、課金の内訳を測り直しています。

Claude 古い形式のログには usage_by_model が無いものがあるので、単一モデルの形式へ読み替えて集計をやり直します。

次に、5分と1時間が別々に記録されている元のファイルから計算し直しました。書き込みの99.9%が1時間保管でした。

しくじり

答えが2通りになったのに元のファイルを見ていなかった

  • 症状: 同じデータなのに 答えが63.6%と56.9%の2通りになった
  • 原因: 手元の表だけでは 預けた時間が5分か1時間か分からず 値段を決められなかった
  • 避け方: 答えが決められない時は 2通りを並べる前に 元のファイルを見に行く
  • 今回のやらかし: 元のファイルを開けば 99.9%が1時間だと すぐ分かった

単価表の1か所が公式とずれていた

元のファイルから数え直すと、最初の答えは読み直しが金額の59.0%でした。このとき使った集計用の単価表では、Sonnet 5.5の読み直しがSonnet 5と同じ$0.20になっていました。別のAIに数字を検証してもらうと、公式の料金表では$0.10だと分かりました。

会話の記録

全文の17番目を読む

Claude 別のAIの検証で、Sonnet 5.5の読み直しの単価が公式の料金表と違っていると分かったので、単価を$0.10に直して全部数え直しました。

単価表を$0.10に直して集計表を数え直しました。読み直しの割合は直す前が59.0%で、直したあとが57.1%です。

しくじり

単価表の1か所が公式とずれていた

  • 症状: 読み直しの割合が59.0%と出たが 正しくは57.1%だった
  • 原因: 集計用の単価表のSonnet 5.5の読み直しが 公式の料金表と食い違っていた
  • 避け方: 単価表は使う前に 公式の料金表と突き合わせる
  • 今回のやらかし: 食い違いに自分では気づかず 別のAIの検証で初めて分かった

再現手順

  1. Claude Codeの会話の記録を見つけます。記録はWindowsならC:\Users\ユーザー名\.claude\projectsの下にある、会話1つにつき1つの.jsonlファイルです。

  2. 各行のmessage.usageからinput_tokens・output_tokens・cache_read_input_tokensを読みます。cache_creationの中のephemeral_5m_input_tokensとephemeral_1h_input_tokensも読みます。

    同じmessage.idとrequestIdの行は、AIの1回の返事が複数行に分けて書かれたものです。全部を足すと何重にも数えるので、行の間で最大値を1件分として数えます。

  3. モデルごとの単価を掛けて合計します。次のプログラムの単価は100万トークンあたりのドルで、公式の料金表で2026年10月19日に確認した値です。

    import json, glob, os
    
    PRICE = {  # 通常入力・出力・読み直し・書き込み5分・書き込み1時間
        "claude-sonnet-5":   (2, 10, 0.20, 2.50, 4),
        "claude-sonnet-5-5": (2, 10, 0.10, 2.50, 4),
        "claude-opus-5":     (5, 25, 0.50, 6.25, 10),
        "claude-opus-5-5":   (4, 20, 0.20, 5.00, 8),
    }
    KINDS = ("input", "output", "read", "write")
    
    dollars = dict.fromkeys(KINDS, 0.0)
    for path in glob.glob(os.path.expanduser("~/.claude/projects/*/*.jsonl")):
        best = {}
        for line in open(path, encoding="utf-8"):
            row = json.loads(line)
            msg = row.get("message") or {}
            usage = msg.get("usage")
            if row.get("type") != "assistant" or not usage or msg.get("model") not in PRICE:
                continue
            cc = usage.get("cache_creation") or {}
            now = (usage.get("input_tokens", 0), usage.get("output_tokens", 0),
                   usage.get("cache_read_input_tokens", 0),
                   cc.get("ephemeral_5m_input_tokens", 0), cc.get("ephemeral_1h_input_tokens", 0))
            key = (msg.get("id"), row.get("requestId")) if msg.get("id") else row["uuid"]
            old = best.get(key, (msg["model"],) + (0,) * 5)
            best[key] = (msg["model"],) + tuple(max(a, b) for a, b in zip(old[1:], now))
        if len(best) < 20:
            continue
        for model, i, o, r, w5, w1 in best.values():
            p = PRICE[model]
            dollars["input"] += i * p[0] / 1e6
            dollars["output"] += o * p[1] / 1e6
            dollars["read"] += r * p[2] / 1e6
            dollars["write"] += (w5 * p[3] + w1 * p[4]) / 1e6
    
    total = sum(dollars.values())
    print({k: round(v / total * 100, 1) for k, v in dollars.items()})
  4. 出てきた割合のうちreadが、金額に占める読み直しの割合です。writeは書き込みの5分と1時間を足した割合です。返事が20回未満の会話は数えず、料金表に無いモデルも数えません。

    私の手元でこのプログラムを動かすと、読み直しは58.8%でした。記事の57.1%と同じにならないのは、条件が違うからです。このプログラムは、会話を再開して写された履歴も数えます。消えた会話の退避先は読まず、10月18日の朝より後の会話も含みます。

デメリット・注意点

測ったのは私1人の424本です。ほかの人の使い方で数えた結果ではありません。

金額はAPI換算であり実際の支払いではありません。単価は2026年10月19日に公式の料金表と突き合わせました。集計用の単価表は10月1日に取ったものです。Sonnet 5.5の読み直しだけ公式の$0.10に直し、集計表も数え直しました。直す前の単価で数えた424本の合計は$3,024.96です。

424本の書き込みは99.9%が1時間保管でした。5分保管が多い使い方は、この数字に含まれていません。

会話を再開すると履歴が別のファイルへ写されます。私の集計では、同じ返事を一番早く終わった会話にだけ数えました。上の短いプログラムは写された分も数えます。元のログを直接数えると、ログを読めた406本のうち36本が集計より多く出ます。集計のあとも続いた会話の分も含みます。

元のログが無い18本は、集計ファイルに残した記録だけで数えました。424本全体の約4%です。

読み直しが書き込みの46.9倍というのは、会話ごとの値の中央値です。平均は53.9倍で、424本の合計どうしで割ると約50倍です。

最後に

料金の約6割は、AIが書いた分ではなく会話の履歴の読み直しでした。まずは上の手順で自分のログを数えて、読み直しが料金の何割か見てみてください。

私は読み直しの割合が2通りに分かれたまま、元のファイルを見る前に並べていました。元のファイルを開けば1時間保管が99.9%と一目で分かったのに(^^)

Claudeの単価は公式の料金表で確認できます。