58 人が閲覧(直近 30 日) モバイル(iOS・Android)

Expo SDK 58・57・56の変更点とアップグレード手順|最新はSDK 58、Expo Goの対応状況【2026年10月】

Expo SDK 58・57・56の変更点とアップグレード手順|最新はSDK 58、Expo Goの対応状況【2026年10月】

Expo SDKの最新安定版は、2026年10月15日に公開されたSDK 58です(npmのexpoのlatestは2026年10月23日時点で58.0.17)。React Native 0.88とReact 19.3を採用し、iOS 27向けに作られています。一方で、ストア版のExpo Goはまだ58に対応しておらず、5月のSDK 56、6月のSDK 57から上げるかどうかで迷う時期です。この記事では、58・57・56の変更点と破壊的変更、版ごとのExpo Goの入手方法、上げる手順を、Expo公式のSDK 58チェンジログと、手元で58のプロジェクトを作って確かめた結果をもとに整理します。版が上がるたびに更新します。

まとめ|最新バージョンと確認・更新の要点

  • 最新版:SDK 58(React Native 0.88.0/React 19.3.0、最低Node.jsは22系なら22.13、24系なら24.3)。2026年10月15日公開。
  • 58の中身:iOS 27のシーンベースのライフサイクルへの移行、Siriから操作できるApp Intents、Androidのホーム画面ウィジェット、Androidビルドの短縮(クリーンビルドが約80秒から約39秒)、Expo Routerのデータローダーの安定版化。
  • 58の破壊的変更:react-native/Libraries/*からの深いimportが型エラーになり、InteractionManagerなどが削除され、AndroidのリリースビルドでR8が既定で有効になります。
  • Expo Go:App Store版は57.0.9のままです。58版は数週間以内に出る予定で、出ると57のプロジェクトは開けなくなります。テンプレート指定なしのcreate-expo-appは既にSDK 58のプロジェクトを作るので、ストア版Expo Goで試すなら--template default@sdk-57を付けます。
  • 56・57:56はExpo RouterがReact Navigationから分離した版で、Hermes V1のメモリ回帰はSDK 57で修正されています。Hermes V1とWorklets/Reanimatedを使うSDK 56のアプリは、SDK 57への更新を優先してください。
  • 確認と更新:版はpackage.jsonのexpoで決まります。1版ずつnpx expo install expo@^58.0.0 --fixのように上げ、npx expo-doctor@latestで確認します。

Expo SDK 54〜58のリリース履歴とReact Native対応表

Expo SDKは1つの版がReact Nativeの特定の版に対応しています。直近5世代は次のとおりです(React NativeとReactの版はExpoのバージョンAPIが返す現在値、最低Node.jsはExpoの公式リファレンスの対応表)。

SDK 公開日 React Native React 最低Node.js ストア版Expo Go
58 2026-10-15 0.88.0 19.3.0 22.13.x 未配信(数週間以内)
57 2026-06-30 0.86.3 19.2.3 22.13.x 57.0.9(現行)
56 2026-05-21 0.85.3 19.2.3 20.19.x 配信されず
55 2026-02-25 0.83.10 19.2.0 20.19.x 配信されず
54 2025-09-10 0.81.5 19.1.0 20.19.x 57へ置き換え済み

58はAndroidのcompileSdkVersionが36から37に上がりました。最低OS(Android 7、iOS 16.4)と最低Xcode(26.4)は56から変わっていません。なお、公式のSDK一覧ページ(expo.dev/sdk)は10月23日時点でもSDK 57が先頭のままです。最新版はnpmのnpm view expo dist-tagsで確かめるのが確実です。SDK 53・54の変更点はExpo SDK 53の変更点とアップグレード手順で扱っています。

Expo SDK 58の主な新機能

iOS 27とiPhone Duoへの対応

iOS 27 SDKでビルドしたアプリは、UIKitのシーンベースのライフサイクルを使わないとiOS 27で正しく起動しません。SDK 58はこれを既定にしました。テンプレートから作ったプロジェクトでnpx expo prebuildを実行すると、iosの下にSceneDelegate.swiftが生成され、Info.plistにUIApplicationSceneManifestが入ります。AppDelegate.swiftを手で書き換えているプロジェクトは、公式のシーンライフサイクル移行ガイドに沿って処理を移します。

折りたたみ端末のiPhone Duo向けには、ヒンジの角度を返すexpo-hingeパッケージ(iOS 27.1以降とAndroid 11の折りたたみ端末)と、Expo UIのArrangementViewが加わりました。Xcode 27でSimulator.appがDevice Hubに置き換わったことにも、Expo CLIが対応しています。

App IntentsとAndroidのホーム画面ウィジェット

expo-app-intentsは、アプリの操作やデータをSiri、ショートカット、Spotlight、Apple Intelligenceに公開するパッケージです。インテント自体はSwiftのインラインモジュールで宣言し、呼び出しはJavaScriptで受け取ります。初期設定はnpx expo-app-intents initです。まだアルファ版なので、本番アプリに入れるのは安定版を待ってからにしてください。

expo-widgetsにはAndroid版が加わりました。ウィジェットは専用のHermesランタイムで独自のJavaScriptバンドルを動かし、タップ操作とMaterial Colorsにも対応します。iOSのLive ActivitiesにはstaleDateが追加されています。

Androidビルドの短縮とExpo Modulesの高速化

expo-modules-coreがAndroid向けにビルド済みのネイティブライブラリを同梱するようになりました。公式の計測では、空のSDK 58プロジェクトのクリーンなdebugビルド(4つのABI、Apple M3 Pro)が約80秒から約39秒に縮んでいます。コア数の少ないCIランナーほど差は大きくなります。ソースからビルドしたい場合は、expo-build-propertiesでandroid.buildExpoModulesCoreFromSourceを指定します。

iOS側ではネイティブモジュール呼び出しの固定費が下がり、長い文字列の受け渡しは最大3.8倍速くなりました。SDK 58に上げるだけで効き、コードの変更は要りません。SwiftやKotlinの普通のクラスにアノテーションを付けて書くExpo Modules 2.0は、iOSとAndroidの両方でベータになりました。

Expo Routerとビルド周りの既定値

Expo Routerでは、データローダー、サーバーサイドレンダリング、ミドルウェア、ネイティブタブが安定版になり、実験フラグが要らなくなりました。ネイティブビルドの再実行を判定するfingerprintは既定のプリセットがbalancedになり、app.jsonのversionを上げただけでは指紋が変わらなくなっています。Rustで書かれた変換器(experiments.noxcturnalTransformWorker)も試験的に入り、公式のテストではコールドバンドルが約2倍速くなりました。

Expo SDK 58の破壊的変更と対処

Strict TypeScript APIとReact Nativeの削除API

React Native 0.87からStrict TypeScript APIが既定になりました。手元のSDK 58プロジェクト(TypeScript 6.0.3)でreact-native/Libraries/Utilities/Platformを型importすると、TS2307: Cannot find moduleになりました。すぐに直せない場合は、tsconfig.jsonのcustomConditionsにreact-native-legacy-deep-importsを足すと、同じimportが通ります。react-nativeはexpo/tsconfig.baseが既に設定していますが、上書きになるので両方書きます。

{
  "extends": "expo/tsconfig.base",
  "compilerOptions": {
    "strict": true,
    "customConditions": ["react-native", "react-native-legacy-deep-imports"]
  }
}

この回避設定はReact Native 0.89の後に削除される予定です。58を使っているあいだに、公式のStrict TypeScript APIの移行ガイドに沿ってimportを直してください。あわせて、InteractionManager(requestIdleCallbackへ置き換え)、ルートのTouchable、Modalのanimated prop、StatusBarのbackgroundColor・translucentが削除されました。

NODE_ENVとAndroidのR8の既定変更

Expo CLIは、実行するコマンドに応じてNODE_ENVをdevelopmentかproductionに固定するようになりました。たとえばNODE_ENV=test npx expo startは.env.testではなく.env.developmentを読みます。Stagingのような独自のビルド構成もproduction扱いです。環境ごとに.envを分けているプロジェクトは、上げる前に読み込まれるファイルを確認してください。

Androidのテンプレートでは、リリースビルドでR8が既定で有効になりました。prebuildしたandroid/gradle.propertiesにはandroid.enableMinifyInReleaseBuilds=trueが入ります。R8によるサイズ削減や起動時間短縮が期待できますが、リフレクションで参照するコードが削除・難読化されると実行時エラーになる場合があります。ライブラリが同梱するkeepルールも確認し、不足するルールを補います。リリースビルドを実機で通しで確認し、一時的にR8を無効化する場合は、expo-build-propertiesのandroid.enableMinifyInReleaseBuildsをfalseに設定し、ネイティブプロジェクトを再生成・再ビルドします。

Expo Routerの移行で書き換える箇所

Expo Routerは内部のナビゲーションの仕組みが作り直され、React Navigationから引き継いでいたAPIの多くが外れました。SDK 57から58への移行ガイドのうち、多くのアプリが当たるのは次の4つです。

  • ナビゲーターのpropとして指定するinitialRouteNameは削除。ディープリンクで戻り先が要るなら、レイアウトでunstable_settings.anchorを書きます。
  • freezeOnBlurは効かなくなりました。画面の状態を残しつつ副作用を止めたいならactivityEnabledを使います。
  • navigation.navigate('(tabs)', { screen: 'feed' })のようなscreen指定は、ただのパラメーターになりました。useRouter()で完全なhrefへ移動します。
  • web.outputが未設定ならserver扱いになり、HTMLはリクエストごとに描画されます。静的HTMLを書き出す場合はweb.outputをstaticにします。SDK 57のserver出力と同様にAPIルートも使う場合は、expo-routerのconfig pluginでapiRoutes: trueも設定し、サーバーへデプロイします。

このほか、expo-file-systemのFile.write()が非同期になり(同期はwriteSync())、expo-sqliteのlibSQL対応が削除されました。SDK 58はまだmacOSに対応していません。

Expo SDK 56の主な新機能

React Native 0.85とHermes V1の既定化

SDK 56はReact Native 0.85を採用し、55の0.83から2版分の変更がまとめて入りました。影響が大きいのは、Hermes V1が既定のJavaScriptエンジンになったことです。旧Hermesへ戻すにはexpo-build-propertiesでuseHermesV1をfalseにしますが、あわせてbuildReactNativeFromSourceをtrueにする必要があり、ビルド時間が大きく延びます。

{
  "plugins": [
    ["expo-build-properties", { "useHermesV1": false, "buildReactNativeFromSource": true }]
  ]
}

Expo UIの安定版と新しいライブラリAPI

SwiftUI(iOS)とJetpack Compose(Android)をネイティブ描画するExpo UIは、SDK 56でAPIが安定版になり、既定テンプレートとExpo Goに入りました。@gorhom/bottom-sheetなど8系統のライブラリには代替が用意され、多くはimportの変更で移行できます。ただし、一部のpropsは未対応または挙動が異なるため、使用中のpropsを確認してください。仕組みはExpo UI(@expo/ui)とはで解説しています。expo-calendar、expo-contacts、expo-media-libraryは、オブジェクト指向で作り直された新APIが安定版になり、旧APIは非推奨です。iOSでは複雑なExpoモジュールがビルド済みのXCFrameworkで配布され、公式の計測でクリーンビルドの中央値が約16%短くなりました。

Expo SDK 56の破壊的変更と対処

Expo RouterとReact Navigationの分離

SDK 56のExpo RouterはReact Navigationに依存しなくなりました。アプリのコードで@react-navigation/*から直接importするとバンドル時にエラーになります。対応するエントリーポイントがあるimportは、指定先を変更します。native-stackとdrawerは直接の対応先がないため、StackまたはDrawerのレイアウトへの移行が必要です。

SDK 55までのimport元 SDK 56以降
@react-navigation/native・core・elements・routers expo-router/react-navigation
@react-navigation/stack expo-router/js-stack
@react-navigation/bottom-tabs expo-router/js-tabs
@react-navigation/material-top-tabs expo-router/js-top-tabs
@react-navigation/native-stack・drawer 対応先なし(StackかDrawerのレイアウトへ)

書き換えは公式のcodemodで自動化できます(詳細はExpo Routerの移行ガイド)。srcはアプリのソースがあるディレクトリに置き換えます。

npx expo-codemod sdk-56-expo-router-react-navigation-replace src

expo-codemod 57.0.0をローカルで実行して確かめたところ、@react-navigation/native-stackのような対応先のないimportが1行でもあると、そのファイルは丸ごとskipされ、同じファイルの@react-navigation/nativeも書き換わりませんでした。結果欄が1 skipped、0 okなら、対応先のない行を先に手で直してから再実行します。書き換え後のimportはダブルクォートになるので、Prettierの設定によっては差分が広がります。

fetch・file-system・vector-iconsの挙動変更

SDK 56ではexpo/fetchがグローバルのfetchになり、importしなくてもWinterTC準拠の実装が使われます。React Native標準のfetchに戻すには、.envにEXPO_PUBLIC_USE_RN_FETCH=1を書きます。expo-file-systemのFileとDirectoryでは、copy()とmove()がPromiseを返すようになりました。

import { File, Paths } from 'expo-file-system';

// Paths.documentにdraft.jsonが既にある前提の例
const src = new File(Paths.document, 'draft.json');
const dst = new File(Paths.cache, 'draft.json');
await src.copy(dst);   // SDK 56からPromiseを返す
// src.copySync(dst); // 同期で使うなら明示的にSync版へ

また、expoパッケージは@expo/vector-iconsに依存しなくなりました。アイコンを使い続けるならpackage.jsonへ明示的に追加します。最低要件はiOS 16.4、Xcode 26.4に上がり、iPhone 7・iPhone 6s・初代iPhone SEなどが対象外になりました。業務用に古い端末を配っている場合は、上げる前に端末台帳を確認してください。

SDK 57はRN 0.86への小さなリリース

SDK 57の中身はほぼReact Native 0.86への更新だけで、Reactは56と同じ19.2のままです。ただし最低Node.jsは20.19.xから22.13.xに上がりました。同梱のreact-native-reanimatedは4.3.1から4.5.1へ、react-native-workletsは0.8.3から0.10.1へ上がっています。reanimatedの版の縛りはReact Native Reanimatedとはで整理しています。

Hermes V1のメモリ回帰とSDK 57での修正

SDK 56では、react-native-workletsかreact-native-reanimatedをimportするアプリで、Hermes V1のバグによりメモリ使用量が大きく増えることがあります(expo/expo#46519)。修正はReact Native 0.86.2を含む[email protected]で入り、56向けには出ていません。開発時に起動が遅くなる回帰(#48298)も[email protected]で直りました。

prebuildの既定変更とenableSceneSupport

SDK 57から、npx expo prebuildは既定でandroidとiosのディレクトリを消して作り直します。ネイティブディレクトリを手で編集してコミットしている場合は、--no-cleanを付けないと編集が消えます。

SDK 57のままXcode 27でiOS 27向けにビルドするなら、[email protected]以降でios.enableSceneSupportを有効にします。BuildPropertiesのリファレンスによると、対象は標準のSDK 57 Swift AppDelegateテンプレートのままのプロジェクトだけで、Prebuildを使わないプロジェクトには効きません。設定後はネイティブアプリを再ビルドします。

{
  "plugins": [
    ["expo-build-properties", { "ios": { "enableSceneSupport": true } }]
  ]
}

Expo GoのSDK別の対応状況と入手方法

Expo Goは1つのビルドに1つのSDK版しか入っていません。プロジェクトとExpo GoのSDK版が違うと「Project is incompatible with this version of Expo Go」と表示されて開けません。App Storeの更新履歴では、54.0.2(2025年9月23日)の次が57.0.9(2026年9月2日)で、55と56向けは一度もストアに出ていません。58向けは、公式によると数週間以内にApp StoreとGoogle Playに出て、58だけに対応します。

移行期間で注意したいのは、新規プロジェクトの版です。公式ドキュメントには「移行期間中はテンプレート指定なしのcreate-expo-app@latestがSDK 57のプロジェクトを作る」と書かれています。しかし2026年10月23日にcreate-expo-app 5.0.0をテンプレート指定なしで実行すると、expo-template-default@sdk-58が使われ、expo ~58.0.17のプロジェクトができました。これはストア版Expo Go(57)では開けません。ストア版Expo Goで試すなら、版を明示します。

# ストア版Expo Go(SDK 57)で開くプロジェクト
npx create-expo-app@latest my-app --template default@sdk-57

# SDK 58で始める(開発ビルドで動かす)
npx create-expo-app@latest my-app --template default@sdk-58
テスト環境 ストアにない版(55・56・58)を開く方法
iPhone・iPad実機 eas goで自前のExpo Goを作りTestFlightへ
Android実機・エミュレーター Expo CLIかexpo.dev/goから該当版を入れる
iOSシミュレーター Expo CLIかexpo.dev/goから該当版を入れる
どの環境でも 開発ビルド(expo-dev-client)を作る

eas goにはApple Developer Programの会員登録が要ります。Macがない場合の選択肢はWindowsでiOSアプリを開発する方法にまとめています。App Store版のExpo Go(57)では、ターミナルのExpo CLIとアプリの両方で同じExpoアカウントにログインする必要があります。Expo自身もExpo Goを学習用と位置づけ、本番アプリには開発ビルドを勧めています。役割の違いはExpo(React Native)とはで比較しています。

SDK 55・56・57から58へ上げる手順

今のSDKはpackage.jsonのexpoの版で決まり、npm ls expoで実際に入っている版も確認できます。公式は1版ずつ上げることを推奨しています。開発マシンとCIのNode.jsを先にそろえます。SDK 58では22系は22.13.0以上、24系は24.3.0以上、26系以降が対応範囲で、23系・25系は対象外です。

# 各SDKへの更新後にexpo-doctor、必要なネイティブ再生成・再ビルド、動作確認を行う
# 問題を解消してから次のSDKへ進む。以下を一括実行しない
# 1. 56へ(55から上げる場合)
npx expo install expo@^56.0.0 --fix
npx expo-codemod sdk-56-expo-router-react-navigation-replace src

# 2. 57へ
npx expo install expo@^57.0.0 --fix

# 3. 58へ
npx expo install expo@^58.0.0 --fix
npx expo-doctor@latest

expo-doctorは依存パッケージの版の食い違いや既知の設定ミスを点検するコマンドで、1.21.5ではSDK 58の新規プロジェクトに対して20項目を検査しました。上げたあとは、Continuous Native Generationを使っているなら古いSDKで生成したandroidとiosのディレクトリを削除して作り直します。使っていないなら、npx pod-installを実行し、Native project upgrade helperの差分を手で当てます。expo-dev-clientの開発ビルドは、上げたあとに作り直さないと古いネイティブ側のまま動きます。

SDKをいつ上げるかの判断基準

  • SDK 56でHermes V1を使っている:Worklets/Reanimatedを使うアプリは、回帰の修正を含むSDK 57への更新を優先し、動作確認後にリリースします。58はRouterとTypeScriptの移行が要るので、57で落ち着いてから進めます。
  • SDK 57でExpo Goを使っている:58へ上げるのは、ストアに58版のExpo Goが出るのに合わせます。先に上げると実機で開けなくなり、出たあとに57のままだと開けなくなります。
  • Xcode 27でiOS 27向けに出す:58へ上げるか、57.0.23以降でenableSceneSupportを有効にします。AppDelegateを手で直しているなら58の移行ガイドを先に読みます。
  • SDK 54に留まっている:公式は54の重大な修正を「次のSDKのリリースまで」としていました。58の公開後もnpmには10月21日に[email protected]が出ていますが、続く保証はありません。55以降へ上げる計画を立ててください。

SDK 58のReact 19.3で増えたAPIはReact 19.3の新機能で確認できます。React Nativeのアプリ開発を外部に相談したい場合は、Flutter・React Nativeのクロスプラットフォーム開発支援もご覧ください。

よくある質問

Expo SDK 58のリリース日はいつですか?

2026年10月15日です(公式チェンジログの公開日)。ベータは9月15日に始まり、npmの[email protected]は9月29日に公開されていました。

使っているExpo SDKの版はどう確認しますか?

package.jsonのexpoの版、またはnpm ls expoで確認します。58.0.17ならSDK 58です。公開されている最新版はnpm view expo dist-tagsのlatestで分かります。

App StoreのExpo GoでSDK 58や56のプロジェクトが開けないのはなぜですか?

2026年10月23日時点のストア版Expo GoはSDK 57(57.0.9)にだけ対応しているためです。58版は数週間以内に出る予定です。それまでは開発ビルドを作るか、Android・iOSシミュレーターならExpo CLIから該当版のExpo Goを入れます。

Expo SDK 56のReact NativeとNode.jsの版はいくつですか?

React Native 0.85(現在の同梱版は0.85.3)とReact 19.2.3、最低Node.jsは20.19.xです。SDK 58まで上げる場合は、Node.js 22系なら22.13.0以上、24系なら24.3.0以上、または26系以降を使います。

enableSceneSupportは何のための設定ですか?

SDK 57のままXcode 27でビルドしたアプリを、iOS 27で正しく起動させるための設定です。[email protected]以降のexpo-build-propertiesでios.enableSceneSupportをtrueにします。SDK 58では既定で対応しているので不要です。

関連記事

お気に入りに入れた記事の一覧

一創の公式 SNS

X では毎朝の新着記事と IT ニュースの速報を、YouTube・TikTok・Instagram・LinkedIn・Facebook では記事の解説動画を配信しています。

この記事は以下の記事からリンクされています

資料請求

今日のトレンド記事 直近 24 時間で、いつもより多く読まれている記事

  1. 2026.11.11 テックブログ Microsoft 2026年11月の月例更新:Outlookの悪用済みCVE-2026-124194と修正版の確認方法
  2. 2026.11.11 テックブログ JANISの不正アクセス:最大11,652名の医療機関情報と情報窃取プログラムの検知設定
  3. 2026.11.11 テックブログ SMBC日興証券の不正アクセス:持株会会員最大5.6万人の範囲と受託システムの分離設計
  4. 2026.01.21 コラム 税務調査の録音は禁止?判例・裁決と国税局マニュアルで見る、断られたときの対応
  5. 2026.11.09 テックブログ ステップゴルフ不正アクセス:口座情報の対象確認と偽連絡・引き落としの注意点

RELATED POSTS 関連記事

目次