OpenAIExpoMay 13, 2026, 1:00 PM

Build fast, no matter what: how Expo is optimizing for speed (and how you can, too)

A condensed section focused on the key takeaways first.

Original Post

Quick Digest

Summary

A condensed section focused on the key takeaways first.

openaienmodel: gpt-5-mini-2025-08-07

Build fast, no matter what: how Expo is optimizing for speed (and how you can, too)

Key Points

  • New M4 Pro/Max Mac Minis added
  • Compiler + Gradle caching and prebuilt binaries
  • Use fingerprints + EAS Update to avoid rebuilds

Summary

Expo is investing in infrastructure and tooling to drastically reduce build latency for everyone — from hobbyists to enterprise teams. Key server-side changes include adding M4 Pro/Max Mac Minis, compiler-level caching for SDK 54/55, Gradle caching, prebuilt React Native binaries, and SDK 56 shipping prebuilt XCFrameworks for iOS. On the workflow side, Expo recommends avoiding full rebuilds when possible with fingerprint-based workflows and EAS Update, and improving iteration speed using local builds and development clients.

Key Points

  • Infrastructure: dozens of new M4 Pro/Max Mac Minis added and more en route to reduce iOS queue time.
  • Compiler and Gradle caching: compiler-level caching for SDK 54/55 can reduce fastlane/gradlew steps by up to ~30%; Gradle caching is being deployed for Android.
  • Prebuilt artifacts: prebuilt binaries for common packages (react-native-reanimated, react-native-screens) and SDK 56 XCFrameworks for complex modules speed up native builds.
  • Build-less updates: use EAS Update with fingerprint-based workflows to push JavaScript-only changes without rebuilding native apps.
  • Local workflows: run and test locally with npx expo run:android|ios, create dev clients with expo-dev-client, and create local release builds for final testing.
  • Sharing & signing: use eas upload/eas build:run to share local builds; use eas credentials, npx expo prebuild --clean and platform tooling to produce signed production archives.

Recommended next steps for engineers

  • Upgrade to SDK 56 to benefit from prebuilt iOS XCFrameworks where possible.
  • Enable build caching and verify Gradle/ccache settings in CI/EAS to get immediate gains.
  • Add EAS Update (eas update:configure) and adopt fingerprint workflows to skip native builds on JS-only changes.
  • Use local builds for fast iteration and debugging: npx expo run:android|ios, npx expo run:ios --configuration Release for release testing.
  • Use eas upload / eas build:run to share local builds and eas credentials when producing signed artifacts locally.

This is a practical combination of faster cloud workers, smarter caching, prebuilt binaries, and workflow changes that together reduce build frequency and per-build time so you can stay in flow.

Full Translation

Translations

A translation section that keeps the flow of the original article.

openaijamodel: gpt-5-mini-2025-08-07

とにかく速くビルドする:Expoが速度を最適化する方法(そしてあなたができること)

あなたにはスピードが必要です。授業の合間に最初のアプリを出荷する学生でも、昼休みにサイドプロジェクトを進めるエンジニアでも、何百万ものユーザーを抱える企業チームの一員でも、制約は同じです。ビルドを待つ時間はありません。フィードバックを瞬時に受け取りたい。アイデアが鮮度のあるうちに出荷したい。ビルドが遅いと勢いが失われ、速いとフローが続き、良いプロダクトが生まれます。私たちの目標は、プランに関係なく最速のビルドを提供することです。この約束を果たすために、Expo、Mac ハードウェアの前例のない需要に対応し、エンタープライズのエンジニアやvibeコーダーのニーズにスケールするための対策を進めています。Mac MiniはOpenClawを使ったAI自動化志向の人々にとって人気の高い商品で、特にRAM増量構成は希少リソースでした。もし build server の構成ページを見たことがあればご存知の通り、iOSビルドは装備の整ったM4 Mac Mini上で実行されます。世界的なMac Miniの出荷遅延、vibeコーダーやインディーデベロッパー、ローカルビジネス、企業によるアプリ開発の急増が重なり、ExpoのBuildやWorkflowsのキューにどう影響するか気になるのは当然です。私たちがビルドを高速化しインフラを拡張するために行っていることは次のとおりです:

  • 最近、数十台の新しいM4 ProおよびMax Mac Miniをフリートに追加しました。現在もラック設置を進めており、さらに発注・輸送中の機材があります。
  • 各ビルドをより高速にするための複数の対策を講じており、それが全員向けにより多くのビルドを意味します。
  • SDK 54 および 55 プロジェクト向けにコンパイラレベルのキャッシュを導入し、fastlanegradlew ステップの速度を最大で約30%改善しました。
  • Androidビルド性能向上のために Gradle キャッシングを導入しています。
  • react-native-reanimatedreact-native-screens のような一般的に使われるパッケージ向けに事前ビルド済みバイナリを追加し、これらのアーティファクトのビルド時間を事実上ゼロにしています。
  • SDK 56 では iOS 上の最も複雑な Expo モジュール向けに事前ビルド済みの XCFramework を同梱し、iOS ビルドを高速化します。

私たちのビジョンは、あらゆるビルダーに“実際のもの”を作るチャンスを与えることです。初めてExpoを使ってビルドが速く終わると、その感覚がわかります。繰り返されるうちに、やがてビルドのことを考えなくなり、速く動作することを信頼できるようになります。それが私たちの基準です:インフラに気を取られず美しいものを作ることに集中できること。同じ基準はツールにも当てはまります。開発ツールは各ビルドを最大限に活用し、あなたのハードウェアの能力を引き出す助けになるべきです。

ビルド頻度を減らす(fingerprintベースのワークフロー)

M4 Max の大きなワーカーで ccache と事前ビルド済みの React Native バイナリを有効にしたビルドよりも速いのは何でしょうか?ビルドしないことです。EAS Update を使えば、プレビュー用アプリのフィードバックループを最短にできます。ほとんどのアプリ変更はJavaScriptのみであり、毎回ネイティブを再ビルドする必要はありません。JavaScriptだけを再配信して、既存のインストールが新しいコードをダウンロードするようにすれば十分です。

まず eas update:configure を実行してアプリを EAS Update に対応させ、rebuild を行います。動的な app config を使ってプレビュー用アプリのみにアップデートを有効にすることもできます(この場合は updates.enabledfalse に設定)。ネイティブコードや依存関係を変更していないとわかっているときは、手動で eas update --channel preview を実行してアプリを更新できます。

あるいは、コミット時に自動で動く EAS ワークフローとして設定し、ネイティブフィンガープリント(ネイティブコードが変わったときだけ変わるハッシュ)のサンプリングに基づいてビルドするか更新するかを選択的に実行できます。Expo プロジェクトを GitHub に接続し、次のワークフローを .eas/workflows フォルダに追加します:

name: Build or update preview on main push, based on fingerprint
on:
  # Trigger on pushes to main branch
  push:
    branches: [main]
jobs:
  fingerprint:
    environment: preview
    type: fingerprint
  ios_get_build:
    needs: [fingerprint]
    type: get-build
    params:
      fingerprint_hash: ${{ needs.fingerprint.outputs.ios_fingerprint_hash }}
      platform: ios
      profile: preview
  ios_update:
    needs: [ios_get_build]
    if: ${{ needs.ios_get_build.outputs.build_id }}
    type: update
    params:
      channel: preview
      platform: ios
  ios_build:
    needs: [ios_get_build]
    if: ${{ !needs.ios_get_build.outputs.build_id }}
    type: build
    params:
      platform: ios
      profile: preview

Android向けにも同様のステップを追加してビルド/更新を処理してください。ワークフローの完全な例はドキュメントを参照してください。

EAS Update をアプリに導入し、可能な限りコード更新に利用することは、各ビルドの価値を最大化する優れた方法です。

ローカルでの開発とテストのためのビルド

npx expo start でローカル開発サーバーを立ち上げて Expo Go や開発ビルドで動かすのが最も一般的ですが、Expo CLI はシミュレータやデバイス上で直接アプリをビルドして実行することもできます。

はじめに

ローカルビルドでは、Expo CLI が既存の Android Studio や Xcode インストールにアクセスしてネイティブ開発ツールを利用します。これらのツールのセットアップはやや手間がかかることがあるため、Android と iOS の既知の良好な構成を説明したローカルビルドガイドを用意しています。iOS ビルドは Mac が必要であることに注意してください。

ローカル開発ビルド

ネイティブツールをインストールしたら、次のコマンドでエミュレータやシミュレータ上にアプリをビルドして実行できます。

  • npx expo run:android
  • npx expo run:ios

これらはデバッグビルドを作成し、ローカル開発サーバーを起動します(npx expo start と同様の動作)。初回実行時には npx expo prebuild が自動で走り、androidios フォルダを生成します。ネイティブコードを含むパッケージを追加したり app.json を変更した場合は、npx expo prebuild --clean を実行してフォルダを再生成し、その後 npx expo run:android|ios を再実行してください。これは EAS がビルド時に行う処理に近いものです。

このセットアップは expo-dev-client をインストールするとさらに便利になります。expo-dev-client を入れると任意のデバッグビルドが開発ビルドになり、任意の開発サーバー URL を開けるようになります。開発ビルドがエミュレータやシミュレータにインストールされていれば、ネイティブランタイムが同じ限り再ビルドは不要です。npx expo start を実行して、Androidは a、iOSは i を押すだけで開きます。

リリースビルド

開発ビルドではテストしにくい要素(特にスプラッシュスクリーンなど)もありますが、ローカルでスタンドアロンのリリースビルドを作ることで最終チェックが可能です:

  • npx expo run:android --variant release
  • npx expo run:ios --configuration Release

ビルドの共有

ローカルで作った Android APK や iOS シミュレータ用ビルドは EAS を使って組織内の他の開発者と共有できます。手動でアップロードして共有リンクを生成するには eas upload を実行するか、EAS をビルドキャッシュプロバイダとして設定して自動化できます。他の開発者は eas build:run を実行してビルドをダウンロードし実行できます。

デバイスでのビルド

npx expo run:android|ios は USB 接続されたデバイスでも実行できます。

  • Android: デバイスを接続して USB デバッグを有効にした後、adb devices -l でデバイス名を取得し、npx expo run:android --device [device-name] を実行します。
  • iOS: デバイスを接続して開発者モードを有効にし、xcrun xctrace list devices で UDID を取得してから npx expo run:ios --device [udid] を実行します。設定完了のために Xcode で ios フォルダを開き開発チームを選択する必要がある場合があります(必要なら Expo CLI が案内します)。

開発ビルドの場合、ネイティブランタイムが変わらない限り USB を切断しても同じビルドを使い続けられます。その後 npx expo start を実行して QR コードをスキャンできます。

本番用署名済みビルドの生成

EAS の資格情報管理は便利で、エミュレータやシミュレータ、接続デバイスで動かすために必要な簡易署名設定で多くの開発・テストが行えますが、本番用の EAS 生成資格情報を使ってローカルでビルドすることも可能です。

手順は次のとおりです:

  1. eas credentials で必要な資格情報をダウンロードします(Android の upload keystore、iOS の distribution cert など)。
  2. npx expo prebuild --clean を実行してネイティブプロジェクトを生成します。
  3. 複数のアプリバリアントを使っている場合は、環境が本番バリアントになっていることを確認します(EAS 環境変数で設定しているなら eas env:pull を実行してローカルに引き込みます)。
  4. Android: android フォルダを Android Studio で開き、Build → Generate Signed App Bundle or APK を選択してダウンロードした keystore を指定します。
  5. iOS: ダウンロードした資格情報を解凍して Keychain にインストールし、ios フォルダを Xcode で開いて Target の Signing and Capabilities を確認します。必要ならプロビジョニングプロファイルを再生成しても問題ありません。最後に Product → Archive を実行してビルドします。

結論

ローカルビルドは、ネイティブコードのローカルデバッグやネットワークアクセス制限下でのテストなど、多くの理由で非常に有用です。クラウドの EAS Builds と Workflows を補完し、緊急時に行き詰まらないための手段を提供します。そして自動化の話に戻ると、フィンガープリントと EAS Update を導入することで、どのくらいの頻度でビルドする必要があるかを制限し、さらに反復を高速化できるタイミングです。