本日、React Native 0.84のリリースを発表できることを嬉しく思います!このリリースでは、Hermes V1がデフォルトのJavaScriptエンジンとなり、すべてのReact Nativeアプリに大幅なパフォーマンス向上をもたらします。また、iOSとAndroidの両方でLegacy Architectureの削除を継続し、デフォルトでプリコンパイル済みiOSバイナリを提供しています。
ハイライト
- Hermes V1がデフォルトに
- iOSでプリコンパイル済みバイナリがデフォルトに
- Legacy Architectureコンポーネントの削除
- Node.js 22が最小要件に
Hermes V1がデフォルトに
Hermes V1は、React Native 0.82での初期実験的オプトインに続き、現在iOSとAndroidの両方でReact NativeのデフォルトのJavaScriptエンジンとなりました。Hermes V1は、Hermesエンジンの次の進化を表し、コンパイラとVMの両方に大幅な改善を加え、測定可能なJavaScriptパフォーマンスの向上を実現します。
アプリへの影響
- 自動的なパフォーマンス向上: すべてのアプリがデフォルトでHermes V1を使用し、実行速度の向上とメモリ使用量の削減をもたらします。
- 移行不要: すでにHermes(0.70以降のデフォルト)を使用している場合、自動的にHermes V1を取得できます。設定変更は不要です。
Hermes V1からのオプトアウト
パッケージマネージャーのオーバーライド
package.jsonでlegacy hermes-compilerパッケージのインストールを強制します:
npm
"overrides": {
"hermes-compiler": "0.15.0"
}
yarn
"resolutions": {
"hermes-compiler": "0.15.0"
}
pnpm
"pnpm": {
"overrides": {
"hermes-compiler": "0.15.0"
}
}
iOS
CocoaPodsの依存関係をインストールする際、RCT_HERMES_V1_ENABLED=0とRCT_USE_PREBUILT_RNCORE=0環境変数を渡します。
Android
android/gradle.propertiesファイル内にhermesV1Enabled=falseを追加し、React Nativeをソースからビルドするようにアプリケーションを設定します。
iOSでプリコンパイル済みバイナリがデフォルトに
React Native 0.84では、iOSでプリコンパイル済みバイナリがデフォルトで提供されるようになりました。以前はオプトインとして導入されていましたが、プリコンパイル済みバイナリが標準で有効になり、iOSアプリのビルド時間が大幅に短縮されます。これにより、クリーンビルドを行うたびにReact Nativeコアをソースからコンパイルする必要がなくなります。プリコンパイル済みの.xcframeworkバイナリは、pod installの際に自動的にダウンロードされ使用されます。
注意: React Nativeをソースからビルドする必要がある場合(例:Hermes V1からオプトアウトする場合)、podのインストール時にRCT_USE_PREBUILT_RNCORE=0を設定することでプリコンパイル済みバイナリを無効にできます。
Legacy Architectureコンポーネントの削除
0.82で開始された作業(New Architectureを唯一のランタイムオプションにした)に基づき、React Native 0.84ではiOSとAndroidの両方からLegacy Architectureコードの削除を継続しています。RFCで説明されているように、各リリースでいくつかのLegacy Architectureクラスを削除しています。
iOS
0.83では、Legacy Architectureコードをコンパイルから除外する実験的なRCT_REMOVE_LEGACY_ARCHフラグを導入しました。0.84では、これがデフォルトの動作となり、Legacy ArchitectureコードはiOSビルドに含まれなくなり、ビルド時間とアプリサイズの両方が削減されます。
すでにNew Architectureを使用しているアプリでは破損は予想されません。互換性に必要なInterop Layerコードは引き続き配置されています。
iOSでLegacy Architectureコードを再有効化する場合
iOSビルドでLegacy Architectureコードを再有効化する必要がある場合は、ソースからビルドする必要があります。以下のフラグでCocoaPodsの依存関係をインストールしてください:
RCT_USE_PREBUILT_RNCORE=0 RCT_REMOVE_LEGACY_ARCH=0 bundle exec pod install
Android
削除されたLegacy Architectureクラス
このリリースで以下のクラスが削除されました:
- com.facebook.react.LazyReactPackage
- com.facebook.react.bridge.CxxModuleWrapper
- com.facebook.react.bridge.CxxModuleWrapperBase
- com.facebook.react.bridge.CallbackImpl
- com.facebook.react.bridge.NotThreadSafeBridgeIdleDebugListener
- com.facebook.react.bridge.OnBatchCompleteListener
- com.facebook.react.bridge.ReactCxxErrorHandler
- com.facebook.react.bridge.ReactInstanceManagerInspectorTarget
- com.facebook.react.modules.debug.DidJSUpdateUiDuringFrameDetector
- com.facebook.react.devsupport.BridgeDevSupportManager
- com.facebook.react.uimanager.NativeKind
- com.facebook.react.uimanager.debug.NotThreadSafeViewHierarchyUpdateDebugListener
- com.facebook.react.uimanager.layoutanimation.LayoutAnimationController
- com.facebook.react.uimanager.layoutanimation.LayoutAnimationListener
Node.js 22が最小要件に
React Native 0.84では、Node.js v22.11以降が必要です。このバージョンアップにより、React Nativeツールエコシステム全体で最新のJavaScript機能の利用可能性が向上します。
アップグレード前にNode.jsバージョンを更新してください。Nodeバージョンの管理には、nvmやfnmなどのNodeバージョンマネージャーの使用を推奨します。
その他の変更
React 19.2.3
このリリースでは、React 19.2.3をReact Nativeに同期し、Reactチームからの最新の修正と改善が含まれています。
ESLint v9 Flat Config
React NativeのESLint設定がESLint v9 Flat Configをサポートし、プロジェクトで最新のESLintツールを採用しやすくなりました。
プラットフォームサポート
- 画像フォーマット: React Native 0.84では、追加の画像フォーマット(HEICとHEIF)のサポートが含まれ、最新のカメラ出力と画像ライブラリでの作業が容易になります。
- PlatformColor: アニメーション補間と出力範囲でのPlatformColorのテストとサポートが強化されました。
- Androidでのキーボードイベント: Androidで
onKeyDown/onKeyUpサポートが追加され、ハードウェアキーボードとTVリモコンのキーボードイベント処理が可能になりました。
アクセシビリティ
onPressまたはonLongPressハンドラーを持つTextコンポーネントは、アクセシビリティサポートの向上のため自動的にaccessibilityRole="link"を受け取り、スクリーンリーダーがインタラクティブなテキスト要素を適切にアナウンスできるようになります。
Androidでは、リサイクルされたビューのアクセシビリティ状態の問題を修正するための重要な作業が行われ、ビューがリサイクルされる際にisClickableとOnClickListenerの状態が適切にリセットされ、スクリーンリーダーが不正確な状態をアナウンスすることを防ぎます。
URL API改善
URL(hash、host、pathnameなど)に不足していた標準プロパティと、URLSearchParams(get、set、deleteなど)にメソッドを追加し、React NativeのURL実装をWeb標準により近づけました。また、URLSearchParamsの重複エントリの問題も修正されました。
その他の破壊的変更
iOS
ImageResponseObserverCoordinatorでの稀なEXC_BAD_ACCESSクラッシュを、オブザーバーを参照カウントポインターでラップすることで修正しました。これにより、RCTImageオブザーバーAPIのオブジェクト宣言が変更され、react-native-svgなどの依存ライブラリに影響を与える可能性があります。
Android
BridgeDevSupportManagerが削除されました。
C++
JSBigStringが直接jsi::Bufferを実装するようになりました。BigStringBufferの間接参照は削除されました(現在は非推奨)。BigStringBufferを直接サブクラス化または依存するコードは更新が必要な場合があります。
JS
レガシーのPerfとNetworkタブがアプリ内Element Inspectorから削除されました。これらの機能はReact Native DevToolsで利用可能になったためです。
0.84の破壊的変更の完全なリストは、CHANGELOGをご覧ください。
非推奨
このリリースでは2つの非推奨があります:
- ネットワーキング: XHRInterceptorとWebSocketInterceptor APIが非推奨になりました。開発者ツールは代わりにChrome DevTools Protocol(CDP)Networkドメインを使用してください。
- TurboModules: TurboModuleProviderFunctionTypeが非推奨になりました。
謝辞
React Native 0.84には、95人の貢献者による650以上のコミットが含まれています。皆様のご尽力に感謝いたします!
このリリースで重要な貢献をしてくださった方々に特別な感謝を送ります:
- Riccardo Cipolleschi: デフォルトでのプリコンパイル済みiOSバイナリとiOSでのLegacy Architecture削除
- Rob Hogan: Node.js 22バージョンアップ
- Fabrizio Cucci: Androidでのアクセシビリティ改善
- @pipopotamasu: ESLint v9 Flat Configサポート
0.84へのアップグレード
注意: 0.84は現在React Nativeの最新安定版であり、0.81.xはサポート対象外になります。詳細については、React Nativeのサポートポリシーをご覧ください。
アップグレード
既存のプロジェクトについては、React Native Upgrade Helperを使用してReact Nativeバージョン間のコード変更を確認し、アップグレードドキュメントも併せてご利用ください。
💡 新機能: Community CLIプロジェクト向けの実験的なupgrade-react-native AIスキルをお試しください。
新しいプロジェクトの作成
npx @react-native-community/cli@latest init MyProject --version latest
Expo
Expoプロジェクトの場合、React Native 0.84はexpo@canaryリリースの一部として利用可能になります。次のSDKであるSDK 56は、React Nativeの次の安定リリース0.85と共に提供される予定です。