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-08中級

Rork アプリで AdMob 広告が表示されない原因と解決法 — 収益が反映されない問題の対処法

Rorkで開発したアプリにAdMob広告が表示されない・収益が反映されない問題を解決。テストIDの設定ミス、app-ads.txt未設定、ポリシー違反など主要な原因と具体的な修正手順を解説します。

troubleshooting25error5fix5admob4monetization11adsreact-native12

AdMob 広告が表示されない — よくある症状と全体像

Rork で作成したアプリに AdMob 広告を実装したのに、実機で広告が一切表示されません。あるいは表示されていたはずの広告が突然消えた。さらには AdMob ダッシュボードに収益が反映されていません。こうした問題は、個人開発者にとって収益に直結するため、一刻も早く解決したいところです。

AdMob 広告が表示されない原因は大きく分けて以下の5つのカテゴリに分類できます。

  • 設定ミス: アプリ ID や広告ユニット ID の誤り、テスト ID のまま本番に出している
  • ポリシー関連: app-ads.txt の未設定、AdMob ポリシー違反によるアカウント制限
  • 実装の問題: React Native / Expo の広告コンポーネント設定不備
  • ネットワーク・環境: 広告在庫なし、地域制限、VPN の影響
  • 審査・反映待ち: 新規広告ユニットの反映に最大1時間かかるケース

原因1: AdMob アプリ ID・広告ユニット ID の設定ミス

最も多い原因がこの ID の設定ミスです。AdMob では「アプリ ID」と「広告ユニット ID」の2種類があり、混同すると広告が表示されません。

アプリ ID の確認

AdMob コンソール(apps.admob.com)にログインし、対象アプリの設定画面で「アプリ ID」を確認します。形式は以下の通りです。

  • iOS: ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX
  • Android: ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX

Rork で Expo を使用している場合、app.json または app.config.js に正しく設定されているか確認しましょう。

// app.json — AdMob アプリIDの設定
{
  "expo": {
    "plugins": [
      [
        "react-native-google-mobile-ads",
        {
          "androidAppId": "ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX",
          "iosAppId": "ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX"
        }
      ]
    ]
  }
}
// 期待結果: ビルド後にAdMob SDKが正しく初期化される

広告ユニット ID の確認

広告ユニット ID はアプリ ID とは別の値です。バナー、インタースティシャル、リワードそれぞれに固有の ID が発行されます。

// 広告ユニットIDの定数管理(推奨パターン)
const AD_UNIT_IDS = {
  banner: {
    ios: 'ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX',
    android: 'ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX',
  },
  interstitial: {
    ios: 'ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX',
    android: 'ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX',
  },
  rewarded: {
    ios: 'ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX',
    android: 'ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX',
  },
} as const;
 
// プラットフォーム判定
import { Platform } from 'react-native';
const bannerAdUnitId = Platform.select(AD_UNIT_IDS.banner);
// 期待結果: iOS/Androidそれぞれ正しいユニットIDが選択される

テスト広告 ID を本番で使用していないか

開発中はテスト広告 ID を使いますが、リリースビルドでテスト ID のままだと「テスト広告」すら表示されなくなるケースがあります。環境変数で切り替える仕組みにしておくと安全です。

// 環境に応じた広告ID切り替え
const getAdUnitId = (type: 'banner' | 'interstitial' | 'rewarded') => {
  if (__DEV__) {
    // テスト広告ID(Google公式提供)
    const testIds = {
      banner: 'ca-app-pub-3940256099942544/6300978111',
      interstitial: 'ca-app-pub-3940256099942544/1033173712',
      rewarded: 'ca-app-pub-3940256099942544/5224354917',
    };
    return testIds[type];
  }
  // 本番広告ID
  return Platform.select(AD_UNIT_IDS[type]);
};
// 期待結果: 開発時はテスト広告、本番は実際の広告が表示される

原因2: app-ads.txt の未設定・不備

app-ads.txt は、あなたのアプリで広告を配信する権限を持つネットワークを宣言するファイルです。これが正しく設定されていないと、広告リクエストが拒否され収益が発生しません。

app-ads.txt の設置手順

  1. AdMob コンソールの「アプリ」→「app-ads.txt」タブから、あなた専用のスニペットをコピー
  2. アプリの開発者ウェブサイトのルートディレクトリに app-ads.txt を配置
  3. App Store Connect / Google Play Console に登録しているウェブサイト URL と一致させる
# app-ads.txt の例
# AdMob のパブリッシャーID を含む行(AdMobコンソールからコピー)
google.com, pub-XXXXXXXXXXXXXXXX, DIRECT, f08c47fec0942fa0

確認方法

ブラウザで https://あなたのサイト.com/app-ads.txt にアクセスし、正しく表示されるか確認します。AdMob コンソールの「app-ads.txt」タブでステータスが「確認済み」になっていれば成功です。

反映には最大24時間かかることがあるため、設置直後に広告が出なくても慌てずに待ちましょう。

原因3: React Native / Expo での実装不備

Rork で生成されたアプリは React Native + Expo ベースのため、広告 SDK の設定にいくつかの注意点があります。

react-native-google-mobile-ads のインストール確認

# パッケージがインストールされているか確認
npx expo install react-native-google-mobile-ads
 
# Expo の config plugin が正しく適用されているか確認
npx expo config --type introspect | grep -A5 "google-mobile-ads"
# 期待結果: androidAppId と iosAppId が表示される

EAS Build でのネイティブモジュール再構築

Expo Go ではネイティブ広告 SDK は動作しません。必ず EAS Build(Development Build)で実機テストしてください。

# Development Buildの作成
eas build --profile development --platform ios
eas build --profile development --platform android
 
# ビルド後、実機にインストールしてテスト
# 期待結果: テスト広告バナーが画面下部に表示される

広告コンポーネントの正しい実装例

// components/BannerAd.tsx — バナー広告コンポーネント
import React, { useState } from 'react';
import { View, Text, StyleSheet } from 'react-native';
import {
  BannerAd as RNBannerAd,
  BannerAdSize,
  TestIds,
} from 'react-native-google-mobile-ads';
 
interface Props {
  adUnitId?: string;
}
 
export const BannerAdComponent: React.FC<Props> = ({ adUnitId }) => {
  const [adLoaded, setAdLoaded] = useState(false);
  const [adError, setAdError] = useState<string | null>(null);
 
  const unitId = __DEV__ ? TestIds.BANNER : (adUnitId ?? '');
 
  if (!unitId) {
    return null; // 広告IDが未設定の場合は何も表示しない
  }
 
  return (
    <View style={styles.container}>
      {adError && (
        <Text style={styles.errorText}>
          広告の読み込みに失敗しました: {adError}
        </Text>
      )}
      <RNBannerAd
        unitId={unitId}
        size={BannerAdSize.ANCHORED_ADAPTIVE_BANNER}
        requestOptions={{
          requestNonPersonalizedAdsOnly: true,
        }}
        onAdLoaded={() => {
          setAdLoaded(true);
          setAdError(null);
          console.log('✅ バナー広告の読み込み成功');
        }}
        onAdFailedToLoad={(error) => {
          setAdError(error.message);
          console.error('❌ バナー広告の読み込み失敗:', error);
        }}
      />
    </View>
  );
};
 
const styles = StyleSheet.create({
  container: {
    alignItems: 'center',
    marginVertical: 8,
  },
  errorText: {
    color: '#ef4444',
    fontSize: 12,
    marginBottom: 4,
  },
});
// 期待結果: 広告が正常に読み込まれるとコンソールに成功ログが出力される

よくあるエラーコード一覧

広告の読み込みに失敗した場合、onAdFailedToLoad コールバックでエラーコードを確認できます。

  • ERROR_CODE_NO_FILL(コード3): 広告在庫がありません。時間を置いて再試行、または別の広告フォーマットを試す
  • ERROR_CODE_NETWORK_ERROR(コード2): ネットワーク接続エラー。Wi-Fi/モバイルデータの接続を確認
  • ERROR_CODE_INVALID_REQUEST(コード1): リクエストが無効。広告ユニット ID を再確認
  • ERROR_CODE_INTERNAL_ERROR(コード0): SDK 内部エラー。アプリの再起動やSDKのバージョンアップを試行

原因4: AdMob アカウント・ポリシーの問題

広告が突然表示されなくなった場合は、AdMob のポリシー違反が疑われます。

AdMob ポリシーセンターの確認手順

  1. AdMob コンソール → 左メニュー「ポリシーセンター」を開く
  2. 警告やポリシー違反の通知がないか確認
  3. 「アプリのレビュー」セクションで各アプリのステータスを確認

よくあるポリシー違反と対処法

  • 無効なトラフィック: 自分で広告をクリックした、テスト中に繰り返し広告を表示した → テスト時は必ずテスト広告 ID を使用する
  • コンテンツポリシー違反: アダルトコンテンツ、暴力的コンテンツを含むアプリ → コンテンツを修正し、再審査をリクエスト
  • 広告の配置違反: ユーザーの誤クリックを誘導する配置 → 広告とコンテンツの間に十分な余白を設ける
  • アプリが審査中: 新規アプリは AdMob 側の審査が完了するまで広告が配信されない → ステータスが「準備完了」になるまで待つ

収益が反映されない場合

AdMob ダッシュボードの収益は最大48時間遅延する場合があります。また、無効なトラフィックと判定されたクリック/インプレッションは収益から差し引かれます。

「見積もり収益額」と「確定収益額」には差が生じることがあります。確定収益はその月末に確定し、翌月21日頃に支払いが行われます。

原因5: 広告在庫とネットワーク環境の問題

技術的な実装が正しくても、広告が表示されないケースがあります。

広告在庫不足(No Fill)

特に日本以外の地域や、ニッチなカテゴリのアプリでは広告在庫が少ないことがあります。対策として、AdMob メディエーションを導入し、複数の広告ネットワーク(Meta Audience Network、Unity Ads、AppLovin など)を追加することで、フィルレートを向上させられます。

VPN・プロキシの影響

開発中に VPN を使用していると、広告配信に影響が出ることがあります。テスト時は VPN をオフにして確認しましょう。

新規広告ユニットの反映時間

新しく作成した広告ユニット ID は、反映されるまで最大1時間かかります。広告ユニットを作成した直後にテストしても表示されない場合は、しばらく待ってから再試行してください。

解決できたかの確認手順

すべての修正を行ったら、以下のチェックリストで動作確認します。

  1. app.json のアプリ ID が AdMob コンソールと一致している
  2. 広告ユニット ID が正しいプラットフォーム用のものである
  3. app-ads.txt がウェブサイトのルートに公開されている
  4. EAS Build(Development Build)で実機テストしている(Expo Go は不可)
  5. テスト広告(TestIds.BANNER など)で正常に表示される
  6. 本番ビルドで本番広告 ID に切り替わっている
  7. AdMob ポリシーセンターに警告がない
  8. AdMob コンソールでアプリのステータスが「準備完了」である
# 実機でのログ確認(iOS)
npx react-native log-ios | grep -i "admob\|ad\|google"
 
# 実機でのログ確認(Android)
adb logcat | grep -i "admob\|Ads\|Google"
# 期待結果: "Ad loaded successfully" または広告関連のエラーログが確認できる

再発防止のベストプラクティス

問題を解決したら、今後同じトラブルに遭わないための予防策を導入しましょう。

  • 環境変数で広告 ID を管理: ハードコードを避け、.env ファイルと app.config.js で管理する
  • テスト用と本番用の明確な分離: __DEV__ フラグでテスト ID と本番 ID を自動切り替え
  • CI/CD での広告 ID チェック: ビルドパイプラインにアプリ ID の整合性チェックを追加
  • 定期的な AdMob ダッシュボード確認: 週1回はポリシーセンターと収益レポートを確認
  • エラーログの収集: Rork アプリのクラッシュ監視を自動化する — Sentry 完全セットアップガイドを参考に、広告関連のエラーも監視対象に含める

全体を振り返って

AdMob 広告が表示されない問題は、設定ミス・ポリシー違反・実装不備・環境要因のいずれかに起因することがほとんどです。本記事で紹介したチェックリストを上から順に確認すれば、大半のケースで原因を特定できるはずです。

広告収益はアプリのマネタイズにおいて重要な柱です。正しい実装と定期的なモニタリングで、安定した収益基盤を築いていきましょう。AdMob 以外の収益化手法も含めた総合的な戦略については、Rork AIアプリ収益化完全戦略も参考にしてみてください。

広告収益の最大化やモバイルアプリのマネタイズ戦略

シェア

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

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

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

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

関連記事

アプリ開発2026-05-31
Rorkアプリを Google Play にアップロードできない署名キーエラーの直し方
Rorkで作ったアプリを Google Play にアップロードすると「間違った鍵で署名されています」と弾かれる——よくある署名キーの不一致エラーについて、原因の見分け方と環境別の具体的な対処手順を整理しました。
アプリ開発2026-04-09
RorkアプリのAndroidビルドエラー解決ガイド — Gradle・SDKエラーの原因と対処法
RorkアプリのAndroidビルドでGradleエラーやSDKバージョン不一致が発生して困っていませんか?症状別の原因分析と具体的な解決手順をStep by Stepで解説します。
開発ツール2026-04-08
Rorkアプリ内課金(IAP)設定エラーの原因と解決方法【StoreKit・RevenueCat対応】
Rorkアプリでアプリ内課金(IAP)が動かない・テストできないエラーの原因と解決方法を徹底解説。StoreKit設定ミス・RevenueCatのAPI Key問題・Sandboxテスト失敗など12パターンのトラブルに対応。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →