【Expo / EAS Build】developmentプロファイルでAAB作成&バージョンコード自動インクリメントを有効にする方法

Androidアプリ

Expo(React Native)でAndroidアプリを開発中、Google Playストアの内部テストなどに載せるために「開発環境(development)のコードのままAABファイル(.aab)を作りたい」と思うことがありますよね。

しかし、いざビルドしてみると……

  • buildType: "app-bundle" を指定したのに、なぜか .apk ファイルが生成される」
  • 「無事にAABが作れても、2回目のビルドでバージョンコード(Version Code)が上がらずストアにアップロードできない」

といった罠に高確率でハマります。Google Playコンソールは、同じバージョンコードのAABファイルを二度と受け付けてくれないため、自動インクリメントの設定は必須です。

この記事では、EAS Buildの仕様を紐解きながら、開発環境のまま「AAB作成」と「バージョンコード自動化」を両立させる eas.json の正しい設定方法を解説します!

1. なぜ設定したのにAPKが作られてしまうのか?

原因は、EAS Buildが持つ「開発を便利にするための自動上書き機能」にあります。

eas.json で以下のいずれかの設定が有効になっている場合、EAS Buildは強制的に「実機やシミュレータに直接インストールするためのビルド(APK等)」だと判断し、buildType を自動的に書き換えてしまいます。

  • "developmentClient": true(開発クライアントを使用する設定)
  • "distribution": "internal"(社内・テスト配布用の設定)

たとえ設定ファイル内で "buildType": "app-bundle" と明記していても、上記の「開発用設定」が優先されてしまうため、結果として .apk ファイルが作成されてしまいます。

2. なぜ開発プロファイルだとバージョンコードが上がらないのか?

初期状態や公式ドキュメントのサンプルの多くは、自動インクリメント("autoIncrement": true)が production(本番)プロファイルにしか記述されていない ためです。

EAS Buildはプロファイルごとに設定を独立して管理するため、development(およびそれを継承したプロファイル)でも自動で数値を上げたい場合は、個別に指定するか、全体の共通設定にする必要があります。

これらが設定されていないと、Playストアに2回目以降のアップロードをする際に、以下のエラーで弾かれてしまいます。

エラー例: 「バージョン コード X の App Bundle はすでにアップロードされています。」

3. 【解決策】すべてを解決する eas.json の設定例

「AABの自動上書きをブロック」しつつ、「バージョンコードをすべてのビルドで自動インクリメント」させる正しい eas.json の設定がこちらです。

JSON

{
  "cli": {
    "version": ">= 20.2.0",
    "appVersionSource": "remote"
  },
  "build": {
    // 💡【ポイント1】ここに置くことで、配下の全プロファイルで自動インクリメントが有効化
    "autoIncrement": true, 

    "development": {
      "developmentClient": true,
      "distribution": "internal",
      "env": {
        "EAS_BUILD_PROFILE": "development"
      }
    },
    // 💡【ポイント2】開発環境のAAB作成用プロファイル
    "development_aab": {
      "extends": "development",   // 開発環境(envなど)を引き継ぐ
      "developmentClient": false, // 開発クライアントを無効化(APK化を防ぐ)
      "distribution": "store",    // 配信方法をストア用に変更(APK化を防ぐ)
      "android": { 
        "buildType": "app-bundle"  // AABファイルを指定
      }
    },
    "preview": {
      "distribution": "internal",
      "android": { "buildType": "apk" }
    },
    "production": {
      "env": {
        "EAS_BUILD_PROFILE": "production"
      }
    }
  },
  "submit": {
    "production": {}
  }
}

設定のポイント

  1. "autoIncrement": truebuild 直下に移動: これにより、production だけでなく、今回作成する development_aabpreview でも自動的にバージョンコードがインクリメントされるようになります。
  2. developmentClient: falsedistribution: "store" で上書き: 「これはストア配布用のビルドだよ」とEASに明示的に教えてあげることで、自動的にAPKへ変換されるのを防ぎます。

4. ビルドコマンドの実行

設定が完了したら、新しく追加したプロファイルを指定してビルドを実行します。

Bash

eas build --profile development_aab --platform android

これで自動上書きが無効化され、無事にバージョンコードが更新された .aab ファイルが生成されるようになります!

5. 注意点:生成されたAABファイルは実機に直接インストールできない

無事にAABファイルが作成できたら、一点だけ注意が必要です。

.aab(Android App Bundle)は、Google Playストアにアップロードするための専用フォーマットです。そのため、生成されたファイルをAndroid端末に直接ダウンロードしてインストールすることはできません。

動作確認を行う場合は、以下のいずれかの方法を取りましょう。

  • Google Play Consoleにアップロードし、「内部テスト」「クローズドテスト」のトラックを使って配信する
  • Google公式のツール bundletool を使って、ローカル環境でAPKに変換してインストールする

開発環境のコードで、Playストアの課金テストやアプリアップデートの挙動をテストしたい場合に、今回の手法を活用してください。

まとめ

Expo / EAS Buildで「開発環境のAAB」を作りたい時は、EASの親切設計(自動APK変換)を裏をかく設定が必要です。

  • developmentClient: falsedistribution: "store" でAPK化を防ぐ
  • "autoIncrement": true は共通設定(トップ階層)に置いて、全ビルドで有効化する

この2点を押さえておけば、Playストアを使った開発版のテストが非常にスムーズになります。ぜひ試してみてください!

コメント

タイトルとURLをコピーしました