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ドルと異なり、一度支払えば更新料は不要です。
登録手順は次のとおりです。
- Google Play ConsoleにGoogleアカウントでログイン
- デベロッパー名(ストアに表示される名前)を入力
- デベロッパー契約に同意
- 登録料25ドルをクレジットカードで支払い
- 連絡先情報を入力して送信
個人アカウントの場合は本人確認が求められます。法人アカウントでは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人 | 開発チーム内での迅速な検証 |
| クローズドテスト | 最大数千人 | 限定的なベータテスト |
| オープンテスト | 制限なし | 一般公開前の大規模テスト |
内部テストの手順
- Play Consoleの左メニューから「テスト」→「内部テスト」を選択
- 「新しいリリースを作成」をクリック
- AABファイルをアップロード
- リリース名とリリースノートを入力
- 「リリースを確認」→「公開を開始」
- テスターのメールアドレスを追加(Googleアカウント必須)
内部テストは審査なしで即座にテスターへ配信されるため、デバッグ作業を素早く進められます。
製品版への公開
テスト配信で問題がなければ、製品版トラックにリリースを昇格させます。
リリース手順
- 「製品版」→「新しいリリースを作成」
- テストで使用したAABを選択(または新たにアップロード)
- リリースノートを記入
- 「リリースを確認」で警告やエラーがないか確認
- 「製品版として公開を開始」
初回審査には通常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.jsonのproductionプロファイルで開発用パッケージが除外されているか確認してください。
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のインクリメントを忘れないようにし、段階的リリースを活用して不具合の影響範囲を抑えるのが実運用上のポイントです。
