ANTIGRAVITY LABEN
記事一覧/Editor View
Editor View/2026-08-01上級

売上CSVを添付したら、いちばん高くついていたのは日付の列でした — 添付形式のトークン単価を測る

2.4.3 で .json・.md・.csv を入力欄へ添付できるようになりました。同じ表を8つの形で書き出してトークンで並べ、列ごとに値段をつけ、要約へ落とすまでを実測しています。数字はすべて手元で走らせて取得したものです。

Antigravity346コンテキスト設計6トークン3CSV計測7個人開発91

プレミアム記事

補助ペインで文脈の残量を見ながら、6月からの売上レポートを添付したところでした。1,730 行、127 KB。テキストとしては小さいほうです。それでも、質問を書き終える前に残量の目盛りが目に見えて減っていました。

そのときは深く考えず、期間を半分に切って渡し直しました。気になったのは翌日です。同じ中身でも、書き出す形を変えるだけで倍以上ちがうのではないか。だとすれば、削るべきは行数ではなく書き方なのかもしれません。

個人開発では、こうした小さな摩擦が毎週同じ場所で戻ってきます。売上を確認するたびに期間を切り直すのは、作業としては数十秒でも、判断を鈍らせるには十分な長さでした。

2.4.3 では、入力欄へ .json.md.csv を添付できるようになりました。形式ごとにバッジが付き、貼り付けではなく添付として渡せます。選択肢が増えたぶん、どの形で渡すかという判断がこちらに移ってきたことになります。

この記事は、その判断を勘ではなく数字で決めるために書いた計測の記録です。

なお本稿の数値は、実際のレポートをそのまま公開できないため、同じ列構成・同じ規模の表を固定シードで生成して測っています。生成スクリプトも載せますので、手元で同じ数字が出ることを確認していただけます。

トークナイザについて先に断っておくこと

計測には OpenAI の tiktokeno200k_base)を使っています。Antigravity が使う Gemini 系のトークナイザとは別物です。絶対値をそのまま請求額に換算することはできません。

それでも相対比較の指標としては使えると考えています。同じ計測を cl100k_base でも回したところ、後述する削減率は 0.476 と 0.483 でほぼ一致しました。形式や列構成による差は、トークナイザの違いよりずっと大きいのです。

以下、倍率と割合を読んでいただき、絶対値は目安として扱っていただければ幸いです。

題材にする表

App Store Connect の売上レポートと同じ列構成の表です。62 日 × 9 か国 × 4 SKU から、売上ゼロの行を一部落として 1,730 行になりました。

# mkdata.py — 計測用のデータを固定シードで作る
import csv, random, datetime, os
random.seed(20260801)
 
countries = ["JP","US","GB","DE","FR","KR","TW","CA","AU"]
skus = [
    ("WLP.PRO.YEAR",   "Wallpaper Pro (Yearly)"),
    ("WLP.PRO.MONTH",  "Wallpaper Pro (Monthly)"),
    ("CALM.REMOVEADS", "Calm Sounds Remove Ads"),
    ("CALM.PACK.02",   "Calm Sounds Pack 02"),
]
rate  = {"JP":1.0,"US":150.0,"GB":190.0,"DE":163.0,"FR":163.0,
         "KR":0.11,"TW":4.7,"CA":110.0,"AU":98.0}
cur   = {"JP":"JPY","US":"USD","GB":"GBP","DE":"EUR","FR":"EUR",
         "KR":"KRW","TW":"TWD","CA":"CAD","AU":"AUD"}
base  = {"JP":40,"US":22,"GB":6,"DE":7,"FR":4,"KR":9,"TW":5,"CA":3,"AU":3}
price = {"WLP.PRO.YEAR":3800.0,"WLP.PRO.MONTH":480.0,
         "CALM.REMOVEADS":320.0,"CALM.PACK.02":250.0}
mix   = {"WLP.PRO.YEAR":0.12,"WLP.PRO.MONTH":0.46,
         "CALM.REMOVEADS":0.28,"CALM.PACK.02":0.14}
 
d0 = datetime.date(2026, 5, 31)
rows = []
for i in range(62):
    d = d0 + datetime.timedelta(days=i)
    wk = 1.18 if d.weekday() >= 5 else 1.0          # 週末は少し伸びる
    for c in countries:
        for sku, name in skus:
            lam = base[c] * mix[sku] * wk
            units = max(0, int(random.gauss(lam, lam * 0.45)))
            if units == 0 and random.random() < 0.55:
                continue                             # ゼロ行の一部は出力されない
            proceeds = units * price[sku] * 0.70 / rate[c]
            rows.append({
                "date": d.isoformat(),
                "country_code": c,
                "product_sku": sku,
                "product_name": name,
                "device_type": random.choice(["iPhone", "iPad"]),
                "units_sold": units,
                # 為替換算の結果、小数がそのまま残る。実際のレポートでもよく見る形
                "developer_proceeds": repr(round(proceeds, 10)),
                "currency_code": cur[c],
            })
 
p = os.path.expanduser("~/lab/sales.csv")
os.makedirs(os.path.dirname(p), exist_ok=True)
with open(p, "w", newline="") as f:
    w = csv.DictWriter(f, fieldnames=list(rows[0].keys()))
    w.writeheader(); w.writerows(rows)
print("rows:", len(rows), "bytes:", os.path.getsize(p))
# => rows: 1730 bytes: 127536

developer_proceeds24181.8181818182 のような値が並ぶのがこの表の特徴です。為替換算を挟んだレポートでは珍しくありません。ここが後で効いてきます。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
同じ1,730行の表を CSV・TSV・Markdown・JSON・YAML の8形式で書き出し、トークン数を並べた実測表(桁揃えの Markdown が最も高く、列指向 JSON は CSV とほぼ同じ)
列を1つずつ抜いて差分を取り、どの列が何割を占めているかを出す計測スクリプト。売上表で最も高かったのは金額列ではなく日付列だった
全量を渡す代わりに 1,062 トークンの要約へ落とす実装と、要約が静かに嘘をつく条件(単位の混在)を塞ぐ方法
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

Editor View2026-07-16
4,000行のログをエージェントに渡す三つの道 — 貼り付け・.txt 添付・@ 参照を測り分ける
v2.3.0 でプレーンテキスト添付に対応しました。長いログをエージェントへ渡す手段が三つに増えたことで、どれをいつ選ぶかという新しい迷いが生まれています。切り出し・計測・判断フローを実装込みで整理しました。
Editor View2026-06-26
Antigravity が一気に書いた巨大な差分を、意味単位のコミットに分け直す
エージェントが書いた数百行の差分を、そのままコミットしていませんか。レビューできない一括コミットを、関心ごとに分け直すための実践的なワークフローとスクリプトを紹介します。
AIツール2026-07-30
Pro に回す件数を半分にしても、トークンは6割残っていた — モデル振り分けの基準を測り直す
単数の設定が models コレクションに置き換わり、複数モデルのルーティングを自分で決める必要が出ました。タスク種別で振り分けていた基準を、手元のリポジトリ67タスクの実測分布で測り直した記録です。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →