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