React Native + Expo を触ってみる
k-ito-cat/react-native-expo-playground
React Nativeとexpoを使ったプレイグラウンド
- React Native + Expo の導入とExpo goでのプレビュー
- ネイティブモジュールの導入・デバッグビルドで実機確認
を行ってみた。
環境
- MacBook + iOS 実機
- React Native + Expo
npx create-expo-app@latestExpo Go でプレビュー
npm run start# ターミナルに QR が出る- iPhone に Expo Go をインストール (App StoreからDL)
- カメラで QR 読み取り → Expo Go が開き、アプリを表示(コード変更で ホットリロードが効く)
Simulatorで確認したい場合、npm run start でターミナルに出力された http://localhost:8081 で確認
TIP
ネイティブ機能を使わないアプリの簡易的な確認・デバッグ手段として使う。ネイティブ機能を使う場合、後述するデバッグビルドで確認する。
2. Tailwind
- ライブラリ「NativeWind」を使用
3. ネイティブモジュールの導入
WARNING
ネイティブモジュールを入れた場合、npm run start → Expo Go では動作しないので、デバッグビルドして実機確認
npm i @react-native-voice/voice --saveデバッグビルド
実機で確認するために初回だけ以下を実行
npx pod-install- Xcode に Apple ID 登録 (Settings > Accounts)
- iPhone を Macに USB 接続してビルド
# expo prebuild → Xcode ビルド → 実機/Simulator へインストールを行うnpx expo run:ios --device- 設定 > 一般 > VPNとデバイス管理 > Developer App → 自分の Apple ID を 信頼
- アプリ初回起動時に ローカルネットワークを許可(これをしないとローカルサーバが読み込めない?)
TIP
pod-install → expo run:ios --device を再実行
expo dev clientを導入
expo dev clientを導入して再度expo run:ios --deviceを実行してビルドに含める
npm i expo-dev-client通常のデバッグビルドとはXcodeで実機にインストールするという点は同じだが、Expo Go の利便性を兼ね備える用意が整っているから入れておく。
番外編:iOS 音声認識クラッシュ解消
先ほど入れた音声認識のネイティブモジュールをビルド後、Voice.start()を記述して実機やシミュレータで確認すると、Voice.start() 実行直後にアプリがクラッシュした。
Xcode > Window > Devices and Simulators > View Device Logs
でクラッシュの原因を確認。
1. Info.plist へ必須キーを追加
<!-- </dict> 直前に挿入 --><key>NSMicrophoneUsageDescription</key><string>音声入力のためにマイクを使用します</string><key>NSSpeechRecognitionUsageDescription</key><string>音声認識を使用します</string>2. app.json にも反映 (Expo managed 用)
{ "expo": { "ios": { "infoPlist": { "NSMicrophoneUsageDescription": "音声入力のためにマイクを使用します", "NSSpeechRecognitionUsageDescription": "音声認識を使用します" } } }}3. CocoaPods 同期
npx pod-install4. 再ビルド & 実機
npx expo run:ios --device # 実機の場合5. 動作確認
- アプリ起動 → 音声認識ボタンを押す。
- 初回のみ OS 権限ダイアログが表示 → 許可。
- 認識結果が画面に表示され、クラッシュしなければ完了。