Expoで npx expo run:ios が遅いときの解決法
Expoを使ってiOSアプリを開発していると、npx expo run:iosはシミュレータや実機で動作確認を行う際にとても便利です。しかし、実際に使ってみると「起動までに毎回かなり時間がかかる」と感じる人も多いのではないでしょうか。特にJavaScriptやTypeScriptのコードをちょっと修正しただけなのに、再度フルビルドが走ってしまい、待ち時間が長くなるのは開発効率を下げる大きな要因になります。
本記事では、このビルドが遅い理由を整理したうえで、日常の開発を快適にするための具体的な解決策を紹介します。
なぜ遅いのか??
npx expo run:iosは、内部的にXcodeでのネイティブビルドを毎回実行しています。
ネイティブビルドは以下のような処理が走るため、どうしても時間がかかります。
- Podの依存関係チェック
- ネイティブコードのコンパイル
- アプリバイナリの生成
純粋にJavaScript/TypeScriptだけを修正した場合でも、ネイティブビルドが走る点が大きな非効率です。
解決策
1. expo startを使う
ネイティブコードに変更がない場合は、単純に
npx expo start
を実行し、ターミナルで i を押すとiOSシミュレータでアプリが起動します。
JavaScript/TypeScriptの変更はホットリロードで反映されるため、圧倒的に高速です。
2. Dev Clientを導入する
カスタムネイティブモジュールを使う場合は、expo-dev-clientを導入するのが有効です。
npx expo install expo-dev-client
npx expo run:ios
最初の一度だけビルドしておけば、その後は以下で高速に起動できます。
npx expo start --dev-client
3. Xcodeを直接使う
expo prebuild後に生成されるios/YourApp.xcworkspaceをXcodeで開いて開発する方法です。
Xcodeはインクリメンタルビルドを行うため、expo run:iosを繰り返すよりもビルド時間が大幅に短縮されます。
4. Xcodeビルドの高速化
-
SSD上にDerived Dataを置く
Xcode → Preferences → Locations で確認できます。 -
並列ビルドを有効化
xcodebuild -parallelizeTargets -UseNewBuildSystem=YES -
ccacheを導入
ネイティブ依存が多い場合に有効です。
5. CI/CDや配布用途ではeas build
ローカルでのネイティブビルドが不要な場合は、eas buildでクラウドビルドする方が効率的です。
特に実機配布やApp Store向けビルドでは、EASの利用が推奨されます。
まとめ
- ネイティブに変更がないときは
expo start - カスタムネイティブを使うときは
expo start --dev-client - ネイティブ設定を変更したときだけ
expo run:ios - 本格的な配布やCI/CDは
eas build
この流れを理解しておくと、開発体験を向上できるかと思いますので、ぜひお試しください!!
Discussion