🤔

expo環境でaab/ipaファイルを作成

2025/02/01に公開

expo便利

元々仕事でReactNativeを扱っており、最近はexpoを触るようになりました。
モバイルアプリはReactNativeを使えばAndroid/iOSのソースコードをほぼほぼ共通化できますが、各ネイティブのソースコード(androidディレクトリとiosディレクトリ)は共通化できず、何かと面倒に感じることが多いです。
expoを導入するとネイティブ周りの対応の必要がなくなり、また、各プラットフォームへのビルドが簡単になるので便利だなって思いました。
expoを導入した場合のアプリ実行ファイルの作成は、expoを導入していないReactNativeの環境と異なるため、今回はexpo環境の実行ファイル作成について調べてみました。

Android/iOSの実行ファイルを作成

各プラットフォームの実行ファイル(aabファイル/ipaファイル)をビルドしました。
expoを導入したプロジェクトではeasコマンドを使ってaab, ipaファイルを作成できます。

ビルドコマンドを実行

❯ eas build

AndroidとiOSの両プラットフォームでビルドすることを選択

✔ Select platform › All

各アプリのIDを設定できます。ここで設定したものがapp.jsonに記載されます。

✔ What would you like your Android application id to be? … com.naoki.ExpoApp
✔ What would you like your iOS bundle identifier to be? … com.naoki.ExpoApp

各種認証が入り、ビルドが実行されます。
Apple Developer Membership が登録されていなかったり、権限が弱かったりするとここで失敗します。
最終的に、以下のようにURLが発行され、アクセスするとaabファイルとipaファイルがダウンロードできます。

🤖 Android app:
https://expo.dev/artifacts/eas/xxxx.aab
🍏 iOS app:
https://expo.dev/artifacts/eas/xxxx.ipa

上記URLにアクセスする以外にも、Expoのサイトにサインインし、ダッシュボード画面からファイルをダウンロードできます。

完全に便利かと言われると諸説

上記の方法はクラウド上でビルドする方法で、Expoアカウントのフリープランであれば月30回までは無料でビルドができるようです。
ただし、ビルドする際はAndroid/iOSの両方をビルドすることになると思うので、実質月15回のビルドになりそうです。

また、フリープランではビルドの実行がクラウド上でキューに入れられ、混雑状況によってはビルド実行に時間がかかります
特に平日夜間に実行するととんでもなく時間がかかることがあり、私が金曜夜に実行した際はipaファイルの作成に何時間もかかりました。
次の日の朝に実行すると15分前後で実行ファイルを作成できました。

ローカルでビルド

クラウドでビルドする方法以外にローカルでビルドする方法があります。
以下のように--localのオプションをいれるとローカルでビルドすることができ、月30回ビルドの回数にもカウントされません。

$ eas build --platform android --local
$ eas build --platform ios --local

実行後はカレントディレクトリにアプリのファイルが作成されます。
ただ、私が試した際はiosのビルドでエラーが発生しました。(クラウドでビルドしたものと同じソース)
androidのビルドは特に問題なさそうですがiosの場合は工夫が必要なようです。

おわりに

今回はexpoのビルド周りを調べてみました。
expoの開発体験はとてもよく、導入できる環境があれば使っていきたいと思っています。
ただ、実行ファイルの作成に関してはフリープランだと若干面倒な印象で、
ちょっとした料金を出せない場合やCIを回しまくってる現場だと工夫が必要かもしれません。
ローカルビルドが手元やCI上で問題なく動くようであれば快適に開発できそうです。

Discussion