Contents
Expo Managed Workflow の概要と SDK 53+ の新機能
Expo Managed Workflow は、React Native アプリを 設定不要でビルド・配布まで一元管理 できる開発環境です。2023 年にリリースされた SDK 53(2026 年の長期サポート版)では、従来は Bare が必須だった多くのネイティブ機能が Managed のみで利用可能になり、開発速度と保守性が大幅に向上しました。本セクションでは、Managed の基本概念と SDK 53+ が提供する API と Config Plugin の全容を解説します。
新しく提供されるネイティブ API と Config Plugin
SDK 53 で追加・強化された主要なネイティブ機能と、それらを自動リンクさせる Config Plugin の概要です。
- Camera、Location、Notifications:既存のモジュールがアップデートされ、バックグラウンド取得や高精度位置情報など高度なオプションが利用可能。
- Audio 3.0 API(
expo-av@^13):マルチトラック再生・録音、空間オーディオ対応。 - ARKit / SceneView Plugin:
expo-threeと連携し、iOS の ARKit 機能を Config Plugin 経由で自動リンク([Expo Docs – ARKit Plugin])。 - WebSocket & Background Fetch:
expo-networkが拡張され、バックグラウンドでのデータ取得が標準化。
これらはすべて expo prebuild が app.json/app.config.js を解析し、必要なネイティブコードを Xcode/Gradle に自動的に組み込む仕組みです。
SDK 53 がカバーする主要カテゴリ
SDK 53+ で標準提供される API カテゴリの抜粋と代表モジュールです。
| カテゴリ | 主なモジュール | 代表的機能 |
|---|---|---|
| デバイスハードウェア | expo-camera, expo-location |
写真撮影、位置取得・ジオフェンス |
| メディア & オーディオ | expo-av, expo-audio |
音声再生・録音、空間オーディオ |
| ネットワーク | expo-network, expo-fetch-api |
接続状態確認、カスタム fetch 実装 |
| UI コンポーネント | expo-router, expo-status-bar |
画面遷移、ステータスバー制御 |
| AR / VR | expo-three, expo-arkit-plugin |
3D 描画、ARKit 統合 |
| 更新 & デプロイ | expo-updates, expo-submit |
OTA 更新、EAS Submit |
参考:Expo の公式リリースノート([Expo Blog – SDK 53 Release, 2026‑01‑15])に全モジュール一覧が掲載されています。
Bare Workflow の定義とカスタムネイティブが必要になるシナリオ
Bare Workflow は、Expo に依存しない純粋な React Native CLI プロジェクト です。開発者は ios/ と android/ ディレクトリを自ら管理し、任意のネイティブコードを書き込めます。このセクションでは Bare の特徴と、カスタムネイティブ実装が不可欠になる代表的ケースを示します。
Bare Workflow の特徴
Bare が提供するフルコントロール領域について簡潔にまとめました。
- ビルド設定の自由度:Xcode や Android Studio 上でプロビジョニング、ProGuard ルール、カスタム Gradle スクリプトを自在に変更可能。
- ネイティブ依存関係の手動解決:
pod installや./gradlew assembleを自分で実行し、バージョン衝突やパッチ適用を直接管理できる。 - デバッグ範囲の拡張:Flipper のネイティブプラグインや Android Studio の Profiler など、OS レベルのツールがフルに利用可能。
カスタムネイティブが必須となる代表的ケース
Managed が対応できない、またはパフォーマンス要件が厳しいシナリオを表にまとめました。
| シナリオ | 必要になる理由 |
|---|---|
| 高度なカメラ制御(例:リアルタイム画像処理・RAW 出力) | Expo Camera が提供しない低レベルパラメータが必要 |
| カスタム UI ライブラリ(例:React Native Skia の独自シェーダ) | ネイティブシェーダコードをビルドに組み込む必要がある |
| デバイス固有ハードウェア(医療センサー、カスタム BLE サービス) | 標準プラグインが未対応で C/C++ ブリッジ実装が必須 |
| 独自認証 SDK(社内 SSO、PKI) | Expo の AuthSession がサポートしないプロトコルを組み込む必要 |
備考:これらの要件は公式ドキュメントでも「Bare が推奨されるケース」として言及されています([Expo Docs – When to use Bare])。
ビルド・デプロイと OTA 更新の比較
ビルドと Over‑The‑Air(OTA)更新は、アプリリリースサイクルにおける重要ポイントです。ここでは EAS Build と従来のローカル Xcode/Gradle ビルドを比較し、Managed と Bare の両方で利用できる OTA 更新の実装上の注意点を整理します。
EAS Build と従来ビルドツールチェーンの違い
EAS Build が提供するクラウドビルドと、ローカル環境での手動ビルドの主な相違点です。
| 項目 | EAS Build(Managed/Bare 共通) | 従来 Xcode / Gradle 手動 |
|---|---|---|
| 設定ファイル | eas.json 1 ファイルで全プラットフォームを管理 |
各プロジェクトごとにスクリプト・設定が分散 |
| ネイティブ依存管理 | Config Plugin が自動リンク、expo prebuild が生成 |
手動で Podfile / build.gradle を編集 |
| ビルド環境の統一性 | macOS/Ubuntu の標準化されたコンテナを使用 | 開発者ローカルマシン依存(OS バージョン差) |
| ビルド時間 | キャッシュ利用で平均 15 分 前後 | 30‑45 分が一般的、キャッシュは手動設定 |
出典:Expo の公式ビルドガイド([EAS Build Documentation])。
OTA 更新の利用可否と実装上の留意点
- Managed Workflow
expo-updatesがデフォルトで組み込まれ、app.jsonにruntimeVersionを設定すれば即座に OTA 配信が可能です。-
Apple の App Store では「アプリ本体サイズ」自体に上限はなく、OTA 更新の単一パッケージサイズは 推奨最大 100 MB とされています(公式ガイドの “Large updates should be split” 記載)。150 MB という数値は旧 iOS のセルラーダウンロード制限と混同しやすいため注意が必要です。
-
Bare Workflow
expo-updatesを手動でインストールし、ネイティブ側に初期化コードを追加するだけで Managed と同等の OTA が利用可能です([Expo Docs – Using expo-updates in Bare])。設定手順は以下の通りです。
Bare での OTA 設定手順(サマリー)
- パッケージインストール
bash
yarn add expo-updates expo-constants - iOS の設定
pod install後、AppDelegate.mに以下を追記
objc
#import <EXUpdates/AppController.h>
[EXUpdatesAppController.sharedInstance startAndShowLaunchScreen];- Android の設定
MainApplication.javaにnew UpdatesPackage()を登録し、android/app/src/main/AndroidManifest.xmlにexpo.modules.updates.EXPO_UPDATES_EXPERIMENTALを追加。- EAS プロファイルで有効化
json
// eas.json
{
"build": {
"production": {
"updates": { "enabled": true }
}
}
}
OTA 更新はコード変更が即座にユーザーへ届く反面、runtimeVersion の整合性 と バイナリ互換性 を保つための運用ルール(Semantic Versioning 推奨)が不可欠です。
開発体験(DX)・パフォーマンス・バイナリサイズの比較
開発速度と最終的なアプリ品質はプロジェクト成功に直結します。ここでは Expo Go による即時プレビュー、デバッグツール、型安全性、および実際のパフォーマンス指標とバイナリ最適化手法を比較します。
開発サーバー起動速度とデバッグツール
Managed と Bare の開発環境立ち上げにかかる時間と、利用できるデバッグ支援機能です。
- 起動速度
- Managed:
expo start→ QR コードで Expo Go に接続すると 5 秒以内 にホットリロードが開始。 -
Bare:
react-native run-ios/androidの初回ビルドは 30‑45 秒、その後の Fast Refresh は同程度。 -
デバッグツール
- Managed:Expo Go に組み込み済みの React DevTools と Flipper プラグインが自動有効化。
-
Bare:Flipper の手動セットアップが必要だが、ネイティブモジュール内部までトレース可能。
-
型安全性
- SDK 53 は全公式モジュールに TypeScript 型定義を同梱し、
expo-modules-coreが自動補完を提供。 - Bare:サードパーティライブラリの型が不十分な場合は
any扱いになることがあり、手動で@types/*を追加する必要がある。
パフォーマンス指標とバイナリ最適化手法
Managed の自動トリミング機能と、Bare での手動最適化プロセスを数値比較します。
| 項目 | Managed (SDK 53) | Bare (React Native CLI) |
|---|---|---|
| 初回ロード時間 | 約 1.2 秒(JS Bundle の自動分割) | 約 1.8 秒 |
| 平均メモリ使用量 | 85 MB(不要モジュール除外) | 110 MB |
| iOS バイナリサイズ | 45 MB(未使用 Expo モジュールを自動削除) | 58 MB(手動で R8/ProGuard 設定が必要) |
| ビルド時最適化 | expo prebuild が未使用モジュールを検出し除外 |
開発者が gradle.properties や Xcode の Strip Settings を設定 |
- Managed の自動トリミング:
expo prebuild実行時にunusedModulesリストを生成し、Xcode/Gradle に対してEXCLUDED_ARCHSなどのフラグを付与。結果として平均 12 MB のサイズ削減が確認されています(公式ベンチマークレポート)。 - Bare の手動管理:R8 / ProGuard の有効化、未使用ライブラリの
implementationから除外、app/build.gradleのminifyEnabled true設定などを行わないと、サイズが 30 % 超増加するリスクがあります。
ワークフロー選択指針と移行ガイド
プロジェクトの規模・要件に応じて最適な Workflow を選ぶことが成功の鍵です。ここでは代表的シナリオ別の推奨選択肢と、Managed ↔ Bare 間の具体的な移行手順を示します。
シナリオ別推奨ワークフロー
各ユースケースに対して最適な Workflow とその根拠をまとめました。
| シナリオ | 主な要件 | 推奨 Workflow | 理由 |
|---|---|---|---|
| スタートアップ MVP | 速い市場投入、開発人数少、頻繁な OTA 更新 | Managed (SDK 53) | EAS Build と OTA がデフォルトで利用でき、ネイティブコード不要。 |
| エンタープライズ大型アプリ | 複数チーム・長期保守、社内認証・カスタム SDK | Managed + EAS Submit(必要に応じて段階的 Bare) | CI/CD が一元化でき、Config Plugin で拡張性確保。 |
| 必須ネイティブ機能(医療センサー・独自 AR エンジン) | カスタム C/C++ ブリッジ、低レイテンシ要求 | Bare | ネイティブコードの直接編集が不可欠。 |
| マルチプラットフォーム展開(iOS/Android/Web/Electron) | 同一コードベースで全方位に配布 | Managed (Expo SDK 53 の Web 対応) | expo-router と react-native-web が標準サポート。 |
選定チェックリスト
- ネイティブモジュールの有無
- OTA 更新頻度とサイズ要件
- CI/CD 環境(EAS Build が利用可能か)
- 長期保守体制・社内規約
Managed → Bare の具体的移行ステップ(eject)
Managed から Bare へ移行する際の注意点と手順です。
- プロジェクトをエクスポート
bash
expo prebuild # または expo eject - 生成された
ios/とandroid/ディレクトリを Git 管理下に追加。 - Config Plugin の変換:独自プラグインがある場合は
react-native.config.jsに移行し、手動リンクの必要性を確認。 - ネイティブ設定の調整
- iOS:
Info.plist・AppDelegate.mのカスタムコードを追加。 - Android:
AndroidManifest.xml・MainApplication.javaに必要な初期化処理を書き込む。 - EAS Build プロファイルの更新:
eas.jsonの"build"セクションで"workflow": "bare"を明示。
重要ポイント:Managed 時に使用していた
expo-constantsやexpo-updatesなどは自動的にネイティブ化されますが、カスタムスキーマやプッシュ通知設定は手作業でInfo.plist/AndroidManifest.xmlに反映してください。
Bare → Managed の具体的移行ステップ(prebuild)
Bare から Managed に戻す場合の流れです。
- Expo SDK と core モジュールをインストール
bash
yarn add expo@^53.0.0 expo-modules-core app.json/app.config.jsに必要なプラグインを列挙(例:"plugins": ["expo-camera", "expo-location"])。- ネイティブコードの自動生成
bash
expo prebuild
生成されたios/とandroid/はそのままコミットし、以降は Managed のビルドフローに戻ります。 - カスタムネイティブモジュールのプラグイン化:手動で追加したコードがある場合は公式テンプレート(
expo-plugin-template)を利用して Config Plugin に変換し、Managed ビルドでも動作させる。
注意点:Bare 時に追加したサードパーティのネイティブモジュールが Config Plugin 化されていないと、Managed ビルド時にリンクエラーが発生します。必ず
expo config --type prebuildで検証してください。
用語集(Glossary)
| 用語 | 説明 |
|---|---|
| Managed Workflow | Expo が提供するビルド・配布・OTA のすべてを自動化した開発フロー。 app.json で設定のみ管理。 |
| Bare Workflow | 標準の React Native CLI プロジェクトとして、iOS/Android ディレクトリを手動管理するフロー。 |
| Config Plugin | Expo の expo prebuild が実行時にネイティブコードへ自動的にリンクさせるプラグイン機構。 |
| EAS Build | Expo Application Services が提供するクラウドビルドサービス。macOS・Ubuntu の標準環境でビルドを実行できる。 |
| OTA 更新 | アプリストア再審査不要で、JavaScript バンドルやアセットだけをリモート配信する仕組み。 |
| runtimeVersion | OTA 更新時にバイナリ互換性を保証するためのバージョン識別子。SemVer 推奨。 |
| expo-updates | OTA 機能を提供する Expo パッケージ。Managed ではデフォルト組み込み、Bare は手動導入が必要。 |
| R8 / ProGuard | Android ビルド時に未使用コードやリソースを除去し、バイナリサイズと混淆を最適化するツール。 |
| Flipper | iOS/Android のネイティブデバッグ・パフォーマンス解析プラットフォーム。 |
参考情報
- Expo Blog – SDK 53 Release (2026‑01‑15)
https://blog.expo.dev/sdk-53-release-2026 - Expo Documentation – Config Plugins
https://docs.expo.dev/guides/config-plugins/ - Expo Docs – Using expo-updates in Bare Workflow
https://docs.expo.dev/bare/updating-your-app/ - EAS Build Documentation
https://docs.expo.dev/build/introduction/ - When to use Bare workflow? (Official)
https://docs.expo.dev/bare/using-bare-workflow/#when-to-use-bare
このガイドは公式情報を元に執筆しており、2026 年リリースの SDK 53+ の機能や制限については上記リンク先の最新ドキュメントをご参照ください。