Expo SDK 56は2026年5月21日に公開された、React Native 0.85とReact 19.2を採用するSDKです。ところが1か月あまり後の6月30日にSDK 57が出ており、2026年9月29日時点の最新安定版はSDK 57(npmの[email protected])です。SDK 58はベータ中です。この記事では、SDK 56で変わった点と破壊的変更、SDK 57へ上げる理由、ストア版Expo Goで56のプロジェクトが開けない理由を、Expo公式のSDK 56チェンジログ・SDK 57チェンジログとドキュメントをもとに整理します。版が上がるたびに更新します。
まとめ|最新バージョンと確認・更新の要点
- 最新版:安定版はSDK 57(React Native 0.86.3/React 19.2.3)。SDK 58は2026年9月15日にベータが始まり、React Native 0.88の正式版が出た後に安定版になる予定です。
- SDK 56の中身:React Native 0.85、Hermes V1の既定化、Expo UIの安定版、Calendar・Contacts・MediaLibraryの新API、インラインモジュール。最低要件はXcode 26.4、iOS 16.4です。
- 56の破壊的変更:Expo Routerを使うアプリでは
@react-navigation/*の直接importが使えなくなり、expo/fetchがグローバルのfetchになり、expo-file-systemのcopy()とmove()が非同期になりました。 - 56のままにしない:reanimatedやworkletsを使うアプリはHermes V1のメモリ回帰を抱えます。修正はSDK 57(57.0.9以降)にしか入っていません。
- Expo Go:ストア版は55・56に対応しないまま57へ進みました。SDK 56のプロジェクトを実機のiPhoneで開く方法には、
eas goや開発ビルドがあります。公式は外部TestFlightも案内していますが、SDK 56用ビルドを現在選べるかは配布状況によります。 - 確認と更新:SDKの版は
package.jsonのexpoの版で決まります。上げるときは1版ずつ、npx expo install expo@^57.0.0 --fixのあとにnpx expo-doctor@latestを実行します。
Expo SDK 54〜58のリリース履歴とReact Native対応表
Expo SDKは1つの版がReact Nativeの特定の版に対応しています。直近5世代を並べると次のとおりです(React NativeとReactの版はExpoのバージョンAPIが返す現在値)。
| SDK | 公開日 | React Native | React | ストア版Expo Go |
|---|---|---|---|---|
| 58 | ベータ(2026-09-15〜) | 0.88.0-rc.2 | 19.3.0 | 未配信(CLIとeas goのみ) |
| 57 | 2026-06-30 | 0.86.3 | 19.2.3 | App Store・Google Play |
| 56 | 2026-05-21 | 0.85.3 | 19.2.3 | 配信されず |
| 55 | 2026-02-25 | 0.83.10 | 19.2.0 | 配信されず |
| 54 | 2025-09-10 | 0.81.5 | 19.1.0 | 57へ置き換え済み |
ExpoはこれまでSDKを年3回出してきました。SDK 57は例外で、React Native 0.86を取り込むだけの小さなリリースです。公式はこれを、破壊的変更のないReact Nativeの版を早く届ける新しいリリース周期の試行だと説明しています。サポート期間は各SDKでおよそ1年のままで、SDK 54(2025年9月)は次のSDKのリリース(2026年9月か10月)まで重大な修正を受けます。SDK 53の変更点はExpo SDK 53の変更点とアップグレード手順で扱っています。
Expo SDK 56の主な新機能
React Native 0.85とHermes V1の既定化
SDK 55はReact Native 0.83だったため、56では0.84と0.85の2版分の変更がまとめて入ります。影響が大きいのはJavaScriptエンジンで、Hermes V1が既定になりました。0.85は新しいアニメーションバックエンドと、TLS設定によるMetro開発サーバーのHTTPS化にも対応しています。また、Node.js v20.19.4より前の版はサポート対象外です。
旧Hermesへ戻すには、expo-build-propertiesでuseHermesV1をfalseにします。ただし公式リファレンスには、あわせてbuildReactNativeFromSourceをtrueにする必要があると書かれています。React Nativeをソースからビルドするとビルド時間が大きく延びるため、回避策として気軽に使える設定ではありません。
{
"plugins": [
["expo-build-properties", { "useHermesV1": false, "buildReactNativeFromSource": true }]
]
}
Expo UIの安定版とコミュニティ部品の置き換え
SwiftUI(iOS)とJetpack Compose(Android)をネイティブ描画するExpo UIは、SDK 56でAPIが安定版になり、create-expo-appの既定テンプレートとExpo Goに入りました。Android・iOS・Webで共通に書ける汎用コンポーネント(Row、Column、TextInput、BottomSheetなど)も加わっています。ただし、Web版のAPIはまだ実験的な扱いです。
@gorhom/bottom-sheetや@react-native-community/datetimepickerなど8系統のライブラリには、importを差し替えるだけの代替が用意されました。ただし、中身がSwiftUIとComposeに変わるため、一部のpropsは使えないか挙動が違います。部品ごとの仕組みはExpo UI(@expo/ui)とはで解説しています。
Calendar・Contacts・MediaLibraryの新API
expo-calendar、expo-contacts、expo-media-libraryは、オブジェクト指向で作り直された新APIが安定版になりました。連絡先や写真を1件ずつクラスで表し、必要なプロパティだけを取得できます。検索や絞り込みはBuilderパターンで書きます。旧APIは非推奨になったので、公式の移行ガイド(sdk-libraries-migration)を見ながら置き換えを計画してください。
ネイティブビルドの短縮とインラインモジュール
iOSでは複雑なExpoモジュールがビルド済みのXCFrameworkで配布されるようになりました。公式の計測では、クリーンビルドの中央値がおよそ1分(約16%)短くなっています。Androidでは、android.usePrecompiledHeadersを有効にすると、C++のcodegen出力にプリコンパイル済みヘッダーが使われます。この設定はまだ実験的な扱いです。
インラインモジュールを使うと、SwiftやKotlinのファイルをアプリのソースツリーに直接置いてExpoモジュールとして自動リンクできます。新しいexpo-type-informationのCLIは、SwiftのモジュールからTypeScriptの型定義を生成します。生成される部分と手で管理する部分は別ファイルに分かれるため、再生成しても手書きのインターフェースは上書きされません。
Expo SDK 56の破壊的変更と対処
SDK 56のExpo RouterはReact Navigationに依存しなくなりました。そのため、アプリのコードで@react-navigation/*から直接importするとバンドル時にエラーになります。移行はimportの指定先を変えるだけで、実行時のAPIは変わりません。
| 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をローカルで実行したところ、注意すべき挙動が1つ見つかりました。@react-navigation/native-stackのような対応先のないimportが1行でもあると、そのファイルは丸ごとskipされます。同じファイルにある@react-navigation/nativeなども書き換わりません。結果欄が1 skipped、0 okになっていたら、対応先のない行を先に手で直してから再実行してください。書き換えられたimportの引用符はダブルクォートに変わるので、Prettierの設定によっては差分が広がります。
node_modules内のライブラリが@react-navigation/coreをimportしている場合は、Expo CLIが一時的な互換措置として自動で書き換えます。環境変数EXPO_ROUTER_DISABLE_RN_NAVIGATION_CHECK=1でこの書き換えを止められますが、アプリのコードに対するエラーも一緒に止まります。移行が済むまでの退避策と考えてください。
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を返すようになりました。awaitを付けないと、コピーの完了前に次の処理が走ります。同期で動かしたい箇所はcopySync()とmoveSync()に置き換えます。
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へ明示的に追加します。公式は@react-native-vector-icons/*への移行を推奨しており、npx @react-native-vector-icons/codemodというcodemodも用意されています。
Xcode・iOS・Node.jsの最低要件とTypeScriptの標準版
| 項目 | SDK 55 | SDK 56 |
|---|---|---|
| 最低iOS/tvOS | 15.1 | 16.4 |
| 最低Xcode | 26 | 26.4 |
| Android | — | 7以上・API level 36 |
| Node.js | 20.19.x | v20.19.4以上 |
| TypeScript | 5.9系 | 6.0.3 |
iOS 16.4への引き上げで、iPhone 7/7 Plus、iPhone 6s/6s Plus、初代iPhone SE、iPad mini 4、iPad Air 2が対象外になります。業務アプリで古い端末を配っている場合は、SDKを上げる前に配布先の端末台帳を確認してください。自作のExpoモジュールがある場合は、podspecの:iosも16.4に上げます。
SDK 57はRN 0.86への小さなリリース
SDK 57の中身はほぼReact Native 0.86への更新だけで、Reactは56と同じ19.2のままです。ただし公式の対応表では、Node.jsの最低版が56の20.19.xから22.13.xに上がっています。0.86は0.85からの破壊的変更がない版として出ており、公式の狙いも「これまでで最も簡単なアップグレード」です。同梱ライブラリも、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](React Native 0.86.3)で直りました。公式も、Hermes V1を使うSDK 55・56のアプリにはSDK 57へ上げるよう勧めています。
prebuildの既定変更とXcode 27への対応
SDK 57では、npx expo prebuildが既定でandroidとiosのディレクトリを消して作り直すようになりました。Continuous Native Generationを使わず、ネイティブディレクトリを手で編集してコミットしているプロジェクトでは、編集内容が消えます。既存のフォルダに変更を当てるだけにしたいときは--no-cleanを付けます。
iOS 27 SDK(Xcode 27)でビルドしたアプリは、UIKitのシーンベースのライフサイクルを使わないとiOS 27で正しく起動しません。SDK 58は既定でこれに対応します。SDK 57に留まる場合は、[email protected]以降でios.enableSceneSupportを有効にします。BuildPropertiesのリファレンスによると、対象は標準のSDK 57 Swift AppDelegateテンプレートのままのプロジェクトだけです。expo-build-propertiesはPrebuildでネイティブディレクトリを生成するときに効く設定なので、Prebuildを使わないプロジェクトには適用されません。設定後はネイティブアプリを再ビルドします。
{
"plugins": [
["expo-build-properties", { "ios": { "enableSceneSupport": true } }]
]
}
Expo Go 56がストアにない理由とSDK別の入手方法
Expo Goは、1つのビルドに1つのSDK版しか入っていません。プロジェクトのexpoの版とExpo GoのSDK版が一致しないと、「Project is incompatible with this version of Expo Go」と表示されて開けません。App Storeの更新履歴では、SDK 54向けの54.0.2(2025年9月23日)の次が57.0.9(2026年9月2日)です。つまりSDK 55と56向けのExpo Goは、App Storeに一度も出ていません。Google Play版も現在は57.0.9です。
| テスト環境 | SDK 56のプロジェクトを開く方法 |
|---|---|
| iPhone・iPad実機 | eas goで自前のExpo Goを作りTestFlightへ |
| Android実機・エミュレーター | Expo CLIかexpo.dev/goから56向けを入れる |
| iOSシミュレーター | Expo CLIかexpo.dev/goから56向けを入れる |
| どの環境でも | 開発ビルド(expo-dev-client)を作る |
eas goを使うにはApple Developer Programの会員登録が必要です。Windowsで開発していてMacがない場合の選択肢は、WindowsでiOSアプリを開発する方法にまとめています。
App Store版のExpo Go(SDK 57)では、ターミナルのExpo CLIとアプリの両方で、同じExpoアカウントにログインする必要があります(2026年9月3日告知)。ターミナル側のnpx expo loginを忘れていると、QRコードを読んでもログインを求めるメッセージが出て、プロジェクトは読み込まれません。この要件はシミュレーター版と開発ビルドには適用されず、Android版も現時点では対象外です。
ストア版Expo Goは、SDK 58の安定版が出ると間もなく58に切り替わり、57には対応しなくなります。業務アプリの開発にExpo Goを使っていると、そのたびに動作確認が止まります。ExpoもExpo Goを学習用のツールと位置づけ、本番アプリには開発ビルドを勧めています。Expo Go・開発ビルド・EASの役割の違いはExpo(React Native)とはで比較しています。
SDK 55・56から最新版へ上げる手順
今のSDKは、package.jsonのexpoの版で決まります。npm ls expoで実際に入っている版も確認できます(56.0.22なら SDK 56)。公式は1版ずつ上げることを推奨しています。55から57へ上げる場合も、56を挟むと問題の出どころを切り分けやすくなります。SDK 57の公式対応表ではNode.jsの最低版が22.13.xなので、57への更新前に開発マシンとCIのNode.jsも確認してください。
# 1. 56へ(55から上げる場合)
npx expo install expo@^56.0.0 --fix
npx expo-doctor@latest
npx expo-codemod sdk-56-expo-router-react-navigation-replace src
# 2. 57へ
npx expo install expo@^57.0.0 --fix
npx expo-doctor@latest
コマンドのあとは、ネイティブ側を作り直します。Continuous Native Generationを使っているなら、古いSDKで生成したandroidとiosのディレクトリを削除します。次にnpx expo run:iosやnpx expo prebuild、EAS Buildを実行したときに作り直されます。使っていないなら、npx pod-installを実行し、Native project upgrade helperの差分を手で当てます。expo-dev-clientで開発ビルドを使っている場合は、上げたあとに開発ビルドを作り直さないと古いネイティブ側のまま動きます。
expo-doctorは、SDK 56からexpo-routerとreact-navigationの同時インストールも警告するようになりました。警告が出たら、上の対応表で置き換えが済んでいるかを確認します。EAS Updateを使うアプリでは、Hermesバイトコードの差分配信(bsdiff)がSDK 56から既定で有効です。公式発表直前の24時間にEAS Updateが配信した差分Hermesバンドルは、対応する完全版バンドルより平均58%小さかったと報告されていますが、自前の更新サーバーを使っていて差分配信に対応していない場合は、app.jsonのupdatesで"enableBsdiffPatchSupport": falseを指定して無効にします。
SDK 58ベータとアップグレードの判断基準
SDK 58のベータは2026年9月15日に始まりました(SDK 58ベータの公式告知)。期間は3〜4週間の予定で、React Native 0.88(ベータ時点ではRC)とReact 19.3を採用します。iOS 27向けに作られており、シーンベースのライフサイクル、Siriから操作できるApp Intents、Androidのホーム画面ウィジェットなどが入ります。
一方で、破壊的変更は56より多くなります。React Native 0.87でStrict TypeScript APIが既定になり、react-native/Libraries/*からの深いimportは型エラーになります。InteractionManagerやModalのanimated propも削除されます。Node.jsは22.13以上(22系)、24.3以上(24系)、または26以降が必要で、23や25のような奇数版は対象外です。
判断は次のとおりです。
- SDK 56を使っている:Node.jsを22.13以上にそろえたうえで、すぐ57へ上げます。変更はReact Nativeのマイナー更新程度で、メモリ回帰の修正は57にしか入っていません。56に留まる理由はほぼありません。
- SDK 55以前を使っている:まず56へ上げ、React Navigationのimportとfile-systemの非同期化を片付けてから57へ進みます。58の安定版を待つと、56・57・58の変更を一度に抱えることになります。
- Xcode 27でiOS 27向けに出す必要がある:58の安定版を待つか、57.0.23以降で
enableSceneSupportを有効にします。ベータのまま本番に出すのは、公式が可能としていても避けたほうが無難です。 - SDK 54に留まっている:重大な修正の提供は次のSDKのリリースまでです。58の安定版が出る前に、55以降へ上げる計画を立ててください。
SDK 56・57はどちらもReact 19.2です。React側の新機能はReact 19.2の新機能総まとめで確認できます。
よくある質問
Expo SDK 56のリリース日はいつですか?
2026年5月21日です(npmの[email protected]の公開はUTCで5月20日)。ベータは5月上旬から配布されていました。後継のSDK 57は2026年6月30日に公開されています。
Expo SDK 56のReact NativeとNode.jsの版はいくつですか?
React Native 0.85(現在の同梱版は0.85.3)とReact 19.2.3です。React Native 0.85はNode.js v20.19.4より前の版をサポートしないため、開発マシンとCIのNode.jsをそれ以上にそろえてください。
App StoreのExpo GoでSDK 56のプロジェクトが開けないのはなぜですか?
ストア版Expo GoがSDK 57に対応していて、SDK 56向けはストアに出ていないためです。iPhone実機で開くには、eas goで自前のExpo GoをTestFlightに配布するか、開発ビルドを作ってください。プロジェクトをSDK 57へ上げる方法でも解決できます。
useHermesV1をfalseにすればメモリ増加は避けられますか?
旧Hermesに戻すことはできますが、buildReactNativeFromSourceをtrueにする必要があり、ビルド時間が大きく延びます。メモリ回帰はSDK 57([email protected]以降)で修正されているので、57へ上げるほうが負担は小さくなります。
Expo SDK 58の安定版はいつ出ますか?
日付は発表されていません。公式は、2026年9月15日からのベータ期間を3〜4週間とし、React Native 0.88の正式版が出た後に安定版を出すと説明しています。