Expo SDK 53 で導入された主要な変更点や新機能まとめ、最新アップデート対応ガイド – React Native Expo
目次
- 1 Expo SDK 53 で導入された主要な変更点や新機能まとめ、最新アップデート対応ガイド – React Native Expo
- 1.1 Expo SDK 53で導入された新しいアーキテクチャ(New Architecture)とは?デフォルト化と移行方法
- 1.2 Expo SDK 53に含まれるReact Native 0.79とReact 19の主なアップデート内容と新機能紹介
- 1.3 Expo SDK 53で導入された新しい背景タスク用モジュール(expo-background-task)の特徴と使い方
- 1.4 AndroidでのEdge-to-Edge表示対応がデフォルト化:Expo SDK 53の変化点と設定方法
- 1.5 Expo SDK 53で導入されたライブラリの改善(expo-audio安定版、expo-maps、expo-notifications強化など)
- 2 Expo SDK 53へのバージョンアップ手順と移行時の注意点を徹底解説【最新アップグレードガイド】
- 3 【実践ガイド】Expo UIの特徴と基本的な使い方を解説【CardやModalなど主要コンポーネントも紹介】
- 4 React Native + Expoの概要とメリット【基本概念と導入のメリットをわかりやすく解説】
- 5 Expoでアプリを作る基本的な流れ:プロジェクト立ち上げから公開までの全ステップを徹底解説【初心者ガイド】
- 5.1 【手順】Expoプロジェクトの作成:expo initでテンプレートを選択し開発環境を構築する方法【初心者向け】
- 5.2 開発中のアプリ起動方法:Expo GoやMetroサーバを使った実行とホットリロード/Live Reloadの活用法
- 5.3 Expoアプリのビルド:EAS Buildを使ったiOS/AndroidビルドとApp Store公開までの流れ
- 5.4 【配布・更新】Expo UpdatesによるOTAアップデートとアプリストア公開までの基本手順【徹底解説】
- 5.5 【開発Tips】Expoアプリのデバッグとテスト:開発ツール・シミュレータ・実機テストのポイント解説【初心者向け】
- 6 【2025年最新版】Expo開発者がよくハマるトラブル事例とその解決方法を徹底解説【初心者ガイドまとめ】
- 7 【Expoエラー対策】開発中に起こる問題とその解決手順を徹底解説
Expo SDK 53 で導入された主要な変更点や新機能まとめ、最新アップデート対応ガイド – React Native Expo
Expo SDK 53は2025年4月にリリースされ、多くの注目すべき新機能や改善が含まれています。主な更新内容として、React Native 0.79およびReact 19へのバージョンアップが行われたことが挙げられます。これにより、React 19で導入されたSuspenseやuseフックなどの最新機能が利用可能になり、開発者はコンポーネントの待ち状態処理やプロミス対応コードがより簡単に実装できます。また、Expo SDK 53では新しいアーキテクチャ(Fabric+TurboModules)が全プロジェクトでデフォルト有効化され、パフォーマンスや安定性の向上が期待できます。さらに、Android端末向けに画面全体表示(Edge-to-Edge)が新規プロジェクトでデフォルト化され、ユーザー体験の向上が図られました。加えて、バックグラウンドタスク関連のモジュールが刷新され、旧来のexpo-background-fetchに代わってexpo-background-taskが導入されています。そのほか、expo-audioの安定版リリースやexpo-mapsのアルファ版公開、expo-updatesの起動速度改善、expo-sqliteのWeb対応追加、expo-notificationsの内部Swift化など、多岐にわたるライブラリの強化が行われています。以下ではこれらの主な変更点を詳しく解説します。
Expo SDK 53で導入された新しいアーキテクチャ(New Architecture)とは?デフォルト化と移行方法
Expo SDK 53ではReact Nativeの新アーキテクチャ(いわゆるFabricとTurboModules)がすべてのプロジェクトでデフォルト有効化されました。新アーキテクチャを採用すると、UIコンポーネントの描画やネイティブモジュールの読み込み速度が向上し、アプリのパフォーマンスが改善されます。一方で、一部のサードパーティライブラリが新方式に対応していない場合はエラーが発生する可能性もあります。そのため、アプリをSDK 53にアップデートする際には、"expo.cli.updates.disableNewArchitecture": falseを設定して新アーキテクチャを有効化するか、expo prebuild --cleanなどで一度ビルドをクリーンアップしてから動作確認を行うのがおすすめです。もし互換性の問題があれば、SDK 53へのバージョンアップと新アーキテクチャへの移行を別々のステップで実施し、問題が解決するまで新アーキテクチャをオプトアウト(無効化)しておくことも可能です。
Expo SDK 53に含まれるReact Native 0.79とReact 19の主なアップデート内容と新機能紹介
Expo SDK 53では基盤となるReact Nativeが0.79に更新され、同時にReactのバージョンが19に上がりました。React 19ではSuspenseの標準サポートや、新しいuse()フックなど、宣言的な非同期処理の記述をサポートする機能が追加されています。これにより、コンポーネント内でPromiseを使った処理が簡潔に書けるようになります。また、React Native側では内部でMetroバンドラーのpackage.json exportsフィールドがデフォルト有効化されたため、ESモジュールの解決方法が変更されました。場合によっては、古いCommonJSパッケージとの両立に注意が必要で、依存関係の不整合によりビルド時エラーが発生することもあります。これらのエラー対策としては、ライブラリを最新版に更新するか、アプリ設定でunstable_enablePackageExports: falseを一時的に指定して互換性を保つ方法が推奨されています。
Expo SDK 53で導入された新しい背景タスク用モジュール(expo-background-task)の特徴と使い方
従来のexpo-background-fetchモジュールに代わり、SDK 53ではexpo-background-taskが導入され、最新のAndroid/iOS APIを利用したバックグラウンドタスク実行が可能になりました。この新パッケージは、AndroidではWorkManager、iOSではBGTaskSchedulerをベースに実装されており、バッテリー効率を重視したタスクスケジューリングが行えます。具体的には、アプリがバックグラウンド状態のときに定期的なデータのダウンロードやローカルDBのクリーンアップを自動的に実行できるようになり、TaskManager.defineTaskとBackgroundTask.registerTaskAsyncを組み合わせてタスクを設定します。これによりExpo Updateの新バージョンチェックやフェッチをバックグラウンドで自動化する仕組みなども簡単に構築できます。
AndroidでのEdge-to-Edge表示対応がデフォルト化:Expo SDK 53の変化点と設定方法
Expo SDK 53からは、Android 15以降の仕様変更に対応し、新規プロジェクトではデフォルトで「Edge-to-Edge表示」が有効になります。Edge-to-Edge表示とは、ステータスバーやナビゲーションバーをアプリのコンテンツの上に半透明で重ねるデザインのことです。これにより画面がより広く見えるメリットがありますが、一部端末ではコンテンツがバーに隠れる可能性もあるため、 useSafeAreaInsets()を使って余白調整を行うことが重要です。既存プロジェクトではオプトイン設定になっており、必要であればandroidStatusBarやandroidNavigationBarの設定を変更してEdge-to-Edgeを有効化できます。なお、SDK 54以降では全プロジェクトに自動適用される予定なので、早めにUIの対応を検討しておくと良いでしょう。
Expo SDK 53で導入されたライブラリの改善(expo-audio安定版、expo-maps、expo-notifications強化など)
SDK 53ではいくつかのExpoライブラリも大幅に強化されています。まず、音声関連では従来のexpo-avのAudioコンポーネントに代わる新たなexpo-audioが安定リリースされました。expo-audioは以前のベータ版を経て信頼性が高まり、従来のAudioよりも使いやすく、高パフォーマンスな音声再生をサポートします。地図関連では新しいexpo-mapsパッケージがα版として公開されました。これはAndroid上でGoogle Maps、iOS上でApple MapsをJetpack Compose/SwiftUIで利用できるモジュールで、iOS 17以降を対象にネイティブUIでの地図表示が可能です。通知機能ではexpo-notificationsのAndroid用Push通知にカスタムアイコン・画像が追加され、iOS実装がほぼSwiftベースに移行されて安定性が向上しました。さらに、expo-updatesではアセットコピーの最適化やヘッダ設定のランタイム上書き機能が追加され、アップデート時の起動時間短縮や柔軟な配信制御が可能となりました。これらのアップデートにより、SDK 53では音声・地図・通知機能が一段と充実し、より高度なアプリ開発が行いやすくなっています。
Expo SDK 53へのバージョンアップ手順と移行時の注意点を徹底解説【最新アップグレードガイド】
Expo SDK 53へアップグレードする際は、事前にいくつかの準備と確認を行うことが重要です。まず、開発環境のNode.jsやnpm、Expo CLIのバージョンを最新に更新し、依存パッケージに古いものがないか確認します。次に、expo upgradeコマンドを使ってプロジェクトを53に更新しますが、その前にGitなどのバージョン管理で変更をコミットしてバックアップを取っておくことが推奨されます。アップグレード中は、iOS/Android固有の設定も更新されるため、XcodeやAndroid StudioのSDKも最新状態に保ちます。特に、AndroidではGradleやSDKレベル、iOSではXcodeのバージョンや証明書周りの変更に注意が必要です。さらに、SDK 53では新アーキテクチャや新ライブラリが導入されているので、移行後にアプリを起動して動作確認を行い、エラーが出た場合は一つずつ原因を潰していきます。以下の手順で安全にアップグレードを進め、移行時のトラブルを回避しましょう。
- 事前準備:Node.jsやnpm、Expo CLIのバージョンを更新し、プロジェクト依存関係を整理します。特に古いパッケージや非推奨モジュールがないかチェックしておきます。
- バックアップ取得:アップグレード前にソースコードや設定ファイルをコミットし、既存の動作状態を確保しておきます。
- アップグレード実行:プロジェクトルートで
expo upgradeを実行し、指示に従ってSDK 53へ更新します。必要に応じてexpo prebuild --cleanでネイティブフォルダをリフレッシュすることも検討します。 - iOS/Android設定更新:AndroidではGradleやSDKバージョンの調整、Xcodeでは新しいiOSバージョン対応のための設定更新を行います。ビルド関連のエラーが出る場合は、エラーメッセージに沿って設定を見直してください。
- 新アーキテクチャ対応:新アーキテクチャを利用したい場合は明示的に有効化し、問題がある場合は一時的にオフにして旧方式でビルド・動作確認を行います。
- 動作確認とトラブルシューティング:Expo GoやEAS Buildでアプリを起動し、エラーや警告が出ないかチェックします。特にネットワークや権限、ネイティブモジュール周りのエラーは入念に検証し、必要に応じてドキュメントを参照して修正します。
Expo SDK 53へのアップグレード前に準備すべき環境確認とツール(Node.js, expo-cli)の更新
アップグレード作業を始める前に、開発環境の準備を整えておきましょう。まず、Node.jsやnpm/yarnのバージョンを最新に更新し、Expo CLI(npm install -g expo-cli)も最新版へアップデートします。これにより、SDK 53との互換性が確保され、不要なエラーを防ぎます。次に、プロジェクト内のpackage.jsonやnode_modulesに古いパッケージが含まれていないか確認します。可能であればnpm installで再インストールしてキャッシュをクリアし、依存関係の整合性を保ちます。さらに、作業前にはGitなどで現在のコードと設定をコミットしておくことで、アップグレード後に問題が発生した際も簡単にロールバックできるように準備しておきます。
実践:expo upgrade コマンドを使ってExpo SDK 53へプロジェクトを更新する手順と注意点
環境が整ったら、いよいよアップグレードを実行します。プロジェクトディレクトリでexpo upgradeコマンドを実行すると、対話式にSDKバージョンの選択画面が表示されるので「53」を選びましょう。コマンドは自動的にpackage.jsonのexpoバージョンを更新し、依存パッケージのインストールや、必要なネイティブフォルダの変更を進めます。アップグレード中に警告メッセージが出た場合は、案内に従って追加作業(Podのインストールやアセットの移動など)を行います。完了後は、一度expo prebuild --cleanを実行してネイティブプロジェクトをクリーンに構築し、環境が正常に移行できているか確認します。エラーが発生した場合はログをよく確認し、モジュールの互換性やパス設定を見直しましょう。
iOSとAndroidのビルド設定更新:Expo SDK 53向けにXcodeやGradle設定を変更するポイント
SDKの更新後には、iOSとAndroidそれぞれのビルド設定を見直します。Androidでは、compileSdkVersionやtargetSdkVersionがExpoで推奨されるバージョンに設定されているか確認してください。GradleファイルやAndroidManifest.xmlで新しい権限(バックグラウンドタスクや通知など)を追加する必要が生じる場合もあります。iOS側では、XcodeプロジェクトのSwiftバージョンやiOSデプロイターゲットがExpoの要件に合っているかチェックし、必要に応じて値を引き上げます。また、新アーキテクチャでのビルド失敗を防ぐため、Xcode上でExpoの推奨するフレームワーク配置(Swiftファイル位置など)を確認しましょう。こうした設定修正後は必ずビルドして実行し、エラーが出ないか検証します。
Expo SDK 53で導入された新アーキテクチャ(New Architecture)への切り替え手順とリスク回避
Expo SDK 53でデフォルト有効化された新アーキテクチャを使う場合は、app.jsonまたはapp.config.jsでexperimental.newArchEnabledをtrueに設定します。この設定によりFabricやTurboModulesが有効となり、アプリ起動時のパフォーマンスが向上します。ただし、サードパーティ製ライブラリが対応していないとビルドエラーになることもあります。問題が起きた場合は、一時的にexperimental.newArchEnabledをfalseに戻して従来型での動作確認を行い、対応ライブラリのアップデートや代替モジュールの検討を行いましょう。新アーキテクチャ移行には、公式ドキュメントの移行ガイドやコミュニティのIssueも参照すると安全です。
アップデート完了後の動作確認方法とよくあるトラブルの回避策【Expo SDK 53移行後のチェックポイント】
アップグレードが完了したら、まずExpo GoやEAS Buildで実際にアプリを動かし、エラーや警告が出ないか確認します。特に依存関係のずれから起こるModule not foundエラーや、Androidでのパーミッション周りの警告には注意しましょう。デバッグログを見て問題箇所を特定し、必要に応じて依存パッケージのバージョンを見直します。もしアセットの読み込みで白画面になる場合は、キャッシュをクリアする(expo start -c)ことで解決することもあります。最後に、各プラットフォーム上で基本機能(カメラや位置情報、ネットワーク通信など)が正常に動作するかテストし、問題なければ移行は完了です。
【実践ガイド】Expo UIの特徴と基本的な使い方を解説【CardやModalなど主要コンポーネントも紹介】
Expo UI(@expo/ui)は、React NativeのアプリからiOSのSwiftUIやAndroidのJetpack Composeコンポーネントを直接利用できる新しいライブラリセットです。Expoが開発するこのUIキットを使うと、プラットフォームネイティブのフォーム部品(ボタン、スイッチ、テキスト入力など)をReactコンポーネントとして扱えるようになります。SDK 53以降ではExpo 54の時点でSwiftUI版(ベータ)やJetpack版(アルファ)が提供されており、専用モジュールをインストールしてインポートすることで使用できます。Expo UIを導入すると、OSネイティブの見た目や動作を維持しつつ開発できる一方で、iOS用とAndroid用でAPIが分かれているため、それぞれに応じた実装が必要です。以下では、Expo UIの概要と主要コンポーネントの使い方について詳しく見ていきます。
【初心者向け完全ガイド】Expo UIとは?特徴やメリットと他のUIライブラリとの違いをわかりやすく徹底解説
Expo UIは、従来のReact Nativeコンポーネントとは異なり、OSネイティブのUIフレームワークをラップして提供する新しいアプローチです。例えば、@expo/ui/swift-uiではSwiftUIコンポーネント、@expo/ui/jetpack-composeではJetpack ComposeコンポーネントがReactから利用できる形で提供されます。これにより、iOSではSwiftUI、AndroidではComposeのプリミティブ(Button、TextField、Switchなど)が使えます。Expo UIのメリットは、OS標準のレンダリングエンジンを直接活用できるため、パフォーマンスや見た目の一貫性が高まる点です。ただし、現時点ではコンポーネントがプラットフォームごとに分かれており、完全なクロスプラットフォーム共通実装ではありません。React Native PaperやNativeBaseのような従来のライブラリは同一コードで動作するのに対し、Expo UIはネイティブのルック&フィールを重視する場面で使い分けられます。導入にはnpm install @expo/uiを行い、import { Button } from '@expo/ui/swift-ui'のようにプラットフォーム別に使います。なお、Expo UIはまだ発展途上のため、現在は主にiOS/AndroidネイティブUIの活用が目的であり、完全な代替ではなく補完的な位置づけです。
【例あり】Expo UIの主要コンポーネント例:CardやButton、Modalなどの種類と主な用途を解説
Expo自体には専用の「Card」コンポーネントはありませんが、Expoアプリではよく「カード」レイアウトを表示するためにサードパーティ(例:React Native Paper)のimport { Button } from '@expo/ui/jetpack-compose'(Androidの場合)などとし、テキストボタンや浮動小数点スライダーなどが提供されます。Expo UIのコンポーネントはテーマやスタイルと連動しやすく、デフォルト状態でもプラットフォーム標準のデザインを持っています。たとえば、iOSのButtonでは透明背景+テキスト、Androidではマテリアルデザイン準拠のボタンが自動選択されるため、複数端末にまたがるデザインの調整が不要です。また、Modal(モーダル)に相当する画面もReact Native標準のModalやReact Navigationのモーダルスクリーンで実装できます。CardやModalは情報の区切りや注目を集めるのに使い、リストの項目をカード形式で表示したり、重要なメッセージをモーダルで表示する用途で頻繁に活用されます。
【手順解説】Expo UIをプロジェクトに導入する方法:インストールから基本設定まで徹底解説
Expo UIを使うには、まずnpm install @expo/ui(またはyarn add @expo/ui)でライブラリを追加します。次に、React Nativeのソースコード内で必要なコンポーネントをインポートします。たとえば、Android向けのボタンを使用する場合はimport { Button } from '@expo/ui/jetpack-compose'と記述します。iOS向けには@expo/ui/swift-uiのパッケージからButtonをインポートします。導入後、Expo CLIで再ビルド(必要に応じてexpo prebuild)を行うと、ネイティブプロジェクトにExpo UIが組み込まれます。注意点として、Expo UIはまだベータ段階のAPIが多いため、公式ドキュメントやリリースノートを随時チェックして最新の使用例に従うことが推奨されます。
Expo UIコンポーネントのスタイルとテーマ設定:カスタマイズ方法と実例付きデザインパターンを紹介
Expo UIでは、テーマ(色やフォントなど)を設定して全体の見た目を統一できます。例えば、React NavigationやNativeWindと組み合わせることで、アプリ共通のカラーパレットを簡単に適用できます。Expo UIのコンポーネントにはデフォルトのスタイルが用意されていますが、styleプロパティで上書きしたり、Theming機能を使ってテーマを一括変更したりできます。実例として、アプリ全体のテーマカラーを設定するには、RootコンポーネントにThemeProviderを設定し、colors.primaryを指定します。これにより、全てのボタンやスライダーが同じ基調色で描画されます。また、Cardなどのコンポーネントで丸みや影の有無を調整する場合は、スタイルにborderRadiusやelevation(Android)/ shadowOpacity(iOS)を指定します。こうしたカスタマイズにより、デザインガイドラインに沿ったUIが簡単に構築できます。
【実践例】Expo UIで簡単な画面を作成する手順:CardとButtonのサンプル実装【初心者向け】
実際に簡単な画面例を作ってみましょう。例えば、ニュース記事のリストをカード表示する場合、React Native PaperのCardを使って以下のように実装します。
import { Card, Button } from 'react-native-paper';(Expo UIと組み合わせる場合は@expo/uiのコンポーネントを使用)- 記事データを
FlatListでループし、各アイテムごとにCard.Title,Card.Contentを配置 - カード下部にアクションボタン(例:続きを読む)を
Card.Actions内に追加
このように、Cardコンポーネントは画像、タイトル、内容、ボタンを一つの枠にまとめて表示できます。ボタンにはButtonを使い、押下イベントを設定して詳細画面へ遷移させます。スタイルはデフォルトで整えられているため、特別なCSS指定なしでも見栄え良く表示されます。実装例のポイントは、親コンポーネントでデータ取得やnavigationを準備し、各CardにonPressやimageURL、title、descriptionなどのpropsを渡すことです。これにより、短いコードでカード形式の一覧画面が実現でき、ユーザーにとって見やすいUIを簡単に構築できます。
React Native + Expoの概要とメリット【基本概念と導入のメリットをわかりやすく解説】
React NativeはJavaScript/TypeScriptでモバイルアプリを開発するフレームワークですが、Expoはその上に成り立つ開発ツールチェーン・フレームワークです。Expoを使うと、アプリ開発の初期セットアップからデバッグ、ビルド、配布までを一貫してサポートしてくれます。具体的には、Expo CLIでテンプレートプロジェクトを作成でき、追加のネイティブコーディングなしで多くの機能(カメラ、位置情報、プッシュ通知など)を簡単に組み込めます。Managed Workflowではネイティブの設定ファイルを直接触る必要がなく、シミュレータや実機に素早くアプリを読み込めるため、開発者はコードを書くことに集中できます。その一方、必要に応じてNative Modulesを追加したい場合はBare Workflowへ切り替え、React Native CLIプロジェクトとして扱うことも可能です。以下では、Expoの使いどころやReact Nativeとの違い、選択肢の違いについて詳しく見ていきます。
React NativeとExpoの違いと関係性:Expoが提供する開発環境の特徴をわかりやすく解説
React Nativeは純粋にアプリロジックとUIをコードするフレームワークですが、Expoはその上に便利機能を積み上げたツールキットと考えるとわかりやすいです。Expoでは、独自のExpo Goアプリを使って開発中のアプリをリアルタイムにプレビューできたり、多くのネイティブAPIが最初から利用可能だったりします。つまり、ExpoはReact Nativeアプリを素早く始め、テストし、配布するための「ショートカット」が多数用意されています。例えば、App StoreやGoogle Playに提出する前にexpo publishでOTA配信できる点や、expo buildコマンドでアプリのバイナリを生成できる点は大きな特徴です。ただし、Expoアプリはその分パッケージのサイズが大きくなる傾向があり、ネイティブの調整が必要な場合はBare Workflowに移行する必要があります。
Managed WorkflowとBare Workflow:Expo開発における選択肢とそれぞれの特徴
Expoには二つのワークフローがあります。Managed Workflowでは、開発者はExpoが用意する環境下でほとんどの作業を行います。ネイティブコードを書かずにすぐ開発を始められ、ライブラリ互換性も高いのが利点です。例えば、expo initでプロジェクトを作成し、expo startで動作確認、expo buildやeas buildでビルドという流れになります。一方、Bare WorkflowはReact Native CLIによる一般的なプロジェクトで、Expoのメリット(ライブラリやCLIなど)を利用しつつ、ネイティブ設定やカスタムネイティブモジュールの追加が自由に行えます。つまり、Expoの多くの機能は使えますが、必要な場合に
Expoを使うメリット:簡単セットアップ、即時プレビュー、OTA更新など開発効率が飛躍的に向上する理由
Expoを利用する最大のメリットは、初期セットアップが驚くほど簡単な点です。コマンド一つでプロジェクトが立ち上がり、すぐにExpo GoアプリでQRコードを読み込むだけで実機にアプリを表示できるため、コード変更の度にビルドし直す必要がありません。これにより、コード修正→確認というサイクルが即時反映され、開発スピードが格段に上がります。また、アプリ配布面でもExpoは強力です。expo publishやeas updateを使えば、App Store審査を待たずともユーザーに即時アップデートを届けられます。これらの機能により、開発初期からユーザーテスト、リリースまでの一連の流れを高速化できるのがExpo導入の大きな魅力です。
【Expoの制約とは?】カスタムネイティブ機能追加時にEjectが必要となるケースと回避方法をわかりやすく解説
Expoは多くのAPIを提供しますが、すべてのネイティブ機能を網羅しているわけではありません。例えば、サードパーティのネイティブモジュールや独自のiOSフレームワークを使いたい場合、Managed Workflowでは対応できないことがあります。このような場合に必要なのがexpo ejectです。EjectするとプロジェクトがBare Workflowに変わり、iOS/Androidのネイティブプロジェクトが生成されます。Ejectは一度実行すると戻せないので、可能な限りexpo-dev-clientや既存のExpoライブラリで代替できないか検討するのが望ましいです。また、将来的な保守を考えて、使うライブラリや機能がExpo対応かどうか事前に確認しておくことも重要です。つまり、一般的な開発ではExpoの提供機能で完結させ、高度なネイティブ機能が必要になった段階でEjectする、という使い分けが推奨されます。
【比較】Expo CLIとReact Native CLIの違い:両者の特徴と使い分け方【初心者向け】
プロジェクト管理に使うCLIにも違いがあります。react-native initで作成するReact Native CLIプロジェクトでは、必要なネイティブ設定を自分で行う必要がありますが、expo initは基本設定が整った状態から始められます。Expo CLIはアプリのビルド・起動・デバッグ・配布まで包括的にサポートする一方、React Native CLIはより手動に近い自由度があります。具体的には、Expo CLIはexpo startやexpo build、expo publishなど便利コマンドが整備されており、初心者でも簡単に使えます。React Native CLIでは代わりにnpx react-native run-iosなどのコマンドを使いますが、ビルド設定や証明書の管理は全て自分で行わなくてはなりません。プロジェクトの規模やチームのスキルセットに応じて、手軽さを重視するならExpo CLI、細かい制御が必要ならReact Native CLIを選ぶと良いでしょう。
Expoでアプリを作る基本的な流れ:プロジェクト立ち上げから公開までの全ステップを徹底解説【初心者ガイド】
Expoを用いたアプリ開発は、一連の手順でスムーズに進められます。最初にexpo initコマンドを使ってテンプレートプロジェクトを作成し、必要な依存パッケージをインストールします。その後、expo startでMetroサーバを起動し、スマートフォンのExpo GoアプリやWebブラウザでリアルタイムにアプリをテストします。コード変更は自動的に画面に反映され、ホットリロードやライブリロードで開発が効率化されます。機能が完成したら、eas buildを使ってiOS/Androidアプリをビルドし、App Store/Google Playへの提出ファイル(.ipa/.apk/.aab)を生成します。さらに、expo publishやeas updateでOTA更新も行い、リリース後のバージョン管理を容易にします。以下に主要なステップをまとめます。
- プロジェクトの立ち上げ:ターミナルで
expo init <プロジェクト名>を実行し、テンプレート(Blank, Tabs, Drawerなど)を選択してプロジェクトを作成します。 - 依存パッケージのインストール:作成したプロジェクトフォルダに移動し、
npm installまたはyarnで必要なパッケージをインストールします。 - 開発環境での実行:
expo startを実行し、Metroバンドラーを起動します。表示されるQRコードをスマホのExpo Goで読み込むか、エミュレータを起動してアプリを確認します。 - コード編集とプレビュー:ソースコードを編集するとホットリロードで即座にUIに反映されます。React HooksやExpoのAPIを使って画面を構築し、リアルタイムに動作を確認しながら開発を進めます。
- デバッグ・テスト:Expo DevTools(Web UI)やReact Native Debuggerを使い、コンソールログやデバッグモードで挙動を検証します。ユニットテストやE2Eテストも導入して品質を確保します。
- アプリのビルドと公開:
eas build --platform iosやeas build --platform androidで各ストア提出用のビルドを実行します。取得したバイナリをTestFlight/Google Playにアップロードし、必要な審査を通過させて公開します。 - OTAアップデート:ストア版とは別に、
expo publishまたはeas updateでJavaScriptバンドルをクラウド配信し、ユーザーに即時アップデートを提供します。
【手順】Expoプロジェクトの作成:expo initでテンプレートを選択し開発環境を構築する方法【初心者向け】
Expoアプリ開発はまずexpo initから始まります。ターミナルでexpo init myAppと入力すると、テンプレート選択画面が現れます。シンプルな空のプロジェクトが欲しければ「Blank」を選択し、タブやドロワーナビゲーション付きのテンプレートが必要な場合はそれぞれ対応するオプションを選びます。テンプレート選択後は、プロジェクト名やパッケージ名を設定して完了です。これにより、必要な依存関係と基本フォルダ構成が自動生成され、すぐに開発を開始できます。生成されるプロジェクトにはすでにApp.jsなどのサンプルコードが用意されているので、これをベースに画面や機能を追加しながら開発を進めましょう。
開発中のアプリ起動方法:Expo GoやMetroサーバを使った実行とホットリロード/Live Reloadの活用法
プロジェクトが作成できたら、expo startコマンドで開発サーバを起動します。起動するとQRコード付きのWeb UIが開くので、スマートフォンにインストールしたExpo Goアプリでスキャンするとすぐにアプリが立ち上がります。エミュレータがある場合は、Web UI上のボタンでiOSシミュレータやAndroidエミュレータを起動することも可能です。この状態でソースコードを編集すると、変更内容が即座に画面に反映されるホットリロード(またはLive Reload)が自動で働きます。例えば、ボタンのテキストを変更したり新しい画面を追加すると、コマンドを打ち直すことなくアプリUIにすぐ反映されるので、短いサイクルで開発作業を進められます。バグが出たときは、ConsoleやReact Native Debuggerでログを確認しながら修正できるため、効率よく開発・デバッグできます。
Expoアプリのビルド:EAS Buildを使ったiOS/AndroidビルドとApp Store公開までの流れ
開発が完了したら、Expoのビルドサービスでアプリを生成します。まずeas build:configureを実行してEASのセットアップを行い、プロジェクトに必要なビルド設定(eas.json)を追加します。その後、iOSの場合はeas build --platform iosを、Androidの場合はeas build --platform androidでビルドを開始します。ビルドにはApple DeveloperアカウントやGoogle Playアカウントが紐付けられ、App Store・Google Playにそのまま提出できる形式のファイルが生成されます。ビルドが成功すると、Expoが配布URLを発行するので、それを使ってTestFlightやGoogle Play Consoleにアップロードします。あとはそれぞれの審査プロセスに沿って公開準備を進めれば、Expoで作成したアプリが正式にリリースされます。
【配布・更新】Expo UpdatesによるOTAアップデートとアプリストア公開までの基本手順【徹底解説】
アプリ公開後も継続的に改善を行う場合、ExpoのOTAアップデート機能を活用すると便利です。開発中にコードや資産を修正したら、expo publishまたはeas updateを実行するだけで、JavaScriptバンドルがクラウドに配信されます。ユーザーがアプリを起動すると新しいバンドルが自動でダウンロードされ、次回起動時から新機能や修正内容が反映されます。これにより、ストア審査を待たずにバグフィックスや軽微な機能追加を即時に反映できるため、ユーザー体験を素早く改善できます。ただし、重大なネイティブ変更を伴う更新(ネイティブモジュールの追加など)はストアアップデートが必要なので、アップデート内容の性質に応じて使い分けましょう。
【開発Tips】Expoアプリのデバッグとテスト:開発ツール・シミュレータ・実機テストのポイント解説【初心者向け】
Expo開発では、Expo Goで動作確認する以外にもデバッグ方法がいくつかあります。まず、Expo DevToolsの「Console」でアプリのログ出力を確認できます。また、ブラウザで開発中のアプリをプレビューするexpo start --webも利用可能です。さらに、単体テストにはJest、E2EテストにはDetoxやEAS Testを組み合わせると品質を高められます。実機テストでは必ずiOSとAndroid両方で動作検証し、通知許可やバックグラウンド挙動などプラットフォーム固有の挙動もチェックしておきましょう。エラーが発生した場合はログを確認し、必要に応じてexpo doctor(依存関係のチェック)やMetroキャッシュクリア(expo start -c)を行うとトラブルシュートがスムーズになります。
【2025年最新版】Expo開発者がよくハマるトラブル事例とその解決方法を徹底解説【初心者ガイドまとめ】
ExpoやReact Nativeの開発では、バージョンの不整合や環境設定ミスなど、思わぬトラブルに遭遇することがあります。特にSDK 53への移行時には、依存パッケージ同士のバージョン衝突や設定変更によるビルドエラーが起こりやすいです。また、Android/iOS固有の権限周りやリンク関連のトラブル、Expo Goでの動作異常なども定番の課題です。本章では、初心者がつまずきやすい具体的な事例を取り上げ、それぞれの原因と対応策を解説します。同じエラーに直面した場合でも、慌てず落ち着いて対処できるよう参考にしてください。
【トラブル対策】Expo/React Native移行時の依存関係の衝突によるエラーの原因と修正方法【初心者向け】
依存関係の衝突は非常に一般的な問題です。例えば、ReactやReact Nativeのバージョンがアップグレードされたとき、他のライブラリがまだ古いバージョンを要求しているとエラーになります。SDK 53にアップデートした直後に「Invariant Violation」や「Unable to resolve module」といったエラーが出たら、原因は依存パッケージ間のミスマッチです。対応策としては、package.jsonの依存バージョンを手動で最新に合わせるか、expo installでExpo推奨のバージョンに統一する方法があります。また、問題のライブラリがExpo 53未対応の場合は、fork版や代替パッケージに切り替えることも検討します。パッケージ更新後はnpm installやexpo start -cでキャッシュをクリアし、エラーが解消されているか確認しましょう。
【トラブル】Android/iOSビルドエラーの例と対処方法【EAS Build & ローカル完全解説】
AndroidやiOSのビルド時エラーもよくあるトラブルです。例えば、AndroidでGradle build failedが出た場合、JDKバージョンやSDKの整合性を確認します。また、「Failed to find provider」を含むエラーはパーミッション設定の不備が原因です。iOSでは「code signing」エラーが発生しがちで、Apple開発者アカウントの証明書やプロファイルが正しく設定されているか見直す必要があります。これらのエラー対処には、出力されたログメッセージを注意深く読むことが重要です。特定のエラーメッセージで検索し、公式ドキュメントやコミュニティの解決例を参考にすると解決の糸口が見つかります。EAS Buildを使う場合は、EASの管理画面に表示される詳細ログやビルドステータスも活用して原因を特定しましょう。
【完全解説】Expoでのパーミッション設定に関するトラブル(通知・カメラ・位置情報など)と対処法【2025年版】
通知(Push Notification)、カメラ、位置情報などのパーミッション関連の問題も開発者がよく直面する課題です。たとえば、expo-notificationsを使ったプッシュ通知で画像付き通知を表示する場合、Androidのチャネル設定やiOSの権限ダイアログ許可が必要になります。許可が正しく設定されていないと通知が表示されないことがあります。また、Android端末ではSDKバージョンによって自動で付与される権限と手動設定が必要な権限が異なるため、app.jsonで適切なandroid.permissionsを指定する必要があります。カメラや位置情報では、Barometerのようなセンシティブ権限の場合はユーザーに許可を求める許可ダイアログを必ず表示するコードを追加します。いずれの場合も、実機で許可ダイアログを許可したか確認し、シミュレータでは許可が自動的に下りている場合とそうでない場合があるので注意してください。権限エラーが疑われる場合、Permissions.requestPermissionsAsync()で明示的に許可を取得し、ユーザー体験を中断しないよう条件分岐を入れて対応します。
【トラブル】Expo Go/Dev Clientで起こる代表的な問題と解決方法【起動しない・白画面】
Expo GoやカスタムDev Clientでアプリが起動しない、白い画面になるトラブルは初心者によく起こります。主な原因としては、JavaScriptエラーによるクラッシュや、モジュールのロード失敗があります。対処法として、Expo Goの場合は一度アプリをアンインストールして再起動、またはexpo start -cでキャッシュをクリアすることで解決することが多いです。また、JS側で発生しているエラーは開発コンソール(Metroやブラウザ)に表示されるので、それを確認してコードを修正します。Dev Clientを使う場合は、ネイティブの設定ミスやビルドエラーの可能性もありますので、XcodeやAndroid Studioでクリーンビルドを実行し、ログを参照して問題箇所を特定しましょう。いずれにせよ、エラーメッセージをよく読み、該当モジュールのドキュメントを確認することで、迅速に修正することができます。
【トラブル】OTA更新に伴う問題(アップデート失敗、古いバンドルによる不具合)への対処方法を徹底解説
ExpoのOTAアップデート機能を使う際には、アップデート失敗や古いバンドルの残存が原因の問題に注意が必要です。例えば、クラッシュしたアプリをアンインストールしないでOTA更新すると、以前にキャッシュされた古いJavaScriptが優先され、意図したアップデートが反映されないケースがあります。この場合、expo publish前にExpo Goアプリ上でキャッシュクリアを行うか、一度アプリを完全に削除してから再インストールすると問題が解消します。また、配信中のビルドとアップデートのタイミングがずれてエラーになる場合は、fallbackToCacheTimeoutオプションを設定し、更新前に確実に最新をダウンロードするよう制御できます。OTA更新に関するトラブルが疑われる場合は、クライアント側のログ(ログボックスなど)をチェックし、常に最新バージョンが適用されているか確認することが重要です。
【Expoエラー対策】開発中に起こる問題とその解決手順を徹底解説
Expo開発では様々なエラーが発生しますが、対処法を知っていれば迅速に解決できます。以下では、起動・ビルド時によく起こる代表的なエラーと、その原因・解決策を詳しく解説します。基本的には、ログのメッセージをよく読み、Expo CLIやMetroに示されたアドバイスに従いましょう。特にキャッシュや環境の問題であれば、起動オプションの変更やキャッシュクリアで簡単に直せる場合があります。
【対処】Expo startが失敗する場合の対処方法:キャッシュクリアや環境リセットの手順をわかりやすく解説
開発サーバ起動時にexpo startがエラーで止まる場合、まず試したいのはキャッシュのクリアです。ターミナルでexpo start -cとすることでMetroのキャッシュをリセットし、多くの奇妙なエラーが解消します。また、依存パッケージが正しくインストールされていないと起動に失敗することがあるため、node_modulesを削除してnpm installやyarnを再実行してみてください。Node.jsのバージョンが低すぎる場合にもエラーが出るので、公式推奨のバージョンを利用しましょう。それでも解決しない場合は、プロジェクト設定ファイル(app.jsonなど)の記述ミスがないかチェックし、環境変数を正しく設定し直します。
【対処】Metroバンドラーのエラー対処:モジュールが見つからない場合の解決方法をわかりやすく徹底解説
「Unable to resolve module」などのMetroエラーは、ファイルパスや依存関係が間違っていると発生します。まずインポート文を見直し、ファイル名や拡張子が正しいか確認します。また、@react-navigation/nativeのようなライブラリが必要なPeer Dependenciesを追加し忘れているケースもあります。この場合、エラーに表示される依存パッケージをnpm installで追加します。それでも解決しない場合、watchman watch-del-all(macOS/Linux)で監視キャッシュをクリアするか、プロジェクトの再起動を試みます。最終手段として、node_modulesを削除してから依存関係を再構築し、正常に動作するか確認してください。
【対処】iOS/Android起動時のランタイムエラー対応:XcodeやLogcatで原因を徹底調査
ビルドは成功するがアプリ起動直後に落ちる場合、ランタイムエラーが原因です。iOSならXcodeのコンソール、AndroidならAndroid StudioのLogcatにエラーログが表示されるので確認しましょう。よくある例として、ネイティブモジュールの初期化失敗や、Storybookのモジュール読み込みで落ちる事例があります。ログに表示されたコンポーネント名やファイルパスを手がかりに、インポートのミスやネイティブ設定漏れを修正してください。ネイティブコードを変更した場合はビルドキャッシュが悪さすることがあるため、Androidでは./gradlew clean、iOSではXcodeのClean Build Folderを試すのが効果的です。
【対処】JavaScript構文エラーやランタイムエラーのデバッグ手法【初心者向け】
JavaScriptレベルのエラーはコンソールにエラーログが出るため比較的対処しやすいです。SyntaxErrorやReferenceErrorが出た場合は、ソースコードの該当行を修正します。Expoではデフォルトでエラー画面に該当行が示されるので、赤いエラー画面をよく確認しましょう。さらに詳しく調べるには、ブラウザでlocalhost:19000を開いてMetroのDevToolsからエラー内容をコピーしたり、console.errorを一時的に埋め込んでログを詳しく追跡する方法もあります。タイムゾーンやロケールの問題など特殊なケースでは、一時的に問題の箇所をコメントアウトして切り分けを行い、原因を特定します。
【対処】キャッシュやビルド再生成で問題解決:キャッシュクリア・再インストールによるトラブル対策
思い当たるエラーがなかなか解消しない場合は、キャッシュ関連の問題である可能性があります。この場合、expo start -cでMetroのキャッシュを消したり、npm cache clean --force(npmの場合)を実行してnpmキャッシュをクリアします。また、node_modulesフォルダを削除後に再度npm installを実行して依存関係をリフレッシュすることで、依存モジュールの矛盾を一掃できます。ネイティブビルドのキャッシュは、Androidなら./gradlew clean、iOSならXcodeのメニューから「Product > Clean Build Folder」を使ってクリアします。これにより、ビルド設定を変更した際に残った古いキャッシュが原因の不具合が解消されることがあります。これらの基本的なキャッシュ対策で多くの原因不明のトラブルは解決可能です。