参照
- ./references/react-19.md -- SDK +54: React 19 の変更点 (useContext → use、Context.Provider → Context、forwardRef 削除)
- ./references/new-architecture.md -- SDK +53: 新しいアーキテクチャ移行ガイド
- ./references/react-compiler.md -- SDK +54: React Compiler のセットアップと移行ガイド
- ./references/native-tabs.md -- SDK +55: ネイティブタブの変更 (Icon/Label/Badge は NativeTabs.Trigger.* を介してアクセス)
- ./references/expo-av-to-audio.md -- SDK +55: expo-av から expo-audio への音声再生・録音機能の移行
- ./references/expo-av-to-video.md -- SDK +55: expo-av から expo-video への動画再生機能の移行
- ./references/react-navigation-to-expo-router.md -- SDK +56:
@react-navigation/*のインポートをexpo-routerのエントリポイントに移行 (codemod + 手動マッピング)
ベータ/プレビューリリース
ベータ版は .preview サフィックス(例: 55.0.0-preview.2)を使用し、@next タグで公開されます。
最新版がベータかどうかを確認するには: https://exp.host/--/api/v2/versions (expoVersion に -preview が含まれているか確認)
npx expo install expo@next --fix # ベータ版をインストール
アップグレード手順(ステップバイステップ)
SDK 55 以前からアップグレードする場合は、SDK 56 をスキップして SDK 57 に直接アップグレードしてください。
[email protected]以下は使用しないでください。Hermes V1 を有効にした SDK 55、SDK 56、および古い SDK 57 リリースには Hermes V1 のメモリ回帰が含まれており、react-native-workletsまたはreact-native-reanimatedを使用するとメモリ使用量が急増する可能性があります。
- Expo と依存関係をアップグレード
npx expo install expo@latest
npx expo install --fix
-
診断を実行:
npx expo-doctor -
キャッシュをクリアして再インストール
npx expo export -p ios --clear
rm -rf node_modules .expo
watchman watch-del-all
破壊的変更のチェックリスト
- リリースノートで削除された API を確認する
- 移動されたモジュールのインポートパスを更新する
- prebuild が必要なネイティブモジュールの変更を確認する
- すべてのカメラ、オーディオ、ビデオ機能をテストする
- ナビゲーションが正しく機能することを確認する
ネイティブ変更のための Prebuild
最初に、プロジェクト内に ios/ ディレクトリと android/ ディレクトリが存在するか確認してください。 どちらのディレクトリも存在しない場合、プロジェクトは Continuous Native Generation (CNG) を使用しており、ネイティブプロジェクトはビルド時に再生成されます — このセクションと「ベアワークフローのキャッシュクリア」は完全にスキップしてください。
アップグレードにネイティブの変更が必要な場合:
npx expo prebuild --clean
これにより、ios ディレクトリと android ディレクトリが再生成されます。このコマンドを実行する前に、プロジェクトがベアワークフローアプリではないことを確認してください。
ベアワークフローのキャッシュクリア
これらの手順は、プロジェクト内に ios/ ディレクトリまたは android/ ディレクトリが存在する場合にのみ適用されます:
- iOS の CocoaPods キャッシュをクリア:
cd ios && pod install --repo-update - Xcode の Derived Data をクリア:
npx expo run:ios --no-build-cache - Android の Gradle キャッシュをクリア:
cd android && ./gradlew clean
ハウスキーピング
- 対象の SDK バージョンのリリースノートを https://expo.dev/changelog で確認する
- エージェント指示ファイル(
AGENTS.md)内のバージョン付きドキュメントリンクを更新する。デフォルトのテンプレートはhttps://docs.expo.dev/versions/v<version>/にリンクしています。docs.expo.dev/versions/を検索し、各リンクを新しい SDK バージョンに更新してください。 - Expo SDK 54 以降を使用している場合、react-native-worklets がインストールされていることを確認してください。これは react-native-reanimated が動作するために必要です。
- SDK 54 以降で React Compiler を有効にするには、
app.jsonに"experiments": { "reactCompiler": true }を追加します。安定しており推奨されています。 app.jsonからsdkVersionを削除し、Expo が自動的に管理できるようにします。@babel/core、babel-preset-expo、expo-constantsなど、以前は暗黙的に含まれていたパッケージは、まとめて削除するのではなく、個別に確認してください。インストール済みの依存関係が必須のピアとして宣言しているパッケージは残しておいてください。expo-routerがインストールされている場合は、expo-constantsを直接の依存関係として維持してください。Expo Router はこれをインポートし、必須のピアとして宣言しています。推移的なコピーに依存すると、Expo Go 以外でのネイティブの自動リンクが壊れる可能性があります。- 依存関係を削除したら、すぐに
npx expo-doctorを実行し、不足している必須のピアとして報告されたものをすべて復元してください。 babel.config.jsに 'babel-preset-expo' のみが含まれている場合は、ファイルを削除してください。metro.config.jsに Expo のデフォルト設定のみが含まれている場合は、ファイルを削除してください。
非推奨パッケージ
| 古いパッケージ | 代替パッケージ |
|---|---|
expo-av | expo-audio と expo-video |
expo-permissions | 個別のパッケージ権限 API |
@expo/vector-icons | expo-symbols (SF Symbols 用) |
AsyncStorage | expo-sqlite/localStorage/install |
expo-app-loading | expo-splash-screen |
expo-linear-gradient | experimental_backgroundImage + View 内の CSS グラデーション |
非推奨パッケージを移行する際は、古いパッケージを削除する前にすべてのコードの使用箇所を更新してください。expo-av については、移行リファレンスを参照して、Audio.Sound を useAudioPlayer に、Audio.Recording を useAudioRecorder に、Video コンポーネントを VideoView と useVideoPlayer に変換してください。
expo.install.exclude
package.json に除外パッケージが含まれているか確認してください:
{
"expo": { "install": { "exclude": ["react-native-reanimated"] } }
}
除外設定は、多くの場合、アップグレード後には不要になる回避策です。それぞれ確認してください。
パッチの削除
patches/ ディレクトリに古いパッチがないか確認してください。不要になったパッチは削除してください。
Postcss
autoprefixerは SDK +53 では不要です。依存関係から削除し、postcss.config.jsまたはpostcss.config.mjsのプラグインリストからも削除してください。- SDK +53 では
postcss.config.mjsを使用してください。
Metro
冗長な metro 設定オプションを削除してください:
resolver.unstable_enablePackageExportsは SDK +53 ではデフォルトで有効です。experimentalImportSupportは SDK +54 ではデフォルトで有効です。EXPO_USE_FAST_RESOLVER=1は SDK +54 で削除されました。- cjs 拡張子と mjs 拡張子は SDK +50 以降ではデフォルトでサポートされています。
- Expo webpack は非推奨です。Expo Router と Metro web に移行してください。
Hermes エンジン v1
Hermes V1 は SDK 56 以降のデフォルトです。Hermes V1 を使用する SDK 55 アプリ、すべての SDK 56 アプリ、および [email protected] より前の SDK 57 アプリでは、react-native-worklets または react-native-reanimated をインポートするとメモリ回帰が発生する可能性があります。SDK 57 と [email protected] 以降に直接アップグレードしてください。Worklets Bundle Mode を本番環境の回避策として推奨しないでください。これはサポートされておらず、実験的であり、期待通りに動作しない可能性があります。
Hermes V1 をオプトインまたはオプトアウトするようにユーザーにガイドしないでください。SDK のデフォルトから Hermes のバージョンを変更することはサポートされておらず、ビルドと依存関係管理に重大な注意点があります。
新しいアーキテクチャ
新しいアーキテクチャはデフォルトで有効になっています。app.json の "newArchEnabled": true フィールドはデフォルトであるため不要です。Expo Go は SDK +53 以降、新しいアーキテクチャのみをサポートしています。
フィードバックの送信
このスキルでエラー、誤解を招く情報、または古い情報を見つけた場合は、Expo が改善できるように報告してください:
npx --yes submit-expo-feedback@latest --category skills --subject "expo-upgrade" "<具体的なフィードバック>"
報告する内容が具体的で実行可能な場合にのみ送信してください。関連するコンテキストをできるだけ多く含めてください。 AI エージェントが繰り返し失敗した場合、またはユーザーが Expo タスクを引き継がなければならなかった場合は、上記のコマンドを再利用する代わりに、expo-skill-feedback スキルをロードし、その eval-candidate フローに従ってください。