OpenAIExpo2026/05/13 13:00

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

要点だけを先に読めるように短く再構成したセクションです。

元記事

Quick Digest

要約

要点だけを先に読めるように短く再構成したセクションです。

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

高速ビルドをどこでも実現する:Expoの最適化と実践

Key Points

  • M4 Pro/Maxを増強
  • プリビルドとキャッシュ導入
  • EAS Updateでビルド削減

Summary

Expoはビルド速度とスループットを改善するためにインフラとツールチェーンを強化しました。M4 Pro/Max Mac Miniの増強、コンパイラ/Gradleキャッシュ、主要パッケージのプリビルド、SDK 56のiOS用XCFrameworkなどにより、クラウドビルドの時間を大幅に短縮します。さらに、EAS Updateとfingerprintワークフローで「そもそもビルドしない」運用を可能にし、ローカル開発・署名付きローカルビルドの手順もサポートしています。

Key Points

  • インフラ
    • M4 Pro/Max Mac Miniを追加してiOSビルドのキャパシティを拡張。
  • キャッシュとプリビルド
    • SDK 54/55でコンパイラレベルのキャッシュを導入し fastlane/gradlew ステップを最大30%改善。
    • Gradleキャッシュ導入でAndroidビルドを高速化。
    • react-native-reanimated / react-native-screens 等のプリビルドバイナリを追加、SDK56では複雑モジュールをXCFramework化。
  • ビルド頻度の削減(EAS Update + fingerprint)
    • JavaScriptのみの変更はEAS Updateで差分配信し、ネイティブビルドを回避。eas update:configure を使って設定。
    • GitHub連携でfingerprintワークフローを組むと、ネイティブコードが変わらない場合はビルドをスキップしてUpdateを実行します。簡易例:
name: preview-fingerprint
on:
  push:
    branches: [main]
jobs:
  fingerprint:
    type: fingerprint
  ios_get_build:
    needs: [fingerprint]
    type: get-build
  ios_update:
    needs: [ios_get_build]
    if: ${{ needs.ios_get_build.outputs.build_id }}
    type: update
  ios_build:
    needs: [ios_get_build]
    if: ${{ !needs.ios_get_build.outputs.build_id }}
    type: build
  • ローカル開発とテスト
    • デバッグ/開発ビルド: npx expo run:android / npx expo run:ios(初回で npx expo prebuild を実行)
    • dev-client を使えばネイティブランタイムが変わらない限り再ビルド不要。
    • リリース・署名付きビルドは npx expo run:android --variant release / npx expo run:ios --configuration Release、EAS credentialsで鍵を取得してAndroid Studio/Xcodeで署名・アーカイブ。
  • 共有とデバイス実行
    • ローカルで作ったビルドは eas upload / eas build:run で共有可能。
    • USB接続でのデバイス実行手順(adb / xcrun のデバイス検出)もサポート。

Actionable next steps

  • 既存プロジェクト:eas update:configure を検討し、プレビューチャネルでJS差分配信を有効化する。
  • CI/ワークフロー:fingerprintベースのワークフローを導入してネイティブビルドを最小化する。
  • ローカル開発:expo-dev-clientnpx expo run:... を試し、ローカルでの反復を高速化する。

Published: 2026-05-13T13:00:03.000Z

Full Translation

翻訳

原文の流れを保ったまま読める翻訳セクションです。

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 を導入することで、どのくらいの頻度でビルドする必要があるかを制限し、さらに反復を高速化できるタイミングです。