EAS Buildで初めてのビルド(2)
eas build:configure で初期設定を生成する
次に、EAS Buildの設定ファイルeas.jsonを生成します(リスト5)。
eas build:configure
対象プラットフォーム(iOS/Android/All)を対話で選ぶと、プロジェクトルートにeas.jsonが作成されます。
eas.json の基本構造を読む
自動生成されたeas.jsonは次の内容になります(リスト6)。
{
"cli": {
"version": ">= 18.6.0",
"appVersionSource": "remote"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal"
},
"preview": {
"distribution": "internal"
},
"production": {
"autoIncrement": true
}
},
"submit": {
"production": {}
}
}
build配下にはdevelopment/preview/productionの3つのビルドプロファイルが定義されています。それぞれの役割を一覧にすると表1の通りになります。
| プロファイル | 主な用途 | 特徴 |
|---|---|---|
| development | 開発用。自作版Expo GoのようなDevelopment Build(後述)を作る | developmentClient: trueが付く。内部配布向け |
| preview | 社内テスト・レビュー用。本番に近い構成で動作確認 | 内部配布(TestFlight外/APK直接配布) |
| production | ストア提出用。最終成果物 | .aab(Android)/App Store 用 .ipa を生成 |
各プロファイルの詳細なカスタマイズは第11回で扱います。本章ではまずpreview プロファイルでAndroidビルドを通し、後半ではdevelopment プロファイルを使ったDevelopment Buildの作成とeas build:devの活用まで踏み込みます。
eas configで設定内容を確認する
ビルドに入る前に、現在の設定が EAS側からどう見えているかを確認しておきます(リスト7)。
eas config --platform android --profile preview
指定したプロファイルに対して、最終的に適用される設定値がすべて展開されて表示されます。eas.jsonの継承や環境変数の解決結果、さらにはapp.jsonの内容までまとめて反映されるので、意図通りの設定になっているかを事前にチェックできます。
出力の末尾には、そのビルドプロファイルで実際に使われる値が展開されています。今回のpreviewプロファイルなら"credentialsSource": "remote"と "distribution": "internal"が見えるはずです。ここで注目したいのは credentialsSource: "remote"の方です。これは「ビルド時にEAS側のクレデンシャルストアを参照する」という設定で、この値がクラウド上のクレデンシャルとビルドを繋ぐ鍵になります。これについては後ほど解説します。
はじめてのビルドを実行する
いよいよビルド本番です。今回はAndroidの preview プロファイルでビルドを流します(リスト8)。
eas build --platform android --profile preview
初回実行時はいくつかの初期設定が対話的に確認されます。まず、app.jsonにAndroidパッケージ名(android.package)が未設定なので「どんなIDで作るか」を聞かれます。Apple や Google のアプリIDは reverse-DNS 形式が慣例で、本来は自分が所有するドメインに由来する文字列を使うのが望ましいのですが、ドメインを持っていない場合はio.github.<GitHubアカウント名>.<アプリ名>が安全な代替として広く使われています。本稿ではこれに倣って io.github.nkzn.eassandboxと入力します。
次に、前回解説したeas credentialsのフローが裏で自動起動します。Androidキーストアを持っていない旨のメッセージが出て、「EAS側で新規生成していいか?」と聞かれるので、Yesと答えましょう。EAS が新しいキーストアを生成し、クラウドに保管してくれます。
その後、ソースコードがEASサーバーにアップロードされ、クラウド上のmacOS/Linuxワーカー上でビルドが進みます。ターミナルにはビルドキューの順番、ビルド中のログ、進捗URLが順に表示されます(図2)。
ブラウザでexpo.devを開けば、同じ内容をダッシュボードでも追えます(図3)。
さらにダッシュボードでは、各ビルドステップを展開することでRun gradlewのような詳細なログまで確認できます(図4)。
なお、Freeプランでは「Waiting in Free tier queue」というメッセージが出て、有料プランより低い優先度のキューで順番待ちになります。
ビルドが完了すると、ターミナルに成果物のインストール用URLとQRコードが表示されます。手元のAndroid端末でQRコードを読み取るか、表示されたURL(https://expo.dev/.../builds/<id>)をブラウザで開くと、.apkのダウンロード/インストール画面に飛べます。さらに「Android エミュレータがあれば、いまここでインストールして起動するか?」というプロンプトも表示されるので、エミュレータを動かしている場合は Yesを選ぶとそのまま自動でアプリが立ち上がります。
eas build:list / eas build:view でビルド結果を確認する
過去のビルド履歴を確認するにはeas build:listを使います(リスト9)。
eas build:list
プロジェクトに紐づくビルドが新しい順に並び、それぞれについてビルドID・プラットフォーム・プロファイル・ステータス・SDKバージョン・コミットハッシュ・成果物(.apk / .aab)のダウンロードURL・フィンガープリント・開始/終了時刻といった情報が表示されます。--platformや--statusなどのフィルタオプションで絞り込みもできます。
特定のビルド1件をピンポイントで取得したいときはeas build:view <build-id>を使います。表示される項目はeas build:listと同じで、件数を絞り込んで1件だけ出すコマンドだと考えるとよいでしょう。CIスクリプトから直近のビルド情報を取り出すような用途で重宝します。
ビルド時に eas credentials の設定が自動適用される仕組み
ビルドの途中で「Android キーストアを新規生成する?」と聞かれたときにYesと答えた結果、EAS 側にはそのプロジェクト用のキーストアが保管されました。これは前回紹介したeas credentialsが管理しているクレデンシャルと、完全に同じ仕組みです。
先ほどeas configの出力で見た"credentialsSource": "remote"が、ここで効いてきます。この設定値は「ビルド時にEAS側のクレデンシャルストアを参照する」という指示であり、eas buildはこの設定に従って、必要なキーストアや証明書を自動的にビルドワーカーに引き込みます。開発者は「いまどの鍵で署名しているか」を逐一意識しなくても、EAS側で一元管理されたクレデンシャルが自動的に適用される、というわけです。
試しに、ビルド後にもう一度eas credentialsを叩いてみてください。先ほど生成されたAndroidキーストアが、EAS プロジェクトのクレデンシャル一覧に登録されているのが確認できます。
そしてもう一つ、種明かしめいた話を添えておきます。本章ではAndroidのビルドだけを通しましたが、iOSのビルドをEAS Buildで流すと、ダッシュボードのビルドログにRun fastlaneというジョブが現れます。図5は、筆者が別プロジェクトでiOSビルドを実行した際のログ画面で、Run fastlaneステップでGymfileが生成され、Fastlaneコマンドが内部で動いている様子が確認できます。
EAS BuildはFastlaneを置き換えるのではなく、Fastlaneが積み上げてきた知見をクラウドの上で引き取り、マネージドに提供している。そう捉えると、冒頭で「マネージドFastlane」と呼んだ理由が腑に落ちるのではないでしょうか。
