🐢

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