◉CLAUDE LABEN
●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/Claude.ai
◉ Claude.ai/2026-03-21上級

Claude の artifact でダッシュボードを作る — CSV を貼る前に集計する理由と、実運用で落ち着いた構成

Claudeのartifactでダッシュボードを作るとき、生CSVをそのまま貼らずに前処理してから渡す理由を説明します。178KBを3.1KBに圧縮する集計、データ契約の先行宣言、実際に回しているReactコンポーネントのコード、色指定の注意点など、実運用で落ち着いた構成をまとめました。

Claude51artifactビジュアライゼーションダッシュボードデータ前処理個人開発130

✦ プレミアム記事

月末になると、AdMob と App Store Connect と Firebase の管理画面を順番に開いて、CSV を書き出しております。個人開発で壁紙アプリを複数抱えていると、次の更新をどれに投じるかは勘ではなく数字で決めたくなります。

以前は、書き出した CSV をそのまま Claude に貼り付けていました。数秒でそれらしい折れ線が描かれます。手応えのある体験でした。

つまずいたのは、描かれた週次の山が、手元の表計算で確認した山と一日ずれていたときです。

原因を追いかけた結果は、拍子抜けするほど単純でした。貼ったデータが、最後まで読まれていなかったのです。

artifact は React コンポーネントとして描かれます。渡したデータは、どこかの時点でコード内の配列リテラルに書き写されます。4,300 行の CSV を貼るということは、4,300 個のオブジェクトを一つずつ書き写してもらう依頼に等しい。実際には、そこまで書き写されません。

以下は、この前提を受け入れた上で、個人開発の数値を意思決定に使える形にするまでの構成です。実際に手元で回しているコードを添えて整理します。

貼ったCSVは、そのままの姿では届いていない

まず起きていたことを、数字で確かめました。

AdMob から書き出した 90 日分の日次レポートは、4,312 行・178 KB でした。これを貼って生成された artifact のソースを開き、データ配列の要素数を数えたところ、117 件でした。

明示的な断りはありませんでした。「代表的な値を抜粋しました」といった注記もなく、素直に折れ線が描かれていました。週次の山が一日ずれていたのは、間引かれた結果として、たまたま隣の日がピークに見えていたからです。

これは不具合ではなく、当然の帰結だと考えています。出力トークンには上限があり、4,312 行を書き写せば、それだけで応答の大半を使い果たします。書ける範囲に収める判断は、むしろ妥当です。

問題は、こちらがその判断を依頼していないことでした。

検証のしかた

同じことを疑ったときは、artifact のコードを開いて数えるのが最短です。

  1. artifact のコードビューを開きます
  2. データ配列の宣言(const data = [...] に相当する箇所)を探します
  3. 要素数を数え、元データの行数と突き合わせます
  4. 差があれば、そのチャートは意思決定には使いません

3 行の差なら丸め、4,000 行の差なら別物です。この確認を挟むようになってから、グラフを疑う時間がなくなりました。

集計は手元で終わらせる — 178 KB を 3.1 KB にする前処理

結論として私が採ったのは、集計を Claude に渡さない、という方針でした。

日次 4,312 行のうち、意思決定に効くのは「アプリ別・週次の推移」だけです。であれば、その形まで手元で畳んでから渡せばよい。以下は実際に使っているスクリプトです。AdMob の日次エクスポートを読み、週次に畳んで JSON を吐きます。

# aggregate_admob.py — AdMob 日次CSVを週次サマリJSONへ畳む
# 使い方: python3 aggregate_admob.py admob_daily.csv > weekly.json
import sys
import json
import pandas as pd
 
REVENUE = "Estimated earnings (USD)"
IMPRESSIONS = "Impressions"
 
def main(path: str) -> None:
    df = pd.read_csv(path)
    df["Date"] = pd.to_datetime(df["Date"])
 
    # 週の区切りを月曜始まりに固定する。ここを揃えないと
    # 表計算側の集計と一日ずれる(実際にずれました)
    df["week"] = df["Date"].dt.to_period("W-SUN").dt.start_time
 
    grouped = (
        df.groupby(["App", "week"])
        .agg(revenue=(REVENUE, "sum"), impressions=(IMPRESSIONS, "sum"))
        .reset_index()
    )
 
    # eCPM は「合計収益 ÷ 合計表示回数 × 1000」で出します。
    # 日次eCPMの平均を取ると表示回数の少ない日に引きずられて過大になります
    grouped["ecpm"] = (grouped["revenue"] / grouped["impressions"] * 1000).round(2)
    grouped["revenue"] = grouped["revenue"].round(2)
    grouped["week"] = grouped["week"].dt.strftime("%Y-%m-%d")
 
    records = grouped.to_dict(orient="records")
    print(json.dumps(records, ensure_ascii=False, separators=(",", ":")))
 
if __name__ == "__main__":
    main(sys.argv[1])

手元での実測は次のとおりです。

項目生CSVをそのまま貼る週次に畳んでから貼る
データ量178 KB / 4,312 行3.1 KB / 26 行
入力トークン(概算)約 47,000約 900
artifact に載った要素数117 件(間引かれた)26 件(全件)
数値の一致週次の山が1日ずれる表計算と一致
作り直しの所要都度、長い貼り付けからJSON を差し替えるだけ

トークンにして約 98% の削減ですが、効いたのは費用ではありません。全件が載るようになったこと、そして作り直しが軽くなったことです。

W-SUN の指定は、つまずいた箇所そのものです。pandas の週次は既定で日曜終わりに寄り、管理画面側の週の区切りと一日ずれます。ここを固定するだけで、最初に気づいた「一日のずれ」は消えました。

集計そのものを Claude 側で完結させたい場合は、Claude API の Code Execution ツールに月次の売上CSV集計を任せる の構成が近いです。手元に Python を持ちたくないときは、そちらが素直です。

✦

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

この記事の続きを読む

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

この記事で得られること
✦生CSV 178 KB を 3.1 KB に落とす前処理スクリプト(pandas・そのまま動く形)と、トークン約 98% 削減の実測値
✦artifact が外部 fetch も localStorage も使えない前提で、日次更新ダッシュボードを成立させた cron + 静的JSON の構成
✦データ契約を先に宣言して、再生成のたびに軸とキーが揺れる問題を止めた4手順
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

◉ Claude.ai2026-08-18
透かし入りの生成テキストを、アプリの配信物に載せる前に決めておくこと
2026年8月2日以降のClaudeモデルは生成テキストに機械可読の透かしを埋め、ファイルにはC2PA署名メタデータを付けます。個人開発の配信物でどこまで通してよいかの線引きと、出所を再現できる提出ゲートの作り方を実測とコードで整理します。
◉ Claude.ai2026-05-03
個人開発者のための Claude プラン早見表 2026 — Pro・Max・API のどれで収益化するか
Claude Pro・Max・APIの3プランを、個人開発者が収益化に向いているかという観点で比較します。状況別のおすすめ、各プランが向いている人の条件、ProとAPIのハイブリッドが結局安くなる理由、Teamプランを検討する損益分岐まで、試算例とともに判断軸を示します。
◉ Claude.ai2026-10-16
「出典を示して」と頼むのをやめて、回答の裏取りに使っている三つの聞き方
Claude の回答を文章に使う前に、「出典を示して」の代わりに使っている三つの聞き方を整理しました。分からないと言える余地を先に渡す、原文の引用を先に抜かせる、書いたあとで主張ごとに裏づけを探させる。それでも人が確かめる部分も書き残します。