◉GEMINI LABEN
●API — Gemini 3.8 Flash TTS と Flash-Lite TTS が一般提供になりました(9月22日)。Voices エンドポイントで 150 以上の音声を引けます●10/22 — Veo 3.1 の3モデルの提供終了まで残り16日。移行先は gemini-omni-1.1-flash です●TMP — Gemini CLI が一時スクリプトを思わぬ場所に作る、という Issue が上がっています。置き場所の決め方が論点です●NEW — 年末の価格切り替えに備え、Sheets に Gemini 呼び出しの台帳を作って月額を見積もりました●CLAUDE — Claude Code から Gemini 3.8 へ日本語処理を振る併用が Zenn で読まれています。振る仕事と振らない仕事の線引きが論点です●2.5 — Gemini 2.5 系は新規プロジェクトでは使わない方針です(9月18日)。API では引き続き提供されますが、過去に使った利用者に限られます●API — Gemini 3.8 Flash TTS と Flash-Lite TTS が一般提供になりました(9月22日)。Voices エンドポイントで 150 以上の音声を引けます●10/22 — Veo 3.1 の3モデルの提供終了まで残り16日。移行先は gemini-omni-1.1-flash です●TMP — Gemini CLI が一時スクリプトを思わぬ場所に作る、という Issue が上がっています。置き場所の決め方が論点です●NEW — 年末の価格切り替えに備え、Sheets に Gemini 呼び出しの台帳を作って月額を見積もりました●CLAUDE — Claude Code から Gemini 3.8 へ日本語処理を振る併用が Zenn で読まれています。振る仕事と振らない仕事の線引きが論点です●2.5 — Gemini 2.5 系は新規プロジェクトでは使わない方針です(9月18日)。API では引き続き提供されますが、過去に使った利用者に限られます
記事一覧/API / SDK
◈ API / SDK/2026-08-22中級

メディエーショングループが20を超えたとき、設定の抜けをどう見つけるか

広告メディエーションのグループが増えると、設定の抜けや型のずれが静かに溜まります。設定を1枚の表に正規化して機械でずれを確定させ、判断が必要なセルだけを Gemini に渡す分担にした手順をまとめました。

gemini116gemini-api286admob5structured-output26個人開発121

✦ プレミアム記事

iOS 側のメディエーション拡張で Liftoff・InMobi・Unity Ads を足したとき、対象になったのは4アプリ分、20を超えるグループでした。管理画面を1つずつ開いて、同じネットワークが同じ形で入っているかを目で確かめていきます。10 グループ目あたりで、自分がどこまで確認したのか分からなくなりました。

翌週になって気づいたのが、あるグループにだけ1ネットワークが入っていなかったことです。収益の数字はほんの少し低いだけで、異常として目に入るような落ち方はしていませんでした。設定の抜けというのは、そういう静かな形で現れます。

この経験から、点検の手順を作り直しました。結論から書くと、抜けの検出は機械の仕事で、Gemini に渡すのは「その状態が意図的かどうか」の判断だけという分担に落ち着いています。

「おかしいところを教えて」では、抜けは出てきません

最初に試したのは、素直な方法でした。20 グループ分の設定をまとめてテキストにして、Gemini に「不整合があれば指摘してください」と投げます。

返ってきたのは、eCPM の桁が明らかに違うセルや、命名規則から外れたグループ名でした。どれも指摘としては正しいのですが、私が一番見つけたかった「あるグループにだけネットワークが入っていない」は出てきませんでした。

理由を考えて、腑に落ちました。存在するものの異常は、テキストの中に手がかりが残ります。一方で欠落は、その場所に何も書かれていないという形でしか存在しません。20 行のリストを読んで「19 行目に他の行にはある要素が無い」と気づくには、まず全行の要素を集めて集合を作り、行ごとに差分を取るという操作が要ります。それは言語で読み取る作業ではなく、集合演算です。

言語モデルに苦手なことをさせて精度を嘆くより、集合演算は集合演算として書いてしまう方が早い。そう考えて、渡す前の形を変えることにしました。

まず、設定を1枚の表に正規化します

管理画面のエクスポートでも、スクリーンショットから起こした手書きの JSON でも構いません。大事なのは「グループ × ネットワーク」のマトリクスに変換できる形に揃えることです。

# groups: 管理画面から起こした設定。実運用ではエクスポートを読み込みます
groups = [
    {"group": "RWD-iOS-Wallpaper-JP", "app": "wallpaper", "sources": [
        {"network": "admob_bidding", "type": "bidding"},
        {"network": "applovin",      "type": "bidding"},
        {"network": "liftoff",       "type": "bidding"},
        {"network": "inmobi",        "type": "bidding"},
        {"network": "unity",         "type": "waterfall", "ecpm": 4.2}]},
    {"group": "RWD-iOS-Wallpaper-US", "app": "wallpaper", "sources": [
        {"network": "admob_bidding", "type": "bidding"},
        {"network": "applovin",      "type": "bidding"},
        {"network": "liftoff",       "type": "bidding"},
        {"network": "unity",         "type": "waterfall", "ecpm": 4.2}]},
    {"group": "RWD-iOS-Ukiyoe-JP", "app": "ukiyoe", "sources": [
        {"network": "admob_bidding", "type": "bidding"},
        {"network": "applovin",      "type": "bidding"},
        {"network": "liftoff",       "type": "bidding"},
        {"network": "inmobi",        "type": "bidding"},
        {"network": "unity",         "type": "waterfall", "ecpm": 0.42}]},
    {"group": "RWD-iOS-Healing-JP", "app": "healing", "sources": [
        {"network": "admob_bidding", "type": "bidding"},
        {"network": "applovin",      "type": "waterfall", "ecpm": 3.9},
        {"network": "liftoff",       "type": "bidding"},
        {"network": "inmobi",        "type": "bidding"},
        {"network": "unity",         "type": "waterfall", "ecpm": 4.2}]},
]
 
 
def build_matrix(groups):
    """グループ × ネットワークの二次元表を作ります。
    未設定のセルは None になり、これが後で「欠落」の候補になります。"""
    networks = sorted({s["network"] for g in groups for s in g["sources"]})
    matrix = {}
    for g in groups:
        by_net = {s["network"]: s for s in g["sources"]}
        matrix[g["group"]] = {n: by_net.get(n) for n in networks}
    return networks, matrix
 
 
networks, matrix = build_matrix(groups)
for name, row in matrix.items():
    print(name, {n: (row[n]["type"] if row[n] else "-") for n in networks})

手元で実行すると、次のように並びます。

RWD-iOS-Wallpaper-JP {'admob_bidding': 'bidding', 'applovin': 'bidding', 'inmobi': 'bidding', 'liftoff': 'bidding', 'unity': 'waterfall'}
RWD-iOS-Wallpaper-US {'admob_bidding': 'bidding', 'applovin': 'bidding', 'inmobi': '-', 'liftoff': 'bidding', 'unity': 'waterfall'}
RWD-iOS-Ukiyoe-JP    {'admob_bidding': 'bidding', 'applovin': 'bidding', 'inmobi': 'bidding', 'liftoff': 'bidding', 'unity': 'waterfall'}
RWD-iOS-Healing-JP   {'admob_bidding': 'bidding', 'applovin': 'waterfall', 'inmobi': 'bidding', 'liftoff': 'bidding', 'unity': 'waterfall'}

- が1つ見えます。この段階で既に、目視では10 グループ目で見失ったものが視界に入っています。表にするというだけの操作ですが、点検の性質がここで変わります。

✦

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

この記事の続きを読む

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

この記事で得られること
✦設定表のような「抜け」を含むデータを、機械で確定させる部分と言語モデルに任せる部分に切り分けられるようになります
✦広告ネットワークの設定漏れを、収益が下がってから気づくのではなく公開前の数分の点検で拾えるようになります
✦responseSchema で受け取った判定をそのまま差分レポートに変換する実装を、自分のプロジェクトへ移せるようになります
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

◈ API / SDK2026-08-23
アプリに載せる AI 機能を、実行時呼び出しから配布前の一括処理に寄せました
アプリに Gemini を組み込むとき、実行時に呼ぶか配布前に呼び終えるかで呼び出し回数の増え方が変わります。素材数に比例させる設計へ切り替えた判断基準と、冪等な一括処理の実装をまとめました。
◈ API / SDK2026-05-18
Gemini Vision で壁紙アプリの自動カテゴリ分類を実装した話
個人開発の壁紙アプリで Gemini Vision API を使い、画像の自動カテゴリ分類を実装した実体験です。精度改善のプロセスと、公式ドキュメントには載っていない落とし穴、GPT-4o Vision とのコスト比較までまとめました。
◈ API / SDK2026-09-04
ループ音源のプチノイズは、Gemini に聴かせる前に波形の端で切り分けられます
環境音のループ再生で折り返しだけがプチッと鳴る。音声理解に丸ごと投げる前に、波形の端の段差を内部の変化量で正規化してふるい分ける手順と、配布形式への変換で継ぎ目が作り直される落とし穴をまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます