Expo SDK 53は2025年4月30日に公開された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月】にまとめています。
まとめ: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)。npx expo installはこの表に合わせて版を選びます。
公式のアップグレード手順は1世代ずつ上げることを推奨しています。SDK 53から58へは5世代あり、New Architectureを無効にしているプロジェクトはSDK 54で止まります。Expo Goは旧版の入手方法を案内するページによれば、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年版】で扱っています。
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のリリースノートは「SDK 54 is the final release to include Legacy Architecture support」と書き、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年版】で解説しています。
ライブラリ側もNew Architecture専用へ移っています。Reanimatedはv4でNew Architectureのみの対応になりました(React Native Reanimatedとは?UIスレッド駆動の仕組みと4系の版の縛り【2026年8月時点】)。
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のリリースノートによれば約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);
公式リファレンスによると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>
);
}
注意したいのは、現行の公式ドキュメントが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の公式リファレンスが載せる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の移行ガイドのうちWeb固有の項目以外が対象です。React 19のSuspenseや
useを使った非同期UIの組み方はAsync Reactとは?Transition・Suspense・useOptimisticで非同期UIを組む実装【React 19.3】で扱っています。 - 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の告知によれば、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レベル要件は「Starting August 31, 2026: New apps and app updates must target Android 16 (API level 36) or higher」です。一方、Expoの版別対応表では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のインフラ一覧で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開発の支援で版の引き上げから相談できます。
expo-updatesのfallbackToCacheTimeoutの既定値と起動待ち時間
OTA更新の挙動で最初に見る設定がupdates.fallbackToCacheTimeoutです。設定スキーマの説明は「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月】
- Expo(React Native)とは?Expo Go・開発ビルド・EASの役割と採用判断を実装目線で解説【2026年版】
- React Nativeとは?仕組みとNew Architectureの構造・採用判断を実装目線で解説【2026年版】
- React Native Reanimatedとは?UIスレッド駆動の仕組みと4系の版の縛り【2026年8月時点】
- ReactとReact Nativeの違いを描画・部品・スタイル・画面遷移の4層で比較【2026年8月時点】