React Nativeで開発したAndroidアプリをGoogle Playに公開するには、ビルド設定・署名鍵の管理・Play Consoleでのストア情報登録など、コーディング以外の作業が数多く必要です。特に初回リリースでは、デベロッパー登録の手続きやAAB形式でのビルド生成、データセーフティの申告など、事前に把握しておかないと手戻りが発生しやすいポイントがあります。

ここでは、ExpoベースのプロジェクトとReact Native CLI(bare workflow)の両方のケースを対象に、Google Playへの公開手順を一通り整理します。

公開までの全体フロー

React NativeアプリをGoogle Playに公開するまでの流れは、大きく5つのフェーズに分かれます。

フェーズ作業内容所要時間の目安
1. 事前準備デベロッパー登録、環境構築1〜2日
2. ビルド生成署名鍵の作成、AABファイルの生成30分〜1時間
3. ストア設定アプリ情報、スクリーンショット、データセーフティ1〜3時間
4. テスト配信内部テスト/クローズドテストでの動作確認1〜2日
5. 製品版リリース審査提出、段階的リリース審査に1〜7日

事前準備

Google Playデベロッパーアカウントの登録

Google Playにアプリを公開するには、デベロッパーアカウントが必要です。登録時に25ドル(約3,800円)の一回払い手数料がかかります(出典: Google Play Console ヘルプ)。Apple Developer Programの年額99ドルと異なり、一度支払えば更新料は不要です。

登録手順は次のとおりです。

  1. Google Play ConsoleにGoogleアカウントでログイン
  2. デベロッパー名(ストアに表示される名前)を入力
  3. デベロッパー契約に同意
  4. 登録料25ドルをクレジットカードで支払い
  5. 連絡先情報を入力して送信

個人アカウントの場合は本人確認が求められます。法人アカウントではDUNS番号(D-U-N-S Number)の提出も必要になる場合があります。

開発環境の確認

React NativeのAndroidビルドを生成するには、以下のツールが必要です。

ツールExpo使用時CLI(bare workflow)
Node.js必須(18以上推奨)必須(18以上推奨)
Java Development Kit不要(EASクラウドで処理)必須(JDK 17推奨)
Android Studio不要必須
EAS CLI必須任意
Gradle不要Android Studioに付属

Expoプロジェクトの場合、EAS Buildを利用するとローカルにAndroid Studioをインストールせずにクラウド上でビルドが可能です。

Androidビルドの生成

Expoプロジェクトの場合(EAS Build)

Expoプロジェクトでは、EAS(Expo Application Services)を使ったビルドが標準的な方法です。

1. EAS CLIのインストールとログイン

npm install -g eas-cli
eas login

2. eas.jsonの設定

プロジェクトルートにeas.jsonを作成し、ビルドプロファイルを定義します。

{
  "build": {
    "preview": {
      "android": {
        "buildType": "apk"
      }
    },
    "production": {
      "android": {
        "buildType": "app-bundle"
      }
    }
  }
}

Google Playに公開する場合はapp-bundle(AAB形式)を指定します。2021年8月以降、Google Playでは新規アプリにAAB形式が必須です。既存アプリのアップデートについても2021年11月からAABが必要になっています(出典: Android Developers Blog)。

3. app.jsonのAndroid設定

{
  "expo": {
    "name": "MyApp",
    "slug": "my-app",
    "android": {
      "package": "com.yourcompany.myapp",
      "versionCode": 1
    }
  }
}

packageにはAndroidのパッケージ名を指定します。一度公開すると変更できないため、ドメインの逆順(例: com.yourcompany.myapp)で命名するのが一般的です。

4. ビルドの実行

eas build --platform android --profile production

初回ビルド時は署名鍵(keystore)の生成について聞かれます。「Generate new keystore」を選択すると、EASが自動的にkeystoreを生成・管理してくれます。

ビルドが完了すると、EASのダッシュボードまたはCLIからAABファイルをダウンロードできます。

eas build:list
# 完了したビルドのURLからダウンロード可能

EAS Buildの料金体系

EAS Buildには無料枠があり、月にAndroid 15回・iOS 15回のビルドが利用可能です(低優先キュー、ビルドタイムアウト45分)。無料枠を超える場合はStarter(月19ドル)やProduction(月199ドル)プランが用意されています(出典: Expo Pricing)。ローカルビルドであれば回数制限はありません。

# ローカルでビルドする場合(Android Studio / JDKが必要)
eas build --platform android --profile production --local

React Native CLI(bare workflow)の場合

Expoを使わないbare workflowでは、Android StudioとGradleを使ってビルドを生成します。

1. 署名鍵(keystore)の生成

リリースビルドにはデジタル署名が必要です。keytoolコマンドでkeystoreファイルを作成します。

keytool -genkeypair -v -storetype PKCS12 \
  -keystore my-upload-key.keystore \
  -alias my-key-alias \
  -keyalg RSA -keysize 2048 -validity 10000

生成されたmy-upload-key.keystoreは安全な場所に保管してください。このファイルを紛失すると、同じ署名でアプリを更新できなくなります。

2. Gradle設定ファイルの編集

android/gradle.propertiesに署名情報を追加します。

MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=*****
MYAPP_UPLOAD_KEY_PASSWORD=*****

次に、android/app/build.gradleにsigningConfigsとbuildTypesを設定します。

android {
    ...
    signingConfigs {
        release {
            if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
                storeFile file(MYAPP_UPLOAD_STORE_FILE)
                storePassword MYAPP_UPLOAD_STORE_PASSWORD
                keyAlias MYAPP_UPLOAD_KEY_ALIAS
                keyPassword MYAPP_UPLOAD_KEY_PASSWORD
            }
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

3. AABファイルの生成

cd android
./gradlew bundleRelease

生成されたAABファイルは android/app/build/outputs/bundle/release/app-release.aab に出力されます。

APKが必要な場合は次のコマンドを使用します。

./gradlew assembleRelease
# 出力先: android/app/build/outputs/apk/release/app-release.apk

AABとAPKの違い

項目AAB(Android App Bundle)APK
Google Play新規アプリ必須(2021年8月〜)不可
ファイルサイズ小さい(デバイスに最適化)大きい(全リソース含む)
署名方式Google Play App Signing開発者の署名のみ
テスト用配布Play Console経由直接インストール可能

AAB形式ではGoogle Play側がデバイスごとに最適なAPKを生成するため、ユーザーのダウンロードサイズが平均15%削減されます。

Google Play App Signingの仕組み

AABをアップロードすると、Google Playが最終的なAPKへの署名を行います。開発者が生成するkeystoreは「アップロード鍵」として使われ、Google Playが保持する「アプリ署名鍵」とは別物です。

この仕組みには次のメリットがあります。

  • アップロード鍵を紛失しても、Google Playサポートに連絡して鍵のリセットが可能
  • Google PlayがAPK最適化を自動実行
  • 鍵の管理負担が軽減される

Google Play Consoleでのアプリ設定

アプリの新規作成

Play Consoleにログインし、「アプリを作成」を選択します。以下の情報を入力します。

  • アプリ名: ストアに表示される名前(30文字以内)
  • デフォルトの言語: 日本語
  • アプリまたはゲーム: アプリ
  • 無料または有料: 一度「無料」で公開すると有料に変更できません

ストア掲載情報の設定

ストア掲載情報には以下の要素が必要です。

項目要件
アプリ名最大30文字
簡単な説明最大80文字
詳しい説明最大4,000文字
アプリアイコン512×512px、PNG(32ビット、アルファ付き)
フィーチャーグラフィック1,024×500px、PNG/JPEG
スクリーンショット最低2枚、最大8枚(電話用)

スクリーンショットはアプリの主要画面を含め、最低2枚の登録が必要です。7インチタブレット用・10インチタブレット用も登録するとストアでの見栄えが向上します。

プライバシーポリシーとデータセーフティ

Google PlayではすべてのアプリにプライバシーポリシーのURLを設定する必要があります。データセーフティの申告も必須で、アプリがどのようなデータを収集・共有するかを申告します。

データセーフティで申告が必要な主な項目は次のとおりです。

  • データの収集有無(個人情報、位置情報、財務情報など)
  • 収集したデータの使用目的
  • データの共有先
  • データの暗号化対応状況
  • ユーザーによるデータ削除のリクエスト対応

アプリがネットワーク通信を一切行わない場合でも、「データを収集していない」と明示的に申告する必要があります。

コンテンツのレーティング

IARCアンケートに回答してコンテンツのレーティングを取得します。暴力・性的コンテンツ・ギャンブル要素の有無を回答すると、各国・地域向けのレーティング(CERO、ESRB、PEGIなど)が自動的に付与されます。レーティングの取得は無料です。

テスト配信

製品版として公開する前に、テストトラックでの動作確認を強く推奨します。

テストトラックの種類

トラックテスター数用途
内部テスト最大100人開発チーム内での迅速な検証
クローズドテスト最大数千人限定的なベータテスト
オープンテスト制限なし一般公開前の大規模テスト

内部テストの手順

  1. Play Consoleの左メニューから「テスト」→「内部テスト」を選択
  2. 「新しいリリースを作成」をクリック
  3. AABファイルをアップロード
  4. リリース名とリリースノートを入力
  5. 「リリースを確認」→「公開を開始」
  6. テスターのメールアドレスを追加(Googleアカウント必須)

内部テストは審査なしで即座にテスターへ配信されるため、デバッグ作業を素早く進められます。

製品版への公開

テスト配信で問題がなければ、製品版トラックにリリースを昇格させます。

リリース手順

  1. 「製品版」→「新しいリリースを作成」
  2. テストで使用したAABを選択(または新たにアップロード)
  3. リリースノートを記入
  4. 「リリースを確認」で警告やエラーがないか確認
  5. 「製品版として公開を開始」

初回審査には通常1〜7日かかります。アップデートの審査は通常数時間〜1日程度です。

段階的リリースの活用

製品版リリース時に「段階的リリース」を設定すると、全ユーザーの一部(例: 10%)にのみ配信を開始し、問題がなければ段階的に配信範囲を広げられます。大きなアップデート時に予期しない不具合の影響を最小限に抑えるのに有効です。

アプリのアップデート公開

バージョン管理のルール

Google Playでアプリを更新するには、前回よりも大きいversionCodeを指定する必要があります。

Expoの場合(app.json)

{
  "expo": {
    "version": "1.1.0",
    "android": {
      "versionCode": 2
    }
  }
}

bare workflowの場合(android/app/build.gradle)

android {
    defaultConfig {
        versionCode 2
        versionName "1.1.0"
    }
}

versionCodeは整数値でPlay Console内部の管理に使われます。ユーザーに表示されるバージョンはversionName(Expoではversionフィールド)です。

更新の手順はリリース時と同じで、新しいAABをPlay Consoleにアップロードし、リリースノートを記入して公開します。

審査で多いリジェクト理由と対策

Google Playの審査でリジェクトされやすいポイントをまとめます。

リジェクト理由対策
プライバシーポリシーの不備収集するデータ、使用目的、第三者への共有を明記したURLを設定
権限の過剰要求アプリの機能に必要な権限のみをAndroidManifest.xmlで宣言
コンテンツのレーティング未設定IARCアンケートを完了
知的財産権の侵害他者の商標・ロゴ・コンテンツを無断使用しない
メタデータの不正アプリ名や説明文にキーワードを羅列しない
機能の不具合・クラッシュ内部テストで主要機能の動作確認を済ませる
最低限の機能要件未達WebViewのみのアプリは審査で指摘されやすい
データセーフティの申告漏れ実際のデータ収集内容と申告内容を一致させる

審査の結果はPlay Console内の「受信トレイ」とメールで通知されます。リジェクト理由が具体的に示されるため、該当箇所を修正して再提出します。

よくあるビルドエラーと対処法

Expoプロジェクトのエラー

EAS Buildがタイムアウトする

無料プランではビルドキューが混雑することがあります。--localオプションでローカルビルドに切り替えると回避できます。

eas build --platform android --profile production --local

expo-dev-clientが含まれたままproductionビルドされる

eas.jsonproductionプロファイルで開発用パッケージが除外されているか確認してください。

bare workflowのエラー

Could not determine the dependencies of task ':app:compileReleaseJavaWithJavac'

依存パッケージのバージョン不整合が原因です。以下を試してください。

cd android
./gradlew clean
cd ..
npx react-native start --reset-cache

Keystore was tampered with, or password was incorrect

keystoreファイルのパスワードが正しいか、gradle.propertiesの設定値を確認してください。環境変数で渡している場合はターミナルのセッションが切れていないかも確認します。

ProGuardによるクラッシュ(リリースビルドのみ)

ProGuardのコード難読化がReact Nativeの一部モジュールに影響する場合があります。proguard-rules.proにルールを追加します。

-keep class com.facebook.react.** { *; }
-keep class com.facebook.hermes.** { *; }
-dontwarn com.facebook.react.**

Execution failed for task ':app:bundleReleaseJsAndAssets'

Metro Bundlerが起動中の場合に発生することがあります。Metro Bundlerを停止してから再度ビルドしてください。

Expo CLIとbare workflowの選択基準

比較項目Expo(EAS Build)bare workflow
セットアップ難度低い高い(Android Studio必須)
ビルド環境クラウド(ローカルも可)ローカルのみ
ネイティブコードの直接編集Prebuildで対応可能自由に編集可能
カスタムネイティブモジュールConfig Pluginで対応直接追加可能
ビルド速度キューによる待ち時間ありローカルスペック依存
CI/CD連携EAS連携が容易GitHub Actions等で自由に構築

新規プロジェクトでネイティブコードの直接操作が不要な場合はExpo + EAS Buildが手軽です。既存のネイティブモジュールが多い場合やビルドプロセスを完全にコントロールしたい場合はbare workflowが適しています。

まとめ

React NativeアプリのGoogle Play公開は、署名鍵の生成・AABビルド・Play Consoleでのストア設定・テスト配信・審査提出の順で進めます。ExpoのEAS Buildを使えばAndroid Studioなしでクラウドビルドが可能で、bare workflowではGradleによるローカルビルドでより細かい制御ができます。

公開後のアップデートではversionCodeのインクリメントを忘れないようにし、段階的リリースを活用して不具合の影響範囲を抑えるのが実運用上のポイントです。