本日、React Native 0.81のリリースを発表できることを嬉しく思います!このバージョンではAndroid 16(API level 36)のサポートが追加され、様々な安定性の改善とバグ修正、そしてプリコンパイルを使用した高速なiOSビルドの実験的サポートが含まれています。
ハイライト
- Android 16サポート
- SafeAreaViewの非推奨化
- コミュニティメンテナンスのJavaScriptCoreサポート
- 実験的なプリコンパイルiOSビルド
ハイライト
Android 16サポート
React Native 0.81でビルドされたAndroidアプリは、デフォルトでAndroid 16(API level 36)をターゲットとするようになります。Googleが以前に発表したように、Android 16ではアプリがエッジツーエッジで表示される必要があり、オプトアウトのサポートはありません。これをサポートするため、以前に発表したとおり、コンポーネントを非推奨とし、より良いエッジツーエッジサポートを提供する代替手段を推奨します。
また、16未満のすべてのサポートされているAndroidバージョンでエッジツーエッジを有効にするかどうかを選択できる新しいgradleプロパティedgeToEdgeEnabledを追加しています。
予測的戻るジェスチャーは、Android 16をターゲットとするアプリでデフォルトで有効になります。BackHandler APIは、ほとんどのユースケースで以前と同様に動作し続けるはずです。ただし、アプリが戻る処理のためのカスタムネイティブコード(onBackPressed()メソッドのオーバーライドなど)に依存している場合は、手動でコードを移行するか、一時的にオプトアウトする必要がある場合があります。アップグレード後は、アプリの戻るナビゲーションを十分にテストしてください。
Googleは現在、向きやサイズの制限に関係なく、大画面デバイスでアダプティブレイアウトをサポートすることをアプリに期待しています。現在はオプトアウトできますが、Android 17の前に大画面でのレスポンシブUIのためにアプリをテストし、更新することをお勧めします。
2025年11月1日から、すべてのGoogle Playアプリ提出は、ネイティブバイナリの16KBページサイズ要件を満たす必要があります。これは、Android 15+デバイスをターゲットとする新しいアプリとアップデートに適用されます。React Nativeはすでに16KBページサイズに準拠しています。すべてのネイティブコードとサードパーティライブラリも準拠していることを確認してください。
Android 16の変更と移行手順の詳細については、discussions-and-proposalsリポジトリのこの投稿を参照してください。
SafeAreaViewの非推奨化
組み込みのコンポーネントは、もともと画面の「セーフエリア」(カメラノッチ、角の丸みなどから離れた場所)にコンテンツを保持するための限定的なiOS専用サポートを提供するように設計されていました。Androidのエッジツーエッジレンダリングとは互換性がなく、パディング以外のカスタマイズは許可されていません。その結果、多くのアプリがreact-native-safe-area-contextなどのより移植性があり柔軟なソリューションを選択しています。
React Native 0.81では、レガシーコンポーネントが非推奨となり、アプリがそれを使用している場合はReact Native DevToolsで警告が表示されます。React Nativeの将来のバージョンで削除される予定です。すべてのプラットフォームでアプリが最高の見た目になるよう、react-native-safe-area-contextまたは類似のライブラリに移行することをお勧めします。
コミュニティメンテナンスのJavaScriptCoreサポート
昨年発表したように、JavaScriptCore(JSC)エンジンのサポートは、React Native自体とは別にリリースされるコミュニティメンテナンスパッケージに移行しました。React Native 0.81では、組み込みバージョンのJavaScriptCoreを削除しています。JavaScriptCoreを必要とするすべてのアプリは、0.81にアップグレードするためにコミュニティパッケージを使用する必要があります。詳細については、インストール手順をお読みください。
この変更は、Hermesを使用しているアプリには影響しません。
実験的なプリコンパイルiOSビルド
React Native 0.81では、React Nativeが主要な依存関係であるプロジェクトでコンパイル時間を最大10倍短縮するプリコンパイルiOSビルドを導入しています。これはExpoとMetaの協力の結果であり、React Native 0.80で以前に出荷した作業を拡張しています。
この機能はまだ実験的ですが、将来のリリースですべてのアプリで有効にすることを期待しています。独自のアプリでプリコンパイルビルドを試したい場合は、pod installを実行する際に以下の環境変数を指定することで有効にできます:
RCT_USE_RN_DEP=1
RCT_USE_PREBUILT_RNCORE=1
bundle exec pod install
このGitHubディスカッションでフィードバックをお寄せください。すでに認識している2つの制限があり、解決に取り組んでいます:
- プリコンパイルビルドでは、React Nativeの内部をデバッグしてステップインすることはできません。React Nativeのプリコンパイル版を使用しながら、独自のネイティブコードをデバッグすることは可能です。
- プリビルドはXcode 26 Betaではサポートされていません。IDEがSwift explicit modulesを有効にしてすべてのターゲットをビルドするためです。Xcode 26でプリコンパイルビルドを使用するには、XcodeプロジェクトでSWIFT_ENABLE_EXPLICIT_MODULESフラグをNOに設定してください。これは今後のパッチリリースで対処します。
この機能の詳細については、Expoの完全なブログ投稿「Precompiled React Native for iOS: Faster builds are coming in 0.81」をお読みください。
破壊的変更
最小Node.jsバージョンを20に引き上げ
React NativeはNode.jsバージョン20.19.4(執筆時点での最新のMaintenance LTSバージョン)以上が必要になりました。React Native 0.81にアップグレードする際に、開発環境やCI環境でNode.jsをアップグレードする必要がある場合があります。
最小Xcodeバージョンを16.1に引き上げ
React NativeはiOSプロジェクトをビルドするためにXcode 16.1以上が必要になりました。React Native 0.81にアップグレードする際に、開発環境やCI環境でXcodeをアップグレードする必要がある場合があります。
Metro: Community CLIプロジェクトでの高度な設定のサポート向上
Metroは、React Native Community CLIプロジェクトのmetro.config.jsファイルで指定された場合、resolveRequestとgetModulesRunBeforeMainModuleオプションを尊重するようになりました。以前は、これらを設定しても効果がありませんでした。metro.config.jsファイルでこれらのオプションにカスタム値がある場合、以前の動作を復元するためにそれらを削除する必要がある場合があります。
キャッチされていないJavaScriptエラーの報告改善
React Native DevToolsは、キャッチされていないJavaScriptエラーの元のメッセージとスタックトレース、エラーの原因(ある場合)、およびコンポーネントによってスローされたエラーのOwner Stackを表示するようになりました。これにより、エラーのデバッグと修正が容易になります。
JavaScriptエラーをバックエンドやサードパーティのエラー報告サービスにログ記録している場合、React Native 0.81にアップグレード後に表示されるログに影響する可能性があります(例:以前はconsole.errorで報告されていたスローされたエラーがより多く表示される可能性があります)。それに応じてバックエンドロジックを更新する必要がある場合があります。
RN_SERIALIZABLE_STATEとC++フラグ
このバージョンのReact Nativeでは、New Architectureのコンポーネントでシリアライズ可能な状態をサポートするためにRN_SERIALIZABLE_STATEという新しいマクロを導入しました。ライブラリ作成者でカスタムCMakeLists.txtファイルがある場合、CMakeLists.txtファイルでこのマクロを指定する必要があります。そうしないと、C++コードのコンパイルが失敗する可能性があります。
これをサポートするために、このマクロとすべての必要なC++フラグを設定するtarget_compile_reactnative_optionsという新しいCMake関数を導入しています。CMakeListsファイルで次のように呼び出すことができます:
target_compile_reactnative_options(myLibraryName PRIVATE)
react-native-screensがこのマクロを設定した例を確認できます。
この変更は、より高度で複雑なライブラリにのみ影響します。ライブラリがcodegenを使用していて、カスタムCMakeファイルがない場合、この変更の影響を受けません。
その他の破壊的変更
このリストには、製品コードに軽微な影響を与える可能性があり、注目に値するその他の破壊的変更が含まれています:
Android
複数のクラスを内部化しました。これらのクラスはパブリックAPIの一部ではなく、アクセスすべきではありません。影響を受けるライブラリにはすでに通知またはパッチを提出しています:
com.facebook.react.fabric.mounting.MountingManager
com.facebook.react.views.text.TextLayoutManager
textAlignVerticalネイティブプロパティをTextAttribute.hからParagraphAttribute.hに移動しました。
textAlignVerticalプロパティは最上位のテキストビュー(段落ビュー)にのみ影響します。しかし、それにもかかわらずテキスト属性プロパティに存在していました。このプラットフォームの制限をより良く反映するために、段落プロパティに移動されました。この変更は、コンポーネントのJS APIには影響しません。C++ Text APIと相互作用するFabricコンポーネントを実装している場合にのみ、この変更の影響を受けます。この変更の影響を受ける場合は、コードでTextAttributes.hをParagraphAttribute.hに置き換えることができます。
0.81の破壊的変更の完全なリストについては、CHANGELOGをお読みください。
謝辞
React Native 0.81には、110人の貢献者による1110以上のコミットが含まれています。すべてのハードワークに感謝します!
このリリースで重要な貢献を行ったコミュニティメンバーに特別な感謝を送りたいと思います:
- Christian Falch:プリコンパイルiOSビルドでの素晴らしい作業
- Mathieu Acthernoene:Androidエッジツーエッジサポートへの重要な貢献
- Enrique López-MañasとAndroid 16統合とSafeAreaView非推奨化のテストを支援してくれた方々
0.81へのアップグレード
既存のプロジェクトについては、React Native Upgrade Helperを使用してReact Nativeバージョン間のコード変更を確認し、アップグレードドキュメントも参照してください。
新しいプロジェクトを作成するには:
npx @react-native-community/cli@latest init MyProject --version latest
Expoを使用している場合、React Native 0.81は今後のExpo SDK 54でReact Nativeのデフォルトバージョンとしてサポートされます。
info
0.81は現在React Nativeの最新安定版であり、0.78.xはサポート対象外になります。詳細については、React Nativeのサポートポリシーを参照してください。