個人開発しているアプリのExpoバージョンを上げていったらビルドが通らなくなった。そこで、比較的新しいバージョンのExpoではビルドがどういう感じになっているのかキャッチアップしたい。
ひとまずブランクアプリケーションが起動するまで
まずはブランクアプリケーションを生成する。
$ expo init ExpoBlank ┌───────────────────────────────────────────────────────────────────────────┐ │ │ │ The global expo-cli package has been deprecated. │ │ │ │ The new Expo CLI is now bundled in your project in the expo package. │ │ Learn more: https://blog.expo.dev/the-new-expo-cli-f4250d8e3421. │ │ │ │ To use the local CLI instead (recommended in SDK 46 and higher), run: │ │ › npx expo <command> │ │ │ └───────────────────────────────────────────────────────────────────────────┘ Migrate to using: › npx create-expo-app --template
どうやらexpo-cliをglobalで使うのは非推奨になっているらしい上に、expo initではなくnpx create-expo-appを使えとのこと。大人しく言うことに従う。
$ npm uninstall -g expo-cli $ npx create-expo-app ExpoBlank npx: installed 1 in 0.742s Unexpected token '??='
なんか謎のエラー。かなり古い環境でやっていたので、たぶんnodeのバージョンのせいだろう。nodeのバージョンを上げる(nodeのバージョン管理はfnmを使ってます)。
$ fnm current v14.21.3 $ fnm use v21.7.2 ✘ 2 Using Node v21.7.2 $ node -v > .node-version $ node -v v21.7.2
再びcreate-expo-appすると、今度はうまくいく。
$ npx create-expo-app ExpoBlank $ cd ExpoBlank $ expo install
expo startして、iOSシミュレータで開く。
$ expo start
なんかエラー。

単にExpoクライアントでログインしていないだけっぽいので、Expo Goを開いてログインする。

再度やり直す。よしちゃんと起動したぞ。

EASビルドする
このあたりを参考にセットアップする。
$ npx expo install expo-dev-client
とりあえずbuildコマンド叩いてみたけどやっぱりダメだった。
$ npx eas build:run -p ios ✘ 127 npm ERR! could not determine executable to run
そもそもeasコマンドすらインストールしてなかった。インストールしてプロジェクトのセットアップをする。
$ npm install -g eas-cli $ eas login $ eas build:configure
eas.jsonが生成されるので、previewに以下を追記して、simulatorで起動するようにする。
"build": {
"preview": {
"distribution": "internal",
"ios": {
"simulator": true
}
},
ビルドする。めちゃくちゃ遅い。20分くらいかかる。
$ eas build -p ios --profile preview
Waiting in Free tier queue
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■|
⠦ Build in progress...
🍏 Open this link on your iOS devices (or scan the QR code) to install the app:
https://expo.dev/accounts/a.harada/projects/ExpoBlank/builds/0d8d9c96-3a7a-4b6c-a3fa-9c0494470ee3
✔ Install and run the iOS build on a simulator? … yes
✔ Successfully downloaded app archive
Installing your app on the simulator...
✔ Successfully installed your app on the simulator!
Launching your app...
✔ Successfully launched your app!
出来たああああ!

従来のローカルビルドもやってみる
EASビルドを使わないローカルビルドも共存出来るのか試してみる。
ぼくの個人アプリはBare Workflowになっているので、ejectしてからビルドを試したい。
$ npx expo eject $ expo eject is not supported in the local CLI, please use npx expo prebuild instead
ejectはもう既にオワコンらしいので代わりにprebuildコマンドを実行する。
$ npx expo prebuild
従来のやり方通り、react-native run-iosしてみるも、動かない。
$ npx react-native run-ios /Users/aharada/source/ExpoBlank/node_modules/.generated/launchPackager.command; exit error No Metro config found in /Users/aharada/source/ExpoBlank.
どうやらローカルビルドもコマンドが変わったらしい。
$ npx expo run:ios
起動出来たあああああ!!

まとめ
一通り触ってみて、EASビルドがどんな感じの使用感なのか分かった。あと従来のコマンドでローカルビルドが出来なくなっていることに気づけて良かった。ぼくの個人アプリがローカルビルド出来なくなったのもこのせいな気がする。