---
title: "Expo SDK 53の変更点とSDK 52からの移行手順｜New Architecture既定化・Expo Router v5・2026年の提出期限"
url: "https://www.issoh.co.jp/tech/details/9593/"
published: 2025-10-30
updated: 2026-11-08
categories: ["モバイル（iOS・Android）"]
publisher: "株式会社一創"
---

# Expo SDK 53の変更点とSDK 52からの移行手順｜New Architecture既定化・Expo Router v5・2026年の提出期限

Expo SDK 53は[2025年4月30日に公開](https://expo.dev/changelog/sdk-53)されたSDKで、React Native 0.79とReact 19を同梱します。New Architectureの既定有効化、Metroの`package.json` exports対応、Androidのedge-to-edge、`expo-av`の非推奨と、SDK 52から上げるときに引っかかる変更がまとまって入った版です。このページはSDK 53で何が変わったか、SDK 52からどう上げるか、そして2026年11月時点でSDK 53に留まるとストア提出で何が起きるかを、公式チェンジログとnpm・設定スキーマの実測値で整理します。最新版のSDK 58の変更点とアップグレード手順は[Expo SDK 58・57・56の変更点とアップグレード手順｜最新はSDK 58、Expo Goの対応状況【2026年10月】](/tech/details/12044/)にまとめています。

## まとめ：Expo SDK 53の要点

- **SDK 53はReact Native 0.79.6・React 19.0.0**です。npmの`sdk-53`タグは53.0.27（2026年2月10日公開）を指し、2026年11月8日時点で確認できるSDK 53の最新パッチです。
- **New Architectureが全プロジェクトで既定有効**になりました。`newArchEnabled: false`で無効化できるのはSDK 54までで、SDK 55の設定スキーマからこのキーは消えています。
- Metroで`package.json`の`exports`が既定有効になり、一部のライブラリで解決エラーが起きる場合があります。`unstable_enablePackageExports: false`は切り分け用の一時退避です。
- Androidのedge-to-edgeは**Expo Go・新規プロジェクト・既存プロジェクトで既定値が違います**。既存プロジェクトだけは既定で無効です。
- `expo-av`は非推奨になり、音声は`expo-audio`、バックグラウンド処理は`expo-background-task`へ移ります。
- 同梱のExpo Routerは5.1系で、`Stack.Protected`による画面の保護とビルド時リダイレクトが入りました。保護時の転送先を指定する`redirectTo`はSDK 58からで、SDK 53には存在しません。
- アップグレードは`npx expo install expo@^53.0.0 --fix`で行います。`expo upgrade`は現行のExpo CLIにありません。
- 2026年11月時点でSDK 53のままストアへ出すには、iOSはXcode 26でのビルド、Google PlayはAndroid 16（API 36）を対象にすることが要ります。どちらもSDK 53の既定値のままでは満たせないため、最低でもSDK 54への移行を予定に入れてください。

## Expo SDK 53のReact Native・Reactの版と、SDK 58までの差

Expoが公開しているSDK一覧のAPI（exp.host）で各SDKの組み合わせを取得すると、次のとおりです。「expo 53のReactの版は？」という問いの答えは、React 19.0.0とReact Native 0.79.6です。

| SDK | 公開日        | React Native | React  | SDK 53から見た要点         |
| --- | ---------- | ------------ | ------ | -------------------- |
| 53  | 2025-04-30 | 0.79.6       | 19.0.0 | New Arch既定・exports既定 |
| 54  | 2025-09-10 | 0.81.5       | 19.1.0 | Legacy Arch対応の最終版    |
| 55  | 2026-02-25 | 0.83.10      | 19.2.0 | Legacy Arch廃止・設定キー削除 |
| 56  | 2026-05-21 | 0.85.3       | 19.2.3 | Hermes v1のメモリ回帰      |
| 57  | 2026-06-30 | 0.86.3       | 19.2.3 | Node 22.13以上が必要      |
| 58  | 2026-10-15 | 0.88.1       | 19.3.0 | 2026年11月時点の最新        |

React Nativeの版は各SDKの最新パッチに対応する値です。SDK 53に同梱される主なモジュールの版は、`expo-router` \~5.1.11、`expo-audio` \~0.4.9、`expo-av` \~15.1.7、`expo-background-task` \~0.2.8、`expo-updates` \~0.28.18です（[sdk-53ブランチのbundledNativeModules.json](https://github.com/expo/expo/blob/sdk-53/packages/expo/bundledNativeModules.json)）。`npx expo install`はこの表に合わせて版を選びます。

[公式のアップグレード手順](https://docs.expo.dev/workflow/upgrading-expo-sdk-walkthrough/)は1世代ずつ上げることを推奨しています。SDK 53から58へは5世代あり、New Architectureを無効にしているプロジェクトはSDK 54で止まります。Expo Goは[旧版の入手方法を案内するページ](https://docs.expo.dev/troubleshooting/expo-go-version-mismatch/)によれば、Android実機・エミュレーターとiOS SimulatorならSDK 53対応の旧版を入れて開けますが、「For projects using SDK 53 or earlier, you cannot install an older version of Expo Go on a physical iOS device」とあるとおり、iOS実機では開発ビルドが必要です。Expo Goと開発ビルドの役割の違いは[Expo（React Native）とは？Expo Go・開発ビルド・EASの役割と採用判断を実装目線で解説【2026年版】](/tech/details/16148/)で扱っています。

## New Architectureの既定有効化とnewArchEnabledの期限

SDK 53のチェンジログは「In SDK 53, the New Architecture is enabled by default in all projects」と明記しています。FabricとTurboModulesを使う構成が全プロジェクトの既定になりました。根拠として、2025年4月にEAS BuildでビルドされたSDK 52プロジェクトの74.6%が既にNew Architectureを有効にしていたと公表されています。

すぐに移行できない場合は、app.jsonでプラットフォーム単位または全体で無効化できます。

```
{
  "expo": {
    "newArchEnabled": false,
    "android": { "newArchEnabled": false },
    "ios": { "newArchEnabled": false }
  }
}
```

この逃げ道には期限があります。[SDK 54のリリースノート](https://expo.dev/changelog/sdk-54)は「SDK 54 is the final release to include Legacy Architecture support」と書き、[SDK 55](https://expo.dev/changelog/sdk-55)では「the newArchEnabled config option has been removed from app.json」となりました。Expoの設定スキーマAPIで各版を取得すると、53.0.0と54.0.0には`newArchEnabled`の定義があり、55.0.0では出現数が0です。**SDK 53で無効化したまま止めているプロジェクトは、SDK 54までしか進めません**。無効化はライブラリの対応待ちの期間に限り、その間にどのライブラリが未対応かを洗い出してください。New Architectureの構造は[React Nativeとは？仕組みとNew Architectureの構造・採用判断を実装目線で解説【2026年版】](/tech/details/16147/)で解説しています。

ライブラリ側もNew Architecture専用へ移っています。Reanimatedはv4でNew Architectureのみの対応になりました（[React Native Reanimatedとは？UIスレッド駆動の仕組みと4系の版の縛り【2026年8月時点】](/tech/details/16747/)）。

## Metroのpackage.json exports既定有効化と解決エラー対策

React Native 0.79でMetroの`package.json` `exports`対応が既定で有効になりました。機能自体はReact Native 0.72からありましたが、SDK 53で既定になったため、ライブラリのexports定義や読み込み方によっては、アップグレード直後に解決エラーが出る場合があります。チェンジログは既知の例として`@supabase/supabase-js`と`@firebase/*`を挙げています。

切り分けのため、metro.config.jsで一時的に無効化できます。

```
const { getDefaultConfig } = require('expo/metro-config');

const config = getDefaultConfig(__dirname);
config.resolver.unstable_enablePackageExports = false;

module.exports = config;
```

無効化してエラーが消えるなら、exportsによる解決先や条件の選択が関係しています。ライブラリ側の定義だけでなく、アプリ側のimport先やMetroの設定も確認してください。恒久対応は対応済みの版へ上げることで、無効化を残したまま次のSDKへ進むのは避けてください。エラーは出ないのに状態がおかしい場合は、同じライブラリのESM版とCommonJS版が二重に読み込まれる「dual package hazard」を疑います。バンドルの中身は`EXPO_ATLAS=1 npx expo`で起動するExpo Atlasで確認でき、AtlasはSDK 53で試験的機能から安定版になりました。

## Androidのedge-to-edge既定値と実行環境別の違い

SDK 53のAndroidでは、edge-to-edge表示の既定値が実行環境ごとに違います。

- Expo Goでは既定で有効、**オプトアウト不可**です。
- 新規プロジェクトでは既定で有効、Expo Go以外ではオプトアウトできます。
- 既存プロジェクトではExpo Go以外で既定は無効、オプトインできます。

「Expo Goでは画面がシステムバーの下まで伸びるのに、ビルドしたアプリでは伸びない」という食い違いは、SDK 53では仕様どおりの挙動です。既存プロジェクトで有効化するには、app.jsonに次のキーを置きます。

```
{
  "expo": {
    "android": { "edgeToEdgeEnabled": true }
  }
}
```

SDK 53の設定スキーマでは、このキーの既定値は`false`です。SDK 54でedge-to-edgeは常時有効になり、SDK 55の設定スキーマからは`edgeToEdgeEnabled`自体が消えています。Android 16（API 36）を対象にしたアプリはAndroid 16端末でedge-to-edgeを拒否できなくなるため、後述のGoogle Playの対象API要件を満たす段階では、システムバーや画面の切り欠きに対するインセット処理の確認が必要です。既存プロジェクトでも、SDK 53のうちに`edgeToEdgeEnabled: true`で表示を確かめておくと、SDK 54以降で手戻りが出ません。

## 見落としやすいSDK 53の破壊的変更

チェンジログの「Notable breaking changes」と「Deprecations & removals」には、New ArchitectureやMetroのexports対応などに加えて、ビルドや起動に影響する変更が並んでいます。

| 変更                  | 影響する対象                           | 対処                |
| ------------------- | -------------------------------- | ----------------- |
| AppDelegateがSwift化  | AppDelegateを書き換えるConfig Plugin   | Swift向けに書き直す      |
| RN内部モジュールのexport化   | react-native/Libraries/…のrequire | `.default`を付ける    |
| setImmediateポリフィル削除 | setImmediateを使うコード               | setTimeout等へ置換    |
| パッケージ名のscheme自動付与廃止 | Androidのディープリンク                  | android.schemeに明記 |
| jsEngineの非推奨        | JavaScriptCoreを使う構成              | Hermesへ移行         |
| Expo Go（Android）の通知 | プッシュ通知の動作確認                      | 開発ビルドで確認          |

AppDelegateのSwift化は、ソースを書き換えるConfig Pluginを使うプロジェクトで確認が必要な変更です。iOSのAppDelegateがObjective-CからSwiftへ移ったため、AppDelegateのソースを文字列置換するConfig Pluginは、Swiftの記述を書き換える形に直さないとprebuildで失敗するか、変更が入らないまま通ります。自作のプラグインを持つプロジェクトは、`npx expo prebuild`後に`ios/<アプリ名>/AppDelegate.swift`を開いて、意図した行が入っているかを確かめてください。

React Native内部モジュールの変更は、[React Native 0.79のリリースノート](https://reactnative.dev/blog/2025/04/08/react-native-0.79)によれば約46のAPIが`module.exports`から`export`構文へ移ったものです。`react-native`のルートからimportしていれば影響はなく、深いパスを`require`しているコードは影響を受ける場合があります。次の3つは変更前・変更後・推奨形の比較であり、同じファイルには併記せず、使用する形を1つ選びます。

```
// SDK 52まで
const ImageBackground = require('react-native/Libraries/Image/ImageBackground');
// SDK 53（React Native 0.79）以降
const ImageBackground = require('react-native/Libraries/Image/ImageBackground').default;
// 推奨：ルートからのimport
import { ImageBackground } from 'react-native';
```

Androidのディープリンクも見落としやすい変更です。SDK 52まではprebuild時にAndroidのパッケージ名がリンク用のschemeとして自動で追加されていましたが、SDK 53では追加されません。パッケージ名でアプリを開くリンクを配布済みなら、`"android": { "scheme": ["your.package.name"] }`をapp configに書き足してください。なお`jsEngine`は非推奨になっただけで、SDK 53では動きます。React Native 0.79でJavaScriptCoreのコア同梱が非推奨になったための措置です。

## expo-avの非推奨とexpo-audioへの移行

SDK 52で映像側が`expo-video`に置き換わったのに続き、SDK 53で音声側の`expo-audio`が安定版になりました。チェンジログは`expo-av`について「The expo-av package will no longer be maintained and we will not publish any new versions for SDK 54 and beyond」と書いています。しかしnpmの公開履歴では、SDK 54向けの16.0.0が2025年8月13日に公開され、16.0.8（2025年12月5日）まで更新が続きました。16.0.8は2026年11月時点でも`latest`タグが指す版です。**予告の文面ではなく、実際に公開されている版で判断してください**。

移行は`Audio.Sound`を組み立てる書き方から、フック中心の書き方へ変わります。次の例はexpo-audioをインストールし、assetsディレクトリにbeep.mp3を置いたプロジェクトで動きます。

```
import { useAudioPlayer } from 'expo-audio';
import { Button } from 'react-native';

export default function Player() {
  const player = useAudioPlayer(require('./assets/beep.mp3'));
  return <Button title="再生" onPress={() => player.play()} />;
}
```

SDK 55のリリースノートは「expo-av was removed from Expo Go because it has been replaced by expo-video and expo-audio」と書き、SDKに同梱されるモジュールの一覧からも`expo-av`はSDK 55で外れました。一覧から外れると`npx expo install --fix`で版を合わせてもらえなくなるため、SDK 54へ上げる前に移行を終えるのが安全です。

## expo-background-taskへの移行と実行間隔の制約

バックグラウンド処理は`expo-background-task`に置き換わり、`expo-background-fetch`は非推奨になりました。新モジュールはAndroidでWorkManager、iOSでBGTaskSchedulerを使い、どちらもOSが実行タイミングを決めます。Expo Goでは動かないため、動作確認には開発ビルドが必要です。iOS Simulatorでは実行できないので、iOSは実機で確認してください。必要なモジュールをインストールしてネイティブ側を再ビルドし、CNGを使わない場合はInfo.plistのUIBackgroundModesにprocessing、BGTaskSchedulerPermittedIdentifiersにcom.expo.modules.backgroundtask.processingを設定します。

```
import * as BackgroundTask from 'expo-background-task';
import * as TaskManager from 'expo-task-manager';

TaskManager.defineTask('sync-task', async () => {
  console.log('sync-task: 動作確認用のタスクを実行しました');
  return BackgroundTask.BackgroundTaskResult.Success;
});

BackgroundTask.registerTaskAsync('sync-task', {
  minimumInterval: 30,
}).catch(console.error);
```

[公式リファレンス](https://docs.expo.dev/versions/latest/sdk/background-task/)によると`minimumInterval`の単位は分で、既定は12時間に1回、最小間隔は15分です。15分より短い値を渡しても縮まりません。複数のタスクを定義しても「Expo Background Task uses a single worker on both platforms」のとおり単一のワーカーで実行されます。開発中は`triggerTaskWorkerForTestingAsync`で登録済みタスクを即時に走らせて確認できます。

## Expo Router v5のStack.Protectedとビルド時リダイレクト

SDK 53に同梱されるExpo Routerは5.1系（npmの`sdk-53`タグは5.1.11）です。チェンジログの「Expo Router」節にある変更のうち、移行時に書き換えの対象になりやすいのは、ログイン状態に応じてクライアント側の画面遷移を制御する`Stack.Protected`（サーバー側の認証・認可は別途必要）と、app configで定義するビルド時のリダイレクトです。

### Stack.Protectedによる認証状態別の画面制御

SDK 52までは、ログイン状態を見て`Redirect`や`router.replace`で画面を振り分ける処理を自分で書く必要がありました。SDK 53では、`guard`が`false`の画面へは遷移できず、アンカーとなる画面（通常はindex）か最初に表示できる画面へ戻されます。

```
import { Stack } from 'expo-router';

export default function RootLayout() {
  const isLoggedIn = false;
  return (
    <Stack>
      <Stack.Protected guard={!isLoggedIn}>
        <Stack.Screen name="login" />
      </Stack.Protected>
      <Stack.Protected guard={isLoggedIn}>
        <Stack.Screen name="private" />
      </Stack.Protected>
    </Stack>
  );
}
```

注意したいのは、[現行の公式ドキュメント](https://docs.expo.dev/router/advanced/protected/)がSDK 58の内容になっている点です。ドキュメントにある転送先を指定する`redirectTo`は「Available in SDK 58 and later」と書かれ、SDK 53のexpo-router 5.1.11の型定義（`build/views/Protected.d.ts`）では、`Protected`のpropsは`guard`と`children`だけです。SDK 53で転送先を変えたい場合は、画面の並び順でアンカーを調整するか、従来どおり`Redirect`を使います。

### app configのredirectsとLinkのprefetch

ビルド時のリダイレクトは、app.jsonの`expo-router`プラグインの設定に`redirects`配列で書きます。既存のWebサイトやアプリのURL構造をExpo Routerへ移すときに、古いパスを新しい画面へ向け直す用途です。

```
{
  "expo": {
    "plugins": [
      ["expo-router", {
        "redirects": [
          { "source": "/old-pricing", "destination": "/pricing" }
        ]
      }]
    ]
  }
}
```

あわせて、`<Link>`に`prefetch`を付けると遷移先を裏で読み込めるようになり、命令的APIにも`router.prefetch()`が加わりました。SDK 53からはアプリ全体が仮想のルートナビゲーターで包まれ、起動直後のリダイレクトでもナビゲーションのイベントが取りこぼされなくなっています。

## SDK 52からSDK 53へのアップグレード手順

まず前提として、旧来の手順書に残っている`expo upgrade`と`expo init`は、現行のExpo CLIにありません。[Expo CLIの公式リファレンス](https://docs.expo.dev/more/expo-cli/)が載せる`npx expo -h`の出力は「start, export / run:ios, run:android, prebuild / install, customize, config / login, logout, whoami, register」です。アップグレードは`install`に`--fix`を付けて行います。

```
npm i -g eas-cli
npx expo install expo@^53.0.0 --fix
npx expo-doctor@latest
```

CNGでネイティブ側をapp configとConfig Pluginから再生成できる場合は、旧SDKで生成したandroid・iosディレクトリを削除して再生成します。ネイティブコードを手で管理している場合は削除せず、Native project upgrade helperの差分を適用してください。

```
npx expo prebuild --clean
npx expo run:ios
```

上げたあとに確認するのは次の4点です。

- **lockfile**：EAS BuildはSDK 53以降で`npm ci`などのlockfile凍結インストールが既定になりました。lockfileが古いとビルドが失敗します。一時的に戻すなら環境変数`EAS_NO_FROZEN_LOCKFILE=1`です。
- **Reactの二重インストール**：React 18をpeer dependencyに指定したライブラリが多く、npmが`react`を2つ入れて実行時エラーになることがあります。package.jsonの`overrides`で1つに揃えます。
- **React 19の破壊的変更**：[React 19の移行ガイド](https://react.dev/blog/2024/04/25/react-19-upgrade-guide)のうちWeb固有の項目以外が対象です。React 19のSuspenseや`use`を使った非同期UIの組み方は[Async Reactとは？Transition・Suspense・useOptimisticで非同期UIを組む実装【React 19.3】](/tech/details/11005/)で扱っています。
- **Node.jsとXcode**：チェンジログはNode 20以上を推奨し、iOSのビルドにXcode 16（推奨16.2以上）を挙げていました。ただしNode 20は2026年4月30日にEOLを迎え、ストア提出には次の章の条件が加わっています。

## 2026年にSDK 53のままストアへ提出するときの条件

SDK 53は2026年2月10日の53.0.27を最後にパッチが止まっています。そのうえで、2026年にiOSとAndroidの両ストアで要件が上がり、SDK 53の既定値のままでは提出できなくなりました。

### App Store：Xcode 26でのビルドが必須

[Expoの告知](https://expo.dev/blog/app-store-connect-minimum-sdk-26)によれば、2026年4月28日以降にApp Store Connectへアップロードするアプリは、Xcode 26以降でビルドする必要があります。EAS BuildでSDK 53のまま提出するには、eas.jsonで`"image": "macos-sequoia-15.6-xcode-26.2"`のようにXcode 26のイメージを明示します。Expo自身は「not all SDK versions will be compatible with Xcode 26」「We recommend upgrading to at least SDK 54」と書いており、SDK 53はビルドが通る保証のない側に入ります。

```
{
  "build": {
    "production": {
      "ios": { "image": "macos-sequoia-15.6-xcode-26.2" }
    }
  }
}
```

### Google Play：更新の提出にAPI 36が必須

[Google Playの対象APIレベル要件](https://support.google.com/googleplay/android-developer/answer/11926878?hl=en)は「Starting August 31, 2026: New apps and app updates must target Android 16 (API level 36) or higher」です。一方、[Expoの版別対応表](https://docs.expo.dev/versions/latest/)ではSDK 53の`compileSdkVersion`と`targetSdkVersion`はどちらも35です。**SDK 53の既定値のままでは、2026年8月31日以降Google Playに更新を出せません**。延長申請で得られる猶予も2026年11月1日までで、既に過ぎています。

公開済みのアプリは、API 35を対象にしていれば新しいユーザーにも引き続き配信されます。止まるのは更新の提出です。SDK 53に同梱の`expo-build-properties`（\~0.14.8）には`targetSdkVersion`と`compileSdkVersion`を上書きするオプションがあり、36へ上げてビルドすること自体はできます。

```
{
  "expo": {
    "plugins": [
      ["expo-build-properties", {
        "android": { "compileSdkVersion": 36, "targetSdkVersion": 36 }
      }]
    ]
  }
}
```

ただしこれはSDK 53が検証された組み合わせ（API 35）の外で動かすことになり、API 36ではedge-to-edgeを拒否できないため、前述の`edgeToEdgeEnabled: false`のまま運用してきた既存プロジェクトでは、インセット処理が不十分な画面で表示や操作領域がシステムバーと重なる可能性があります。iOS側も、EAS Buildの[インフラ一覧](https://docs.expo.dev/build-reference/infrastructure/)でSDK 53向けの既定イメージは`macos-sequoia-15.5-xcode-16.4`のままなので、イメージを明示しないと提出できないビルドができあがります。

この2つの条件から、SDK 53は「動いているアプリをそのまま置いておく」ことはできても、「更新を出し続ける」には向かない版になっています。ストア更新の予定があるなら、SDK 54へ上げてNew Architectureと`expo-av`の移行を済ませ、その先は1世代ずつ進めるのが現実的な順序です。iOSとAndroidの両方を抱えたReact Nativeアプリの保守を外部に任せる場合は、[Flutter / React Native開発の支援](/service/apps/cross%5Fplatform/)で版の引き上げから相談できます。

## expo-updatesのfallbackToCacheTimeoutの既定値と起動待ち時間

OTA更新の挙動で最初に見る設定が`updates.fallbackToCacheTimeout`です。[設定スキーマ](https://docs.expo.dev/versions/latest/config/app/)の説明は「How long (in ms) to wait for the app to check for and fetch a new update upon launch before falling back to the most recent update already present on the device. Defaults to 0\. Must be between 0 and 300000 (5 minutes)」です。

```
{
  "expo": {
    "updates": {
      "url": "https://u.expo.dev/your-project-id",
      "fallbackToCacheTimeout": 3000
    }
  }
}
```

既定の0は「起動時に更新の取得を待たない」という意味で、起動中にダウンロードされた更新は次回起動時に適用されます。値を延ばすと、その時間内に確認とダウンロードが終われば同じ起動で更新が適用されますが、通信状態しだいで適用されないこともあり、起動時の待ち時間が延びます。この値だけで緊急修正の即時適用は保証できません。起動時間の許容値と対象環境のダウンロード時間を測り、待機時間を決めてください。このキーはSDK 55の設定スキーマにも同じ定義が残っており、`newArchEnabled`のように消えた設定ではありません。

SDK 53ではexpo-updates側にも変更があります。実行時にURLとヘッダを差し替える`Updates.setUpdateURLAndRequestHeadersOverride()`が追加され、Androidでは起動時に埋め込みアセットをコピーしなくなりました。後者は起動時のANRの原因を取り除くための変更で、問題が出た場合は`EX_UPDATES_COPY_EMBEDDED_ASSETS=true`で以前の挙動に戻せます。

## よくある質問

### Expo SDK 53のReactとReact Nativeの版はいくつですか？

React 19.0.0とReact Native 0.79.6です。Expoが公開するSDK一覧のAPIで、SDK 53.0.0に対応する値として確認できます。SDK 54はReact 19.1.0とReact Native 0.81.5です。

### SDK 53のプロジェクトをExpo Goで開けますか？

Android実機・エミュレーターとiOS Simulatorでは、SDK 53対応の旧版Expo Goを入れれば開けます。iOS実機ではSDK 53対応の旧版を入れられないため、開発ビルドを作って動かしてください。

### New Architectureを無効にしたままSDKを上げ続けられますか？

SDK 54までです。SDK 54のリリースノートが「SDK 54 is the final release to include Legacy Architecture support」と明記し、SDK 55では`newArchEnabled`が設定スキーマから削除されました。

### expo upgradeコマンドが見つからないのはなぜですか？

現行のExpo CLIにそのコマンドが無いためです。`npx expo install expo@^53.0.0 --fix`で依存関係をSDK 53向けに揃え、`npx expo-doctor@latest`で不整合を確認します。

### アップグレード後にモジュールが解決できないエラーが出るのはなぜですか？

Metroの`package.json` exports対応が既定で有効になったことが原因の可能性が高いです。metro.config.jsで`config.resolver.unstable_enablePackageExports = false`を設定してエラーが消えるなら、exportsによる解決先の変化が関係しています。依存ライブラリの定義、import先、Metroの設定を確認してください。対応済みの版へ上げたら設定を戻してください。

## 関連記事

- [Expo SDK 58・57・56の変更点とアップグレード手順｜最新はSDK 58、Expo Goの対応状況【2026年10月】](/tech/details/12044/)
- [Expo（React Native）とは？Expo Go・開発ビルド・EASの役割と採用判断を実装目線で解説【2026年版】](/tech/details/16148/)
- [React Nativeとは？仕組みとNew Architectureの構造・採用判断を実装目線で解説【2026年版】](/tech/details/16147/)
- [React Native Reanimatedとは？UIスレッド駆動の仕組みと4系の版の縛り【2026年8月時点】](/tech/details/16747/)
- [ReactとReact Nativeの違いを描画・部品・スタイル・画面遷移の4層で比較【2026年8月時点】](/tech/details/16725/)

---

出典: [Expo SDK 53の変更点とSDK 52からの移行手順｜New Architecture既定化・Expo Router v5・2026年の提出期限](<https://www.issoh.co.jp/tech/details/9593/>)（株式会社一創）
