
はじめに
React Nativeでスマートフォンアプリを開発するときは、Expoを利用すると、作成中のアプリをiPhoneやAndroidの実機で簡単に確認できます。
通常は、Expoの開発サーバーに表示されたQRコードをスマートフォンで読み取ることで、Expo Goからアプリを起動できます。
しかし、Windows 11のWSL(Windows Subsystem for Linux)上でExpoの開発サーバーを起動している場合、WSLのネットワーク構成やWindows Defenderファイアウォールの影響により、iPhoneから接続できないことがあります。
この記事では、次の手順を解説します。
- WSL上でExpoプロジェクトを作成する
- 必要最小限のBlankテンプレートを使用する
- Expo SDK 54を指定する
- Webブラウザでアプリの起動を確認する
- Tunnel接続を使ってiPhoneのExpo Goから実機確認する
今回の開発環境
今回使用する環境は次のとおりです。
- Windows 11
- WSL
- Ubuntu
- Node.js
- npm
- Visual Studio Code
- React Native
- Expo
- Expo SDK 54
- iPhone Expo Go
Node.jsやVisual Studio Codeのインストールについては、以下の記事を参考にしてください。

Expo Goが対応するSDKバージョンを確認する
Expoを使用する場合は、作成するプロジェクトのExpo SDKと、スマートフォンにインストールされているExpo Goが対応するSDKを合わせる必要があります。
2026年8月時点では、最新版のcreate-expo-appでExpo SDK 57を選択できます。一方、App StoreおよびGoogle Playで配布されているExpo Goは、学習用途ではExpo SDK 54に対応しています。
そのため、この記事ではExpo SDK 54を指定してプロジェクトを作成します。
Expo Goで対応していないSDKのプロジェクトを開こうとすると、次のようなSDKの互換性に関するエラーが表示される場合があります。
- ロジェクトのSDKが新しすぎる
- Expo GoがプロジェクトのSDKに対応していない
- Expo Goまたはプロジェクトの更新が必要
- 対応SDKは今後変わる可能性があるため、プロジェクトを作成する前に、Expo Goの「App Info」やExpo公式ドキュメントを確認してください。
WSL上でExpoの初期プロジェクトを作成する
WSLのターミナルを起動し、プロジェクトを作成するディレクトリに移動します。
今回は、アプリ名をmy-appとします。
必要最小限の構成でExpo SDK 54のプロジェクトを作成するには、次のコマンドを実行します。
npx create-expo-app@latest my-app --template blank@sdk-54
コマンド内の指定には、次の意味があります。
| 指定 | 意味 |
|---|---|
my-app | 作成するプロジェクト名 |
--template | 使用するテンプレートを指定 |
blank | 必要最小限のBlankテンプレートを使用 |
sdk-54 | Expo SDK 54を使用 |
blankテンプレートを指定すると、画面遷移などのサンプルコードを含まない、比較的シンプルな状態からReact Nativeアプリを作成できます。
プロジェクトの作成が完了すると、ターミナルに起動方法が表示されます。
作成したプロジェクトに移動する
次のコマンドで、作成したプロジェクトのディレクトリに移動します。
cd my-app
以降のコマンドは、基本的にこのmy-appディレクトリ内で実行します。
Webブラウザで初期アプリを確認する
まずは、作成したExpoアプリが正常に動作するか、Webブラウザで確認します。
次のコマンドを実行してください。
npm run web
Web版の実行に必要なパッケージがインストールされていない場合、次のようなエラーが表示されることがあります。
CommandError: It looks like you're trying to use web support but
don't have the required dependencies installed.
Install react-dom, react-native-web by running:
npx expo install react-dom react-native-web
この場合は、表示された案内に従い、次のコマンドを実行します。
npx expo install react-dom react-native-web
npx expo installを使用すると、現在のExpo SDKと互換性のあるバージョンのパッケージがインストールされます。
インストール後、もう一度Web版を起動します。
npm run web
ターミナルにURLが表示されたら、Windows側のWebブラウザからアクセスします。
http://localhost:8081
React Nativeの初期画面が表示されれば、Expoプロジェクトは正常に作成されています。
なお、Webブラウザでの確認が不要で、最初からiPhoneで実機確認する場合、この手順は省略できます。
通常のLAN接続でExpoを起動する
Expoの開発サーバーは、次のコマンドで起動できます。
npx expo start
起動すると、ターミナルにQRコードが表示されます。
通常は、パソコンとiPhoneが同じWi-Fiネットワークに接続されていれば、iPhoneのExpo GoからQRコードを読み取ってアプリを開けます。
ただし、WSL上で開発サーバーを起動している場合は、次のような原因でiPhoneから接続できないことがあります。
- WSLとWindowsでIPアドレスが異なる
- WSL2が仮想ネットワークを使用している
- Windows Defenderファイアウォールにより通信が遮断されている
- パソコンとiPhoneが別のネットワークに接続されている
- Wi-Fiルーターで端末間通信が制限されている
- QRコードに含まれるWSL側のアドレスへiPhoneから到達できない
このような場合は、ExpoのTunnel接続を使用します。
Tunnel接続でExpoを起動する
プロジェクトのディレクトリで、次のコマンドを実行してください。
npx expo start --tunnel --clear
それぞれのオプションには、次の意味があります。
| オプション | 内容 |
|---|---|
--tunnel | インターネット経由のTunnel接続で起動する |
--clear | Metro Bundlerのキャッシュを削除して起動する |
--clearは毎回必須ではありません。キャッシュが原因と思われるエラーが発生した場合や、設定変更が反映されない場合に有効です。
通常は、次のコマンドだけでも起動できます。
npx expo start --tunnel
Tunnel接続は、Expoの開発サーバーを外部からアクセス可能なURLとして公開するため、WSLのIPアドレスへiPhoneから直接接続できない場合にも利用できます。Expo公式ドキュメントでも、LAN接続が難しいネットワーク環境での利用方法として案内されています。
初回起動時にTunnel接続用パッケージのインストールを求められた場合は、画面の案内に従ってインストールしてください。
iPhoneのExpo GoでQRコードを読み取る
Tunnel接続で起動すると、ターミナルに新しいQRコードが表示されます。
iPhoneで次の操作を行います。
- App StoreからExpo Goをインストールする
- WSLで
npx expo start --tunnelを実行する - ターミナルに表示されたQRコードを読み取る
- Expo Goでリンクを開く
- JavaScriptバンドルの読み込みが完了するまで待つ
- 作成した初期アプリが表示されることを確認する
iPhone標準のカメラアプリでQRコードを読み取れる場合もあります。うまく開かない場合は、Expo Goを起動して、Expo Go側からQRコードを読み取ってください。
アプリの初回起動時は、必要なデータの読み込みに少し時間がかかる場合があります。
ソースコードの変更を実機に反映する
Blankテンプレートの場合は、プロジェクト内のApp.jsまたはApp.tsxを編集します。
例えば、画面に表示する文字を変更します。
import { StatusBar } from 'expo-status-bar';
import { StyleSheet, Text, View } from 'react-native';
export default function App() {
return (
<View style={styles.container}>
<Text>WSLからiPhoneで表示できました!</Text>
<StatusBar style="auto" />
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
});
ファイルを保存すると、通常はFast RefreshによってiPhoneの画面が自動的に更新されます。
反映されない場合は、Expo Goでアプリを再読み込みするか、開発サーバーを再起動してください。
Tunnel接続でも開けない場合の確認ポイント
1.Expo Goの対応SDKを確認する
iPhoneのExpo Goで「App Info」を開き、対応しているSDKを確認します。
プロジェクト側のSDKは、package.jsonにあるexpoのバージョンから確認できます。
{
"dependencies": {
"expo": "~54.0.0"
}
}
Expo GoがSDK 54に対応している場合は、プロジェクト側もSDK 54に合わせます。
2.Expo Goを最新版に更新する
App Storeを開き、Expo Goに更新がないか確認します。
ただし、Expo Goを最新版にしても、作成したプロジェクトのSDKがExpo Goの対応範囲外であれば起動できません。
3.開発サーバーを再起動する
現在起動しているExpoをCtrl+Cで終了し、キャッシュを削除して再起動します。
npx expo start --tunnel --clear
4.依存関係を確認する
Expoプロジェクトの依存関係に問題がないか、次のコマンドで確認できます。
npx expo-doctor
問題が表示された場合は、その内容に従ってパッケージや設定を修正します。
5.インターネット接続を確認する
Tunnel接続はインターネットを経由します。
そのため、パソコンとiPhoneの両方がインターネットへ接続できることを確認してください。
6.VPNやプロキシを一時的に確認する
VPN、企業ネットワーク、プロキシ、セキュリティソフトなどがTunnel接続を妨げる場合があります。
接続できない場合は、ネットワーク管理上問題のない範囲で設定を確認してください。
LAN接続とTunnel接続の違い
| 接続方法 | 特徴 |
|---|---|
| LAN接続 | 同一ネットワーク内で直接接続するため比較的高速 |
| Tunnel接続 | インターネットを経由するため、WSL環境でも接続しやすい |
| localhost接続 | 基本的に開発サーバーを起動した端末自身からの確認に使用 |
Tunnel接続は便利ですが、インターネットを経由するため、LAN接続より読み込みや更新が遅くなることがあります。
WSL環境でLAN接続がうまくいかない場合は、まずTunnel接続で実機確認できるか試すのがおすすめです。
まとめ
今回は、Windows 11のWSL上でExpoプロジェクトを作成し、iPhoneのExpo Goから実機確認する方法を解説しました。
主な手順は次のとおりです。
# Expo SDK 54のBlankプロジェクトを作成
npx create-expo-app@latest my-app --template blank@sdk-54
# プロジェクトに移動
cd my-app
# Web対応パッケージをインストール
npx expo install react-dom react-native-web
# Webブラウザで確認
npm run web
# Tunnel接続でExpoを起動
npx expo start --tunnel --clear
WindowsのWSL上でExpoを起動した場合、ネットワーク構成によっては通常のLAN接続でiPhoneからアクセスできないことがあります。
その場合は、npx expo start --tunnelを使用することで、iPhoneのExpo Goから作成中のReact Nativeアプリを確認できます。
ただし、Expo SDKとExpo Goの対応バージョンが一致していない場合は、Tunnel接続にしても起動できません。プロジェクトを作成する際は、Expo Goが対応しているSDKを事前に確認しましょう。
