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": {}
}
}
設定のポイント
"autoIncrement": trueをbuild直下に移動: これにより、productionだけでなく、今回作成するdevelopment_aabやpreviewでも自動的にバージョンコードがインクリメントされるようになります。developmentClient: falseとdistribution: "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: falseとdistribution: "store"でAPK化を防ぐ"autoIncrement": trueは共通設定(トップ階層)に置いて、全ビルドで有効化する
この2点を押さえておけば、Playストアを使った開発版のテストが非常にスムーズになります。ぜひ試してみてください!


コメント