RORK LABEN
TOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しましたTOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しました
記事一覧/開発ツール
開発ツール/2026-05-18上級

Rork × Firebase Remote Config で AdMob を本番のまま安全に切り替える — 起動広告と頻度キャップを「リリースなし」で動かす運用

壁紙アプリ運用で起動広告を強くしすぎて DAU が落ちた経験から、AdMob のフォーマット配信比率・頻度キャップ・除外条件を Firebase Remote Config で扱う設計をまとめました。Expo/Rork での実装、フェイルセーフ、A/B、指標の繋ぎ込みまで。

Rork515AdMob70Firebase Remote Config2Expo149個人開発186収益化66

プレミアム記事

起動した瞬間に広告が出るアプリが嫌いです。自分でも壁紙アプリの起動広告(App Open Ads)を強くしすぎて、想定外に DAU が落ちた経験があります。リリースしてから 1 週間ほど見ていて、ようやく「広告ではなくユーザーが消えていた」と気づいた、あの時の重さを今もよく覚えています。

このとき痛感したのは、広告まわりの設定は「リリースの粒度より細かく動かしたい」ということでした。Apple や Google の審査を待ってから 30 秒のインターバルを 60 秒に変える、という運用は、個人開発のスピード感に合わありません。本番アプリのまま、コードを変えずに、広告の出し方だけを徐々に調整したい。

その後、Rork で作った新しい壁紙アプリでも同じ問題に直面したとき、私は Firebase Remote Config を「広告の契約書」として使う設計 に切り替えました。AdMob のフォーマット出し分け、頻度キャップ、初日除外、ATT/UMP との順序まで、すべてリリース不要で動かせるようにしてあります。この設計に落ち着くまでに踏んだ落とし穴と、12 年の AdMob 運用で身についた「広告は静かに調整する」という作法を、この記事にまとめておきます。

なぜ AdMob は Remote Config と相性が良いのか

AdMob の設定は、AdMob 管理画面側でも一部はリリースなしで変えられます。たとえばユニットの有効/無効や、ad unit の単価フロアは管理画面から触れます。ただし、アプリ側のロジック — 起動広告を出すかどうか、何秒間隔で出すか、どの画面遷移で出すか、初日のユーザーを除外するか — はコードに書かれていて、リリース不要で動かす仕組みを自分で用意しないと変えられません。

Firebase Remote Config はここに綺麗にハマります。

  • 値はサーバー側に保管され、起動時に取りに行く
  • パラメータ単位で条件分岐できる(OS/バージョン/国/プロパティ/オーディエンス)
  • Firebase A/B Testing と直結していて、抽出されたバケットごとに値を出し分けられる
  • Crashlytics・Analytics と並んで Firebase の同じプロジェクトに同居する

2014 年から個人アプリ開発を続けていて、累計 5,000 万 DL を超えるまで色々な収益化の試行錯誤をしてきましたが、「広告ロジックをアプリのリリースから切り離せたかどうか」が、その後の精神的余裕を大きく左右する分岐点でした。リリースに紐付いた広告ロジックは、いざ何かあったときに戻すコストが大きく、慎重さがどんどん増していきます。

設計:Remote Config を「フラグ集」ではなく「広告契約」として扱う

最初の頃、私は Remote Config を enable_admob のような単純なブール値の置き場として使っていました。これは扱いが楽な一方、出せる工夫が限られます。やがて、広告の運用は「契約書」のような構造として扱うほうがずっと自然だと考えるようになりました。

ここでいう「契約」は、たとえば次のようなパラメータ群です。

  • ad_config_version:契約のバージョン番号(後述する分析で必須)
  • show_app_open:起動広告を出すか
  • app_open_min_interval_sec:起動広告の最小インターバル秒
  • app_open_first_session_excluded:初回起動セッションを除外するか
  • interstitial_after_n_screens:n 画面遷移ごとに出す(0 で停止)
  • rewarded_optin_position:リワード広告の導線を出す位置(detail / tab / none
  • paywall_probability:ペイウォール導線を出す確率(0.0〜1.0)

ポイントは、これらを TypeScript の型で固める ことです。Remote Config の値は何でも入れられる代わりに、何が入っているかコード側で保証されません。型の枠を先に作り、Remote Config の値はそこに当てはめる方針にしておくと、3 か月後の自分が壊さずに済みます。

// types/AdConfig.ts
export type AdConfig = {
  ad_config_version: number;
  show_app_open: boolean;
  app_open_min_interval_sec: number;
  app_open_first_session_excluded: boolean;
  interstitial_after_n_screens: number;
  rewarded_optin_position: "detail" | "tab" | "none";
  paywall_probability: number;
};
 
export const DEFAULT_AD_CONFIG: AdConfig = {
  ad_config_version: 1,
  show_app_open: true,
  app_open_min_interval_sec: 60,
  app_open_first_session_excluded: true,
  interstitial_after_n_screens: 5,
  rewarded_optin_position: "detail",
  paywall_probability: 0.0,
};

デフォルト値は 安全側(保守的) に振っておきます。後で詳しく触れますが、これは Remote Config が取れなかったときに過剰広告で事故らないためのフェイルセーフです。

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

この記事の続きを読む

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

この記事で得られること
AdMob のフォーマット出し分け・頻度キャップ・除外条件を Remote Config の「広告契約」として型化する設計
Expo/Rork で fetchAndActivate を初期化フローに組み込み、起動を遅らせない fail-closed 実装
Firebase A/B Testing と AdMob 指標を ad_config_version で結びつけ、3 日単位で判定するための監視構成
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

開発ツール2026-06-15
「広告を消す理由」が3つに増えた日 — Rork アプリの広告非表示判定を1か所に畳む設計
課金していないはずの画面だけ広告が出る、あるいは課金済みの読者に広告が出てしまう。原因の多くは「広告を消す条件」がコードのあちこちに散らばっていることでした。サブスク・買い切り・リワード時限解除の3つを1つの状態に畳み、すべての広告表示を同じフックに通す設計を、個人開発で6本のアプリを運用してきた実装メモとしてまとめます。
開発ツール2026-05-26
Rork で生成した壁紙アプリを iPad へ対応させた2週間の所感
2014年から壁紙アプリを iPhone 中心で運用してきた個人開発者として、Rork で立ち上げた新規壁紙アプリを iPad に対応させる作業を2週間続けた記録です。AdMob アダプティブバナーの暴れ方、Safe Area の盲点、グリッド表示の解像感まで、運用の温度のまま書き残しました。
開発ツール2026-05-19
クラッシュ率上昇時にAdMobを自動で絞る『収益を守る自動制動』アーキテクチャ — Rork × Firebase Remote Config × Crashlytics の連動設計
クラッシュ率が跳ね上がった瞬間、ユーザーに広告を出し続けて評価を落とすか、いったん広告を絞って安定性を守るか。12年の個人開発運用で出した答えは、Firebase Remote Config と Crashlytics のシグナルを AdMob に連動させる4状態の自動制動アーキテクチャでした。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →