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-05-23中級

App Store と Google Play のレビュー差分を Gemini で出す運用を6週間続けた所感

App Store と Google Play のレビューを Gemini API で並列に分類し、プラットフォーム間の差分から優先改善項目を抽出する運用を6週間続けた記録です。累計5,000万DLの壁紙アプリで実際に見えた3つのプラットフォーム差と、月の運用コストを共有します。

gemini-api279app-store7google-play3structured-output20individual-developmentreview-analysis

「同じアプリのはずなのに、なぜ App Store では『写真が綺麗』が並び、Google Play では『広告が多い』が上位にくるのか」——この違和感を6週間追いかけて、ようやく自分の中で答えが出ました。

私は2014年から累計5,000万DLを超える壁紙アプリを個人で開発しています。レビュー対応は手動で続けてきましたが、ストアごとに何が問題視されているかの輪郭がぼんやりしたままでした。Gemini API の Structured Output が出てからは個別のレビュー分類はだいぶ楽になっていたのですが、「ストア横断の差分」を見るところまでは手が回っていませんでした。

この記事は、その差分を Gemini API で6週間出し続けてみた運用記録です。出来上がったパイプラインは1日あたり数百件の新規レビューを月60円ほどで処理できるところまで落ち着きました。そこに至るまでに、いくつか想定外の発見もありました。

なぜストア横断の差分が必要だと感じたか

きっかけは2026年4月の Beautiful HD Wallpapers v2.1.0 リリースのあとでした。App Store のレビューでは「ロック画面の写真の発色が好き」というポジティブな声が増えていたのに、Google Play では「全画面広告の頻度が増えた」というネガティブな声が静かに積み上がっていました。

iOS と Android で広告 SDK のバージョンも頻度設定もほぼ同じにしているつもりでも、実機端末のスペック差・ネットワーク条件・OS の挙動の違いで、ユーザーが体感する広告頻度は別物になります。AdMob の管理画面では impressions として一括で見えますが、ユーザーの主観は別軸の話です。

両ストアのレビューを個別に分類していたのでは、この温度差に気づくのが遅れます。同じ4月の同じ週のレビューを横並びで比較し、「片方では言及されていないが片方では頻出」というカテゴリを抽出する仕組みが必要でした。

両家の祖父がともに宮大工で、「同じ材木でも、置く向きが違えば反り方が違う」とよく聞かされたことを思い出します。アプリも同じで、同じコードベースでも置く土俵が違えばユーザーの感じ方は変わる、と捉え直しました。

6週間の運用構成 — 取得・分類・差分の3段パイプライン

運用は次の3段で組みました。1段目は App Store Connect API と Google Play Developer API からの取得。2段目は Gemini 2.5 Flash Lite による個別レビューの構造化分類。3段目は Gemini 2.5 Pro によるストア横断の差分要約です。

1段目の取得は、cron で1日2回、過去24時間分のレビューを取りに行く構成にしました。App Store Connect 側は customerReviews エンドポイントを localizations 付きで叩き、Google Play 側は reviews.listtranslationLanguage=ja 付きで叩きます。

2段目の Flash Lite による分類は、レビュー1件ずつに次のスキーマを当てます。

from pydantic import BaseModel
from typing import Literal
 
class ReviewClassification(BaseModel):
    sentiment: Literal["positive", "neutral", "negative"]
    primary_category: Literal[
        "wallpaper_quality",
        "ad_experience",
        "search_filter",
        "download_save",
        "battery_storage",
        "subscription",
        "crash_stability",
        "ui_navigation",
        "language_support",
        "other",
    ]
    severity: Literal["low", "medium", "high"]
    user_intent: Literal["bug_report", "feature_request", "praise", "complaint", "question"]
    one_line_summary: str

severity は「他のユーザーにも起きていそうか」「課金行動に影響しそうか」を踏まえた重み付けに使います。Flash Lite に判定を任せるとブレが心配でしたが、6週間運用したかぎり大カテゴリの判定はほぼ安定しました。

3段目の差分要約は、Pro モデルに「直近7日間の iOS 側カテゴリ別出現頻度」と「Android 側カテゴリ別出現頻度」を表で渡し、platform_only_topics(片方だけに出ているカテゴリ)と gap_signals(両方に出ているが温度差が大きいカテゴリ)を構造化して返してもらいます。

Gemini に差分を出させるプロンプトの組み立て方

Pro 側に渡すプロンプトでは、次の3点を明示しました。

1つ目は「同義カテゴリの再正規化を許す」こと。Flash Lite が ui_navigation と分類したものと search_filter と分類したものが、人間の目では同じ問題を指していることがあります。Pro 側で再正規化させる前提で、「カテゴリの粒度は柔軟に扱ってよい」と伝えました。

2つ目は「件数より割合で語る」こと。レビュー全体数が iOS と Android で違うため、絶対件数で比べると iOS の指摘が常に少なく見えます。「カテゴリ別出現割合の差分を主に見る」「両ストアで出現割合が3ポイント以上ズレているカテゴリに注目する」と数値の閾値を指示しました。

3つ目は「課金導線への影響を別軸で評価する」こと。サブスク継続率に直結しそうな指摘は、出現頻度が低くても優先順位を上げて欲しい、と明示しました。eCPM や LTV といったメトリクスは Gemini が裸の数字として理解できるので、運用上の重要度を言葉ではなく数字で伝えるとブレが小さくなります。

6週間で実際に見えた3つのプラットフォーム差

6週間運用して、ストア間で顕著な差が出たカテゴリが3つありました。

1つ目は広告体験の体感差です。Android 側では ad_experience カテゴリのネガティブが iOS 側より約7ポイント多く出ていました。掘り下げてみると、ネットワークが遅い端末で全画面広告のスキップボタンが表示されるまでの待ち時間が体感差を生んでいることが、Gemini の要約から読み取れました。これは AdMob のメディエーション設定で Rewarded Interstitial の優先度を下げる方向で調整しました。

2つ目は検索・フィルタ機能への要望差です。iOS 側では「カテゴリ追加」「お気に入り並び替え」が上位に来ていたのに、Android 側ではこれらがほぼ言及されていませんでした。プラットフォーム別のヘビーユーザー層の違いか、UI 配置の差で気づかれていないか、どちらかと推測しています。次の v2.2.0 では Android 側でカテゴリ機能の発見性を高める変更を入れる予定です。

3つ目は言語サポートへの言及です。Android 側で韓国語・中国語簡体字のローカライズ抜けの指摘が iOS の倍くらい出ていました。Google Play は地域配信のローカライズ要件が厳しいぶん、ユーザーがローカライズの粗に敏感だと感じます。

レビュー1件あたり0.05円で回る運用コストと、人手に残した部分

6週間の運用コストは月60円前後で安定しました。1日あたり新規レビュー300件として、Flash Lite による分類が約20円/月、週次の Pro による差分要約が約40円/月の内訳です。Implicit Caching が効くようにシステムプロンプトを固定したことで、Pro 側のコストは想定より1/3ほどに収まりました。

ただし、すべてを自動化するつもりはありません。3つだけ人手に残した部分があります。1つ目は、severity: high かつ user_intent: bug_report のレビューに対する初期返信。2つ目は、新機能リリース直後1週間のレビュー全件目通し。3つ目は、差分要約から優先改善項目を確定させる週次の30分。

1997年に16歳で初めてインターネットに繋いだ頃、海外フォーラムで質問して英語の返事をもらえたあの感覚を、いまも忘れたくないと思っています。レビュー一件にも書いた人の生活があって、自動分類で済ませてしまうのは何かを失う気がしました。

ここから先に取り組むこと

このパイプラインは6週間で形になりましたが、まだ拡張の余地があります。

直近で取り組みたいのは、レビュー差分から自動で TestFlight ベータ向けの改善案候補を生成し、エンジニアリング側の優先度キューに流すところまでの一気通貫です。それと、Google Play 側の appVersion パラメータを使ってバージョン別の温度変化を追えるようにすること。v2.1.0 から v2.2.0 にかけて広告体感がどう変わったかを定量的に追えるようになると、リリース判断の確度がもう一段上がります。

レビュー対応は地味な作業に見えて、12年やってきて改めて、アプリ事業のなかで最もユーザーの本音に近い活動だと感じています。Gemini はその本音を読み解く補助線として、いまのところとても相性がよいです。

シェア

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

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

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

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

API / SDK2026-05-16
App Store / Google Play のレビュー返信を Gemini API で自動化したときにはまった「8秒ルール」
5,000万DLのアプリ群を運営する中でGemini APIによるレビュー返信自動化を試みた実装記録。多言語対応の設計と、App Storeで8秒以上待機しないとペナルティを受けるという落とし穴を共有します。
API / SDK2026-07-13
responseSchema で $ref が使えず詰まったら — responseJsonSchema で再帰スキーマを本番で扱う
Gemini の responseSchema は OpenAPI サブセットで $ref/$defs が使えず、共有定義も再帰も表現できません。responseJsonSchema へ移行し、多言語フィールドの再利用とカテゴリ木の再帰を本番で扱う実装をまとめました。
API / SDK2026-07-05
使っているモデルの廃止予告だけを拾う — url-context に公式チェンジログを読ませる仕組み
画像モデルの停止を公開3日前に知って肝を冷やしました。url-context に公式チェンジログを直接読ませ、自分が実際に使っているモデルの廃止予告だけを構造化して差分通知する仕組みを、そのまま動く Python と運用で削った過検知の調整まで含めて組み立てます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →