Expo
Overview
ExpoはReact Nativeアプリを開発 / ビルド /デプロイするためのエコシステム(ツール群およびプラットフォーム)
単なるライブラリではなく、開発者のワークフロー全体を強力にサポートする
Expoの歴史:3つのパラダイムシフト
Expoを理解するには、その進化の歴史を知るのが一番の近道。
- Managed Workflow の時代(初期〜2020年頃) 特徴: 「Expo Go」アプリ内でのみ開発 メリット: XcodeやAndroid Studioが不要。QRコードをスキャンするだけで動く 限界: ネイティブコード(Swift/Kotlin)を一切触れず、独自のネイティブライブラリ(Firebase Native等)が追加できなかった 当時の評価: 「初心者向け、プロトタイプ向け」という印象
- Bare Workflow と EAS の登場(2021年〜2023年頃) 特徴: 自由にネイティブコードを触りつつ、Expoの便利なAPI(Camera, Notifications等)を使えるように 革命: EAS (Expo Application Services) の登場により、クラウド上でビルド、App Store/Google Playへの提出を自動化
- "The Only Way" へ(2024年〜現在) 現在: 現在、React Native公式ドキュメントでも 「Expoを使うこと」が標準 として推奨されている 進化: expo-dev-client により、ManagedとBareの境界が消滅。どんなに複雑なネイティブライブラリを使うプロジェクトでも、Expoの恩恵を受けられるようになった
Expoの2つの開発モード(ビルドの仕組み)
現在の開発者が最も混乱しやすいのが、「どのアプリ(バイナリ)を使ってデバッグするか」
| 項目 | Expo Go | Development Builds (expo-dev-client) |
|---|---|---|
| アプリ本体 | ストアからDLする汎用アプリ | 自分のプロジェクト専用にビルドしたアプリ |
| ネイティブコード | Expo標準搭載のものだけ | 自由に追加・変更可能 |
| ライブラリ制限 | あり(Firebase Native等は不可) | 制限なし(Config, Firebase等OK) |
| 推奨ケース | 学習、単純なプロトタイプ | 実務アプリ、商用開発の標準 |
主要なコンポーネント
- Expo SDK React Native本体を拡張した強力な標準ライブラリ群 expo-camera, expo-location, expo-file-system など、一貫したAPIで提供されます。
- EAS (Expo Application Services) Expoが提供するクラウドサービス。 EAS Build: クラウドで .ipa / .aab を作成(MacがなくてもiOSビルドが可能 EAS Update: アプリ審査を通さず、JavaScriptの修正だけを即座にユーザーへ配信(いわゆるCodePush) EAS Submit: ストアへのアップロードをコマンド一つで代行。
- Expo Router Next.jsのような ファイルシステムベースのルーティング をReact Nativeに持ち込みました。Webとのコード共有がさらに容易になりました。
なぜ現代のReact Native開発でExpoを使うのか?
- メンテナビリティ: React Nativeのバージョンアップに伴うネイティブ層の破壊的変更を、Expoがある程度吸収してくれる。
- Prebuild: ios や android フォルダを自動生成(および自動破棄)できる仕組み。これにより、ネイティブ設定を app.json (Config Plugins) で宣言的に管理できる。
- 開発速度: 実機デバッグの開始が圧倒的に速い。
Expo メリット
| 特徴 | 説明 |
|---|---|
| OTAアップデート | Expoではアプリストアを通さずに、JavaScript層の修正を即座に反映可能 |
| 豊富な機能 | Expo SDK には、カメラ、位置情報、通知などの機能が標準で多数含まれる |
| 開発ツール | Expo Goアプリを使用することで、QRコード経由で実機テストが容易 |
| クラウドビルド | EAS Build により、ローカル環境(Macの有無など)に依存せずアプリをビルド |
| Web対応 | Expoは追加設定なしでWebアプリ(React Web)としてのビルドもサポート |