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-06-02上級

広告の本当のeCPMを自分で測る — Impression-Level Ad Revenue を計測基盤に流し込む実装記録

AdMob の管理画面が見せる平均eCPMだけでは、どの地域やプレースメントが本当に稼いでいるかは分かりません。1インプレッションごとの収益を paidEventListener で受け取り、解析基盤に流して本当のeCPMを出すまでの実装と運用をまとめました。

React Native209AdMob70メディエーション10収益分析設計8

プレミアム記事

きっかけは、6本並行で運用している壁紙アプリのうち、収益が伸び悩んでいた1本のメディエーション設定を見直そうとして、AdMob の管理画面を開いたときでした。ネットワークごとの平均eCPMは並んでいます。AdMob が高い、AppLovin がそこそこ、Pangle は低め。では、その数字を信じて Pangle のフロアを下げるべきでしょうか。

手が止まりました。管理画面が見せているのは「そのネットワークが、すべての地域・すべてのプレースメントを混ぜた平均」です。私のアプリは日本のユーザーが6割、残りが北米と東南アジアに散らばっています。インタースティシャルとアプリ起動時広告では単価がまるで違います。混ぜた平均で「Pangle は低い」と判断して切り捨てると、実は東南アジアのバナーで Pangle だけが埋めてくれていた在庫を、まるごと空にしてしまうかもしれません。

2014年から個人開発を続けて累計5,000万ダウンロードを超えるなかで、広告収益については長いあいだ「管理画面の数字を眺めて勘で調整する」をくり返してきました。この記事は、その勘を捨てて、1インプレッションごとの収益を自分の計測基盤に取り込み、ネットワーク×プレースメント×地域で「本当のeCPM」を出せるようにした実装の記録です。

なぜ管理画面の平均eCPMでは判断を誤るのか

eCPMは「1,000インプレッションあたりの収益」です。管理画面はこれをネットワーク単位、日単位で集計して見せてくれます。便利なのですが、メディエーションの優先度やフロア(最低落札価格)を決めるには粒度が粗すぎます。

問題は3つあります。第一に、地域差が平均に埋もれます。同じバナー1枠でも、北米のインプレッション単価は日本の数倍、東南アジアの数分の一になることが普通です。第二に、プレースメント差が埋もれます。起動時広告と記事下バナーでは、ユーザーの注意の量が違うので単価も違います。第三に、メディエーションの「勝者」しか管理画面の収益には現れないため、「このネットワークを切ったら、その在庫を誰が拾うのか」が平均値からは読めません。

つまり、フロアや優先度という「プレースメント×地域×ネットワーク」の3次元で効く操作を、管理画面が見せる1次元(ネットワーク平均)で決めようとしているのが、判断を誤る根本でした。必要なのは、自分のアプリの中で、1インプレッションが実際にいくら稼いだかを記録することです。

Impression-Level Ad Revenue は何を返すのか

AdMob には Impression-Level Ad Revenue(ILRD、インプレッションレベル広告収益)という仕組みがあり、広告が表示されるたびに、その1インプレッションの推定収益を端末側のコールバックで受け取れます。react-native-google-mobile-ads では、各広告オブジェクトの paidEventListener がこれを担当します。

コールバックが返すのは主に次の値です。value(収益額。ただしマイクロ単位=実額の100万倍の整数)、currencyCode("USD" や "JPY" などの通貨コード)、precision(推定精度。ESTIMATED / PUBLISHER_PROVIDED / PRECISE など)、そしてメディエーションのアダプター情報(どのネットワークが落札したか)です。

ここで最初の落とし穴があります。value はマイクロ単位なので、value / 1_000_000 で初めて通貨単位の金額になります。そして currencyCode はアカウント設定や入札ネットワークによって USD で返ることも JPY で返ることもあります。この2点を取り違えると、収益が桁違いにずれます。私は実際にやりました(後述します)。

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

この記事の続きを読む

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

この記事で得られること
管理画面の平均eCPMが判断を誤らせる理由と、Impression-Level Ad Revenue で1インプレッション単位の収益を取る実装(react-native-google-mobile-ads の paidEventListener 実コード)
通貨コードとマイクロ単位を取り違えて収益を1,000,000倍/100倍ずれさせた私の失敗と、正規化のBefore/After
ネットワーク×プレースメント×地域で本当のeCPMを集計し、入札フロアとメディエーション優先度に反映するまでの運用ルール
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

開発ツール2026-06-01
起動時間を『予算』として管理する — 6本のアプリでSDK初期化を後ろ倒しにした設計記録
起動時間を場当たり的に速くするのではなく、フェーズごとに予算を割り当てて守る運用に切り替えた記録です。Rork で書き出した6本のアプリでSDK初期化を後ろ倒しにし、CIで予算超過を止めるまでをまとめました。
開発ツール2026-07-14
AI再生成に壊されない設計 — Rork の生成コードと手書きロジックを分ける境界の引き方
Rork へ追加指示を出すたびに手書きのロジックが消える。プロンプトで守るのは対症療法です。生成コードと自分の所有コードを層で分け、再生成が届かない境界を設計で引く方法を、Zustand と service 層の実装例つきでお伝えします。
開発ツール2026-06-22
壊れたキャッシュで毎回起動時に落ちるアプリ——ユーザーが自力で抜け出せる「セーフモード起動」を設計する
永続化したキャッシュが壊れて起動のたびに同じ場所で落ちると、ユーザーには再インストールしか残りません。アプリ自身が早期クラッシュの連続を数え、対話可能になって初めて起動を確定し、危険な状態だけを段階的にリセットするセーフモードを、Expo(React Native)の実装で設計します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →