React Nativeモバイルアプリ開発メモ 第1回。
React Native + ExpoでAndroid / iOSアプリを作るときの開発環境を、次に同じことをするとき用に整理しておく。麻雀集計スマホアプリをReact/Vite版からReact Nativeへ移行したときに、Expo GoのSDK不一致、adbが見えない、エミュレーターと実機でlocalhostの意味が違う、Development Buildが古い、といったところで何度か詰まったので、そのときの内容も含める。
今回作る環境
基本構成は次のようにした。
- React Native
- Expo
- TypeScript
- Expo Router
- Node.js LTS
- VS Code
- Android Studio / Android SDK
- Android実機 + USBデバッグ
- 必要に応じてAndroid Emulator
- 本格開発ではDevelopment Build
React Native公式でも、新しいアプリではExpoのようなFrameworkを使う構成が案内されている。ExpoはReact Native本体に加えて、ルーティング、ネイティブAPI、ビルド周辺をまとめて扱いやすい。
2026年10月時点のExpo SDKについて
この記事を書いている2026年10月21日時点ではExpo SDK 58への移行期間になっている。Expo公式では、Development Buildなどを使う新しいプロジェクトはSDK 58を選べる一方、物理端末のExpo Goを使う場合はSDK 57を使う案内になっている。
npx create-expo-app@latest my-app --template default@sdk-58
SDKの状況は変わるので、ここは記事のコマンドをそのまま使うより、作成時にExpo公式のCreate a projectを確認した方がよい。
麻雀集計アプリでは最初SDK 56、その後SDK 57へ更新した。ExpoはSDKごとにReact Nativeや周辺パッケージの推奨バージョンが決まっているので、npmで個別に最新版へ上げるよりExpo側の整合性を優先する。
最初に入れておくもの
Node.js
Expo公式の要件はNode.js LTS。Node.jsはnvmなどで切り替えられるようにしておくと、別プロジェクトとの共存が楽。
node -v
npm -v
Git
git --version
VS Code
エディタはVS Codeを使用。React Native特有というより、TypeScript、ESLint、Git、ターミナルを同じ画面で扱えるのが便利。
Android Studio
Android Studioそのものを毎回IDEとして使う必要はないが、Android SDK、Platform Tools、Emulator、AVDの管理が簡単なので入れておく方が楽だった。
コマンドラインツールだけでも構築できるが、最初の環境作成ではAndroid Studioを使った方が設定箇所を把握しやすい。
ANDROID_HOMEとadbを確認する
React Native / ExpoでAndroid実機やエミュレーターを使う場合、adbがかなり重要になる。
Ubuntuで使っていた環境ではSDKは次の場所だった。
export ANDROID_HOME=$HOME/Android/Sdk
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/platform-tools
設定後はシェルを読み直す。
source ~/.bashrc
adb version
WindowsではAndroid SDKのplatform-toolsは通常次の場所になる。
%LOCALAPPDATA%\Android\Sdk\platform-tools
PowerShellからadb --versionが通る状態にしておく。
Expoプロジェクトを作成する
新規作成はcreate-expo-appから始める。
npx create-expo-app@latest my-app
cd my-app
npx expo start
Metroが起動するとQRコードが表示される。Android Emulatorを起動している場合はターミナルでaを押して開ける。
npx expo start --android
以前のExpo CLIをグローバルインストールするより、プロジェクト側に合ったCLIをnpx expoで呼ぶ形にしておく。
Expo GoとDevelopment Buildの使い分け
| 用途 | Expo Go | Development Build |
|---|---|---|
| とりあえず画面を確認 | ○ | ○ |
| ネイティブライブラリ追加 | 制限あり | ○ |
| 独自app.json設定 | 制限あり | ○ |
| Deep Link / App Links | 確認範囲に制限 | ○ |
| ストア公開前提の開発 | △ | ○ |
最初の確認だけならExpo Goは便利だが、麻雀集計アプリでは最終的にDevelopment Buildへ切り替えた。本格的なアプリではこちらを前提にした方がよかった。
Development Buildをローカルで作る場合の基本は次の流れ。
npx expo install expo-dev-client
npx expo run:android --device
npx expo start
ネイティブ依存やapp configを変更したときは、Development Build自体の再ビルドが必要になる場合がある。JavaScriptだけを変更したときは毎回ビルドし直す必要はない。
Android実機をUSBデバッグで使う
実機で確認する場合はAndroid側で開発者向けオプションとUSBデバッグを有効にする。
adb devices
正常なら次のようにdeviceと表示される。
List of devices attached
xxxxxxxxxxxx device
麻雀集計アプリの環境構築では、最初adb devicesが空だったり、エミュレーターがofflineになったことがあった。
その場合はまずADBを再起動した。
adb kill-server
adb start-server
adb devices
エミュレーター側がofflineなら、ADBだけで直らずエミュレーターの再起動が必要なこともあった。
Android Emulatorを使う
Android StudioのDevice ManagerからAVDを作成しておく。GUIから起動してもよいし、CLIでも起動できる。
emulator -list-avds
emulator -avd Pixel_9
Wi-Fi経由の実機接続がWindowsファイアウォールの制約でうまくいかなかったときは、いったんエミュレーターへ切り替えて開発を進めた。ネットワーク問題とアプリ側の問題を切り分ける意味でも、実機とエミュレーターの両方を使える状態にしておくと便利。
ローカルAPIへ接続するときのlocalhostに注意
React NativeアプリからPC上のバックエンドAPIへ接続するときに、かなり分かりにくかったのがlocalhost。
| 実行場所 | PC上のAPIへ接続する例 |
|---|---|
| PCのブラウザ | http://localhost:6080 |
| Android Emulator | http://10.0.2.2:6080 |
| Android実機(LAN) | http://PCのLAN内IP:6080 |
| Android実機(USB + adb reverse) | http://localhost:6080 |
USB接続なら、例えば次のようにポートを転送できる。
adb reverse tcp:8081 tcp:8081
adb reverse tcp:6080 tcp:6080
8081はMetro、6080は当時使っていた開発API。何をreverseしているか分からなくなった場合は次で確認する。
adb reverse --list
adb reverse --remove-all
Expo Doctorは早めに使う
Expoでは依存パッケージのバージョン整合性がかなり重要だった。環境を作ったら次を実行しておく。
npx expo-doctor
npx expo install --check
修正できるものは次でExpo SDKに合うバージョンへ揃える。
npx expo install --fix
麻雀集計アプリではnpx expo doctorを実行したところ「local CLIでは非対応なのでnpx expo-doctorを使う」というメッセージが出た。現在のExpo公式でもコマンドはnpx expo-doctorになっている。
また、expo、expo-router、react-nativeなどを個別に適当に上げるとpeer dependencyが崩れることがあった。Expoプロジェクトでは「最新版か」だけでなく「そのSDKの推奨版か」を見る。
実際に遭遇したトラブル
1. Expo Goで「Project is incompatible」
麻雀集計アプリをExpo SDK 56で作っていたとき、端末側のExpo GoとSDKが合わず、次のエラーになった。
Project is incompatible with this version of Expo Go
まずpackage.jsonのexpoバージョンを確認し、npx expo-doctorとnpx expo install --fixで依存関係を確認する。Expo Goの対応SDKを合わせる方法もあるが、実運用するアプリならDevelopment Buildへ移る方が自由度が高い。
2. Expo Goを開こうとしてHomeActivityがない
Android Emulatorで次のエラーになったこともあった。
Error type 3
host.exp.exponent/.experience.HomeActivity does not exist
Expo Goが入っていない、古い、壊れている、といった状態を疑う。確認には次を使った。
adb shell pm list packages | grep exponent
必要に応じてExpo Goを入れ直し、Metroのキャッシュもクリアした。
adb uninstall host.exp.exponent
npx expo start -c
3. MetroでtransformFileエラー
依存関係を変更したあと、Expo Routerのbundle時にMetro側でtransformFile関連のエラーが出たことがある。
まずキャッシュクリアを試した。
npx expo start -c
それでも直らない場合はnode_modulesとlockファイルの整合性も確認する。Expo SDK更新の直後は、単なるソースコードの問題ではなく依存バージョンが原因のことがある。
4. Development Buildのpackage名が合っていない
Development Build起動時に、PC側が探しているpackageと実機に入っているdevelopment版packageが違い、次のような状態になった。
No development build (...) for this project is installed
麻雀集計アプリでは開発版と本番版でpackageを分けていたので、APP_VARIANTなどの環境変数が正しく読み込まれているか確認した。
npx expo config --type public
app config上のpackage名と、端末に入っているDevelopment Buildが一致しているかを見る。
5. JavaScript側だけ新しくしてDevelopment Buildが古い
SDK更新やネイティブ依存の更新後に、node_modules側と端末に入っているDevelopment Build側でネイティブモジュールのバージョンがずれたこともあった。
この場合はMetroの再起動だけでは直らない。ネイティブ依存を更新したらDevelopment Build自体を作り直す。
6. Wi-Fi実機接続が通らない
PCとスマホが同じWi-Fiにいても、ファイアウォールやネットワーク設定でMetroへ到達できないことがある。麻雀集計アプリのWindows環境ではここで詰まり、いったんエミュレーターへ切り替えた。
アプリの問題かネットワークの問題かを切り分けるため、USBデバッグ + adb、Android Emulator、必要ならExpoのTunnelを使い分ける。
ローカルEAS Buildは最初から必須にしない
EAS Buildにはクラウドビルドとローカルビルドがあるが、環境構築の段階ではローカルEAS Buildまで必須にしなくてもよい。
麻雀集計アプリでは後からeas build --localも試したが、Gradle、Java、Node.jsが同時に動いてメモリ負荷が大きくなった。Development Buildの確認はまずnpx expo run:androidかクラウドEASで進めた方が構成を単純にできる。
最初に確認するコマンド一覧
node -v
npm -v
git --version
adb version
adb devices
npx expo --version
npx expo-doctor
npx expo install --check
npx expo start
ここまで正常なら、React Native / Expoのコードを書き始められる状態と考えてよい。
今ならこの順番で環境を作る
- Node.js LTS、Git、VS Codeを入れる
- Android StudioでSDK / Platform Tools / Emulatorを入れる
adb versionを確認する- create-expo-appでプロジェクト作成
npx expo-doctorで整合性確認- まずAndroid EmulatorまたはExpo Goで最低限起動
- 本格開発に入る前にDevelopment Buildを作る
- Android実機をUSBデバッグで接続
- ローカルAPIを使うならlocalhost / 10.0.2.2 / adb reverseを整理
- ネイティブ依存を変更したらDevelopment Buildを再作成
最初はExpo Goだけで進めたくなるが、ストア公開するアプリなら早めにDevelopment Buildへ移った方が、後からネイティブ設定の差で詰まりにくい。
関連記事
既存WebアプリをReact Native化したときの全体的な考え方は、React/ViteのWebアプリをReact Native化した記録にまとめている。
Deep LinkとAndroid App Linksは、ExpoでDeep Link / Android App Linksを設定した方法に分けている。
実機を使ったE2Eテストは、麻雀集計スマホアプリへのMaestro導入メモを参照。
公式ドキュメント
- Expo – Create a project
- Expo – Set up your environment
- Expo – Introduction to development builds
- Expo – Tools for development / Expo Doctor
- Expo Go version mismatch
最終更新:2026年10月21日
