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-04-28中級

Rork アプリの収益モデル比較 — 広告・サブスク・買い切りを実運用の数字で選ぶ

壁紙系アプリの広告運用がピークを迎えた時期の実体験をもとに、Rork アプリの広告・サブスクリプション・買い切りを同一条件で試算し直し、ジャンル別の使い分けと実装の留意点を整理しました。

rork58monetization11admob4subscription10revenue-modelapp-store15google-play5indie-dev7rork-max41revenuecat2

プレミアム記事

深夜に AdMob の管理画面を開いて、国別の eCPM を並べて眺めていた時期があります。同じ壁紙アプリでも、米国のインプレッション単価は日本の2〜4倍。時間帯によっても入札額が波打ち、月末になると広告主の予算消化でふっと数字が持ち上がる。広告収益が月150万円を超えていたピークの頃も、この画面の数字が翌月には半分近くまで沈むことがあり、「収益モデルはひとつに依存してはいけない」という感覚は、このダッシュボードの前で身体に刻まれました。

Rork でアプリを作れるようになった今、企画段階で必ず突き当たるのが「広告か、サブスクか、買い切りか」という分岐です。私自身の運用経験から言えるのは、正解はジャンルと規模によって変わる一方で、明確な不正解のパターンは確実に存在するということ。ここから、3つのモデルを同一条件で試算し直し、ジャンル別の使い分けと Rork での実装の勘所を、実運用の数字とあわせて整理していきます。

3つのモデルの性格 — どこで収益が生まれ、どこで頭打ちになるか

広告(Ad-Based) は、ユーザーが無料で使える代わりに広告表示で収益を得るモデルです。ダウンロード数がそのまま収益基盤になるため、ストアの検索流入が強いジャンルと相性が良い。ただし1ユーザーあたりの価値は低く、体験を損なわない配置設計が生命線になります。

サブスクリプション(Subscription) は、定期課金でユーザーから直接収益を得るモデルです。利益率が高く、積み上がれば月次収益の予測可能性が格段に上がります。代償として「課金し続ける理由」を作り続ける開発体制が前提になり、チャーン(解約率)との長い付き合いが始まります。

買い切り(One-Time Purchase) は、1回だけ支払ってもらうモデルです。実装が最もシンプルで、課金状態の管理も軽い。ただし売上が新規獲得数に完全に依存するため、ダウンロードの伸びが止まると収益も止まります。

ニュースやミニゲーム集は広告向き、毎日使う生産性ツールはサブスク向き、単機能のユーティリティは買い切り向き。これが大枠ですが、後述する試算を見ると「規模のフェーズによって最適解が移動する」ことが分かります。

広告収益(AdMob)の実態 — eCPM・フィルレート・メディエーション

広告収益を左右する指標は eCPM(1,000インプレッションあたりの収益)と フィルレート(広告リクエストに対して実際に配信された比率)です。

日本の eCPM はジャンルにもよりますが、おおよそ $0.50〜$2.00。ゲーム系は高めで、ツール系は低い傾向です。北米・西欧は $2.00〜$8.00、東南アジアは $0.20〜$0.80 という相場感。私のアプリ群でも、ユーザーの地域構成が収益を大きく左右しました。日本向けに最適化したアプリの英語ローカライズを進めたのは、機能追加よりも「同じインプレッションの単価を上げる」ほうが投資対効果が高かったからです。

広告 SDK の選定 — expo-ads-admob はもう使えません

古い解説記事では expo-ads-admob を使った実装が紹介されていますが、このパッケージは Expo SDK から削除済みで、現在は動きません。Rork が生成する Expo プロジェクトで AdMob を使う場合、現行の標準は react-native-google-mobile-ads です。Expo Go では動作しないため、EAS Build での開発ビルドが前提になります。

npx expo install react-native-google-mobile-ads

app.json にはプラグイン設定で AdMob アプリ ID を登録します。

{
  "expo": {
    "plugins": [
      [
        "react-native-google-mobile-ads",
        {
          "androidAppId": "ca-app-pub-xxxxxxxx~xxxxxxxx",
          "iosAppId": "ca-app-pub-xxxxxxxx~xxxxxxxx"
        }
      ]
    ]
  }
}

リワード広告の最適配置

リワード広告はユーザーが「広告を見る」ことを主体的に選ぶため、完了率が高く eCPM も良好です。ミニゲーム系ならスコア画面に「コイン +100 をもらう代わりに広告を見る」ボタンを置く形が定番。生産性ツールなら「プレミアム機能を1回だけ無料で使うチケット」に応用できます。

現行 API での実装は次のようになります。読み込み完了を待ってから表示する、イベント購読を解除する、という2点を押さえておくと本番で事故が起きにくくなります。

// react-native-google-mobile-ads でのリワード広告実装
import { useEffect, useState } from 'react';
import { TouchableOpacity, Text } from 'react-native';
import {
  RewardedAd,
  RewardedAdEventType,
  TestIds,
} from 'react-native-google-mobile-ads';
 
// 本番では自分の Ad Unit ID に差し替える
const adUnitId = __DEV__ ? TestIds.REWARDED : 'YOUR_REWARDED_AD_UNIT_ID';
 
const rewarded = RewardedAd.createForAdRequest(adUnitId);
 
export const RewardAdButton = ({ onReward }: { onReward: (n: number) => void }) => {
  const [loaded, setLoaded] = useState(false);
 
  useEffect(() => {
    const unsubLoaded = rewarded.addAdEventListener(
      RewardedAdEventType.LOADED,
      () => setLoaded(true)
    );
    const unsubEarned = rewarded.addAdEventListener(
      RewardedAdEventType.EARNED_REWARD,
      (reward) => {
        onReward(reward.amount); // 例: コイン +100
      }
    );
    rewarded.load();
    return () => {
      unsubLoaded();
      unsubEarned();
    };
  }, [onReward]);
 
  return (
    <TouchableOpacity
      disabled={!loaded}
      onPress={() => {
        rewarded.show();
        setLoaded(false);
        rewarded.load(); // 次回分を先読み
      }}
    >
      <Text>{loaded ? '広告を見てコイン +100' : '読み込み中…'}</Text>
    </TouchableOpacity>
  );
};

インタースティシャル広告の頻度設計 — ポリシー警告から学んだこと

インタースティシャル(全画面広告)は eCPM が高く収益の主体になりやすい一方、配置を誤ると離脱とポリシーリスクの両方を抱えます。私は過去に一度、画面遷移のたびに全画面広告が出かねない実装を見落とし、AdMob からポリシー違反の警告を受けて緊急対応した経験があります。配信制限がかかれば収益はその瞬間からゼロに向かうので、頻度制御はコードで機械的に保証しておくべきです。

目安は「最後の表示から一定時間を空け、かつユーザーが2アクション以上進んでから」。これをクラスひとつで強制します。

// インタースティシャル広告の間隔管理
class AdFrequencyManager {
  private lastAdTime = 0;
  private actionCount = 0;
  private readonly minIntervalMs = 60_000; // 最低60秒
  private readonly minActionsBetweenAds = 2;
 
  canShowInterstitial(): boolean {
    return (
      Date.now() - this.lastAdTime > this.minIntervalMs &&
      this.actionCount >= this.minActionsBetweenAds
    );
  }
 
  recordAction(): void {
    this.actionCount += 1;
  }
 
  recordAdShown(): void {
    this.lastAdTime = Date.now();
    this.actionCount = 0;
  }
}
 
export const adManager = new AdFrequencyManager();

ピーク時の私の広告構成では、収益の大半をインタースティシャルが占め、バナーは1割程度の補助でした。それでも間隔制御は60秒より短くしませんでした。eCPM の高い広告ほど「出しすぎた瞬間に資産を毀損する」性質があると考えています。

メディエーションは管理画面で組む — クライアント側で入札させない

複数の広告ネットワークを束ねる メディエーション は、eCPM 改善の本命です。私の運用では AdMob を軸に Facebook Audience Network・Unity Ads・AppLovin・Pangle の4ネットワークを束ね、単独運用と比べて eCPM が体感で3〜5割改善しました。

注意したいのは、ネットワーク選択をアプリ側のコードで実装しようとしないことです。かつての私を含め、クライアントで各社の入札額を取得して比較する疑似ウォーターフォールを考えたくなりますが、これはレイテンシとポリシーの両面で筋が悪い。現在の AdMob はメディエーショングループを管理画面で構成し、入札(bidding)はサーバー側で行われます。アプリ側の作業は各ネットワークのアダプタを依存に追加することだけで、広告リクエストのコードは1ネットワークのときと変わりません。

# アダプタの追加例(ネットワークごとに公式アダプタを入れる)
npm install react-native-google-mobile-ads
npm install @react-native-admob/admob-mediation-unity
# 以降、AdMob 管理画面のメディエーショングループに各ネットワークを登録する

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

この記事の続きを読む

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

この記事で得られること
広告・サブスク・買い切りを MAU 5,000 の同一条件で試算した現実的な月次収益モデルと、よくある試算の落とし穴(日次と月次の取り違え・MAU と新規数の混同)の補正方法
AdMob メディエーション4ネットワーク構成と国別 eCPM 変動の実運用知見、ポリシー警告を受けた際の緊急対応から学んだ広告配置の安全設計
Rork(Expo)と Rork Max(Swift)それぞれでの課金実装の使い分けと、手数料を 30% から 15% に下げる Small Business Program の適用条件
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

ビジネス2026-05-06
Google Play サブスクリプションオファーで解約を防ぎ収益を最大化する:Rork アプリ実践ガイド
Google Play のサブスクリプションオファー機能(無料トライアル・入門価格・アップグレードオファー・ウィンバックオファー)を活用して、Rorkで開発したアプリの収益を最大化する実践的な設定・実装ガイド。
ビジネス2026-04-28
Rork Max で SwiftUI ネイティブアプリを収益化する — App Store 審査攻略からサブスクリプション設計まで
Rork Max の SwiftUI ネイティブコード生成を活用してiOSアプリを構築し、App Store審査を通過してサブスクリプション収益を得るまでの全工程を、実際のコードと審査対策付きで解説します。
ビジネス2026-03-22
Rork Max 収益化完全戦略 — サブスクリプション設計からApp Store最適化まで
Rork Maxで開発したアプリの収益化を徹底解説。StoreKit 2によるサブスクリプション実装、価格設定戦略、App Store最適化、広告統合まで、プロの収益化テクニック集です。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →