もふもふ技術部

IT技術系mofmofメディア

Expoでブランクアプリケーションを生成してEASビルドを試す

個人開発しているアプリの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ビルドする

このあたりを参考にセットアップする。

docs.expo.dev

$ 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ビルドがどんな感じの使用感なのか分かった。あと従来のコマンドでローカルビルドが出来なくなっていることに気づけて良かった。ぼくの個人アプリがローカルビルド出来なくなったのもこのせいな気がする。