GEMINI LABEN
NANOLITE — Nano Banana 2 Liteが登場しました。Googleで最も速く、最もコスト効率の高いGemini Imageモデルで、軽量な画像生成を安く回したい用途に向いていますOMNIFLASH — Gemini Omni Flashがpublic previewになりました。ネイティブにマルチモーダルなモデルで、企業や開発者が独自の動的な動画ワークフローを構築できますAGENTS — Managed Agentsが拡張されました。background: trueでサーバー側の非同期実行とポーリング、リモートMCPサーバー連携、対話をまたぐ認証情報のリフレッシュに対応しますMEMORY — Memory BankのIngestEvents APIが一般提供になりました。イベントの取り込みとメモリ生成を分離し、コンテンツを継続的にストリームできますTHROUGHPUT — Provisioned Throughputで、同一モデル・同一リージョンに対して最大7件の保留オーダーを提出できるようになりましたDEPRECATE — 画像生成モデルは8月17日に、Gemini Enterprise Agent PlatformのGrok 4.1系は8月20日に停止される予定ですNANOLITE — Nano Banana 2 Liteが登場しました。Googleで最も速く、最もコスト効率の高いGemini Imageモデルで、軽量な画像生成を安く回したい用途に向いていますOMNIFLASH — Gemini Omni Flashがpublic previewになりました。ネイティブにマルチモーダルなモデルで、企業や開発者が独自の動的な動画ワークフローを構築できますAGENTS — Managed Agentsが拡張されました。background: trueでサーバー側の非同期実行とポーリング、リモートMCPサーバー連携、対話をまたぐ認証情報のリフレッシュに対応しますMEMORY — Memory BankのIngestEvents APIが一般提供になりました。イベントの取り込みとメモリ生成を分離し、コンテンツを継続的にストリームできますTHROUGHPUT — Provisioned Throughputで、同一モデル・同一リージョンに対して最大7件の保留オーダーを提出できるようになりましたDEPRECATE — 画像生成モデルは8月17日に、Gemini Enterprise Agent PlatformのGrok 4.1系は8月20日に停止される予定です
記事一覧/API / SDK
API / SDK/2026-06-01上級

Gemini を組み込んだ機能の採算を、機能単位で見る設計 — 残す・直す・畳むを判断するために

Gemini API のコストはアカウント単位では見えても、機能単位の採算までは見えてきません。リクエストに機能タグを付けてコスト台帳を作り、AdMob や課金の収益シグナルと突き合わせて貢献利益を算出し、残す・直す・畳むを判断する設計を、実際に運用しているコードとともにまとめました。

gemini-api279ユニットエコノミクスコスト管理15本番運用47AdMob9意思決定2

プレミアム記事

ある月の半ば、私が運営する壁紙アプリの1つで「キャプション自動生成」という小さな機能の Gemini API コストが、その機能が生んでいる広告収益を上回っていることに気づきました。アプリ全体では黒字なので、月末の請求書を眺めているだけでは絶対に見えてこない赤字でした。アカウント単位のコストは Google Cloud のコンソールで分かりますが、「どの機能が」「いくら稼いで」「いくら使っているか」は、こちらが意図して設計しない限り、どこにも残らないのです。

2014年から個人でアプリ開発を続け、累計5,000万ダウンロードのアプリ群を AdMob とアプリ内課金で運営してきましたが、AI 機能を本番に組み込むようになってから、この「機能単位の採算が見えない」問題が一気に重くなりました。従来の機能はコストがほぼゼロ(一度書けば動き続ける)だったのに対し、Gemini を呼ぶ機能はユーザーが使うたびに従量課金が発生します。つまり、機能ごとに損益計算書(P&L)を持つ発想が、ここで初めて必要になったのです。

ここでは、リクエスト単位のコスト記録を出発点に、収益シグナルと突き合わせて機能ごとの貢献利益を出し、「残す・直す・畳む」を判断するまでの設計を共有します。コストを記録するところまではusageMetadata で本番アプリのコストを記録する実装パターンで扱いましたので、本稿はその先、「記録したコストを意思決定に変える層」に焦点を当てます。

なぜ機能単位の採算は放っておくと永遠に見えないのか

コストと収益が、別々の場所で・別々の粒度で記録されているからです。コストは Google Cloud の請求や usageMetadata に「モデル単位・アカウント単位」で溜まります。一方、収益は AdMob のダッシュボードに「広告ユニット単位」で、課金は App Store / Google Play に「プロダクト単位」で溜まります。この3つは、どれも「機能」という軸を持っていません。

私が最初にやってしまった失敗は、コストだけを必死に下げようとしたことでした。プロンプトを短くし、Flash-Lite に寄せ、キャッシュを効かせ——確かにコストは2割ほど下がりました。けれども「その機能はそもそも残すべきだったのか」という問いには、まったく答えていなかったのです。コスト最適化は採算判断の代わりにはなりません。採算は収益と並べて初めて意味を持ちます。

そこで設計の出発点を、「すべての Gemini リクエストに、それがどの機能のためのものかを示すタグを必ず付ける」というルールに置きました。地味ですが、これがないと後段の集計が一切できません。

ステップ1:機能タグ付きのコスト台帳をつくる

リクエストを送る関数を1か所に集約し、呼び出し元が feature を渡すことを強制します。下のコードはそのまま動く最小構成です(Python・google-genai SDK 想定)。

import time
import sqlite3
from google import genai
 
client = genai.Client()  # GEMINI_API_KEY を環境変数から読む
 
# Flash の概算単価(1M トークンあたり USD)。実際の単価は料金表で確認してください。
PRICE_PER_1M = {
    "gemini-2.5-flash": {"input": 0.30, "output": 2.50},
    "gemini-2.5-flash-lite": {"input": 0.10, "output": 0.40},
}
 
def _cost_usd(model: str, usage) -> float:
    p = PRICE_PER_1M.get(model)
    if not p:
        return 0.0
    in_tok = usage.prompt_token_count or 0
    out_tok = (usage.candidates_token_count or 0) + (usage.thoughts_token_count or 0)
    return in_tok / 1_000_000 * p["input"] + out_tok / 1_000_000 * p["output"]
 
def generate_tracked(feature: str, model: str, contents, db: sqlite3.Connection):
    """feature タグ必須。コストを台帳に1行記録してからレスポンスを返す。"""
    t0 = time.time()
    resp = client.models.generate_content(model=model, contents=contents)
    u = resp.usage_metadata
    db.execute(
        "INSERT INTO ai_cost_ledger (ts, feature, model, in_tok, out_tok, cost_usd, latency_ms) "
        "VALUES (?,?,?,?,?,?,?)",
        (
            int(t0), feature, model,
            u.prompt_token_count or 0,
            (u.candidates_token_count or 0) + (u.thoughts_token_count or 0),
            _cost_usd(model, u),
            int((time.time() - t0) * 1000),
        ),
    )
    db.commit()
    return resp

台帳のスキーマはこれだけです。

CREATE TABLE ai_cost_ledger (
  id        INTEGER PRIMARY KEY,
  ts        INTEGER NOT NULL,   -- UNIX 秒
  feature   TEXT NOT NULL,      -- 例: "caption_gen", "wallpaper_tagging"
  model     TEXT NOT NULL,
  in_tok    INTEGER NOT NULL,
  out_tok   INTEGER NOT NULL,
  cost_usd  REAL NOT NULL,
  latency_ms INTEGER NOT NULL
);
CREATE INDEX idx_ledger_feature_ts ON ai_cost_ledger (feature, ts);

ポイントは、feature を引数で「必ず」受け取る形にして、デフォルト値を持たせないことです。デフォルトを許すと、急いでいるときに無タグのリクエストが混ざり、半年後に「unknown が全コストの3割」という、いちばん知りたくない集計結果を見ることになります。私はこれを一度やりました。タグの強制は、未来の自分への配慮だと考えています。

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

この記事の続きを読む

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

この記事で得られること
リクエストに機能タグを付けてコストを機能単位で台帳化する、実行可能な記録レイヤの実装
AdMob・アプリ内課金・エンゲージメントの収益シグナルとコストを突き合わせ、機能ごとの貢献利益を算出する SQL とその読み方
貢献利益と改善余地の2軸で残す・直す・畳むを切り分ける判断マトリクスと、私が実際に1機能を畳んだときの数値
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

API / SDK2026-06-28
gemini-flash-latest が 3.5 Flash に切り替わっても深夜に事故らない『昇格ゲート』の設計
gemini-flash-latest のような可変エイリアスは GA のたびに中身が差し替わり、無人で回している自動処理の前提を静かに崩します。自前の役割→固定モデルID の間接層と、ゴールデンセットで4指標を測る受け入れハーネス、しきい値での昇格・自動ロールバックまでを実装コード付きで共有します。
API / SDK2026-06-21
Gemini API の usageMetadata で本番アプリのコストを記録する — リクエスト単位で請求書と突き合わせる実装パターン
usageMetadata をリクエスト単位で記録し、エンドポイント・ユーザー・モデル別にコストを按分する実装パターンに加え、3.5 Flash GA で既定モデルが差し替わってもコスト記録が狂わないよう resp.model_version を基点にした単価引き当てと、ドリフト・未知モデルを毎晩監査する仕組みまで解説します。
高度な活用2026-07-09
無料ユーザー一人あたりのトークン予算を決める — AdMob 収益と AI 機能のコストを釣り合わせる設計
レート制限は秒あたりを守りますが、月末の請求は守ってくれません。広告収益から一人あたりのトークン予算を逆算し、呼び出しラッパー一か所で台帳を作り、ソフトキャップで段階的に降格させ、上位1%の消費比率で濫用を検知するまでを、動くコードとともにまとめます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →