OpenAIReact Native2023/12/06 0:00

React Native 0.73 - Debugging Improvements, Stable Symlink Support, and more

要点だけを先に読めるように短く再構成したセクションです。

元記事

Quick Digest

要約

要点だけを先に読めるように短く再構成したセクションです。

openaijamodel: gpt-5-mini-2025-08-07

React Native 0.73 リリース:デバッグ改善・シンボリックリンク安定化・Bridgeless Mode など

Key Points

  • Hermesでコンソール履歴をキャプチャ
  • Metroでシンボリックリンク既定有効化
  • Bridgeless Modeを実験導入

Summary

React Native 0.73 が公開されました。Hermes によるデバッグ改善、Metro のシンボリックリンク解決が既定で有効化、Android 14 対応、Android テンプレートの Kotlin 化、New Architecture の一部である Bridgeless Mode(実験)などを含みます。破壊的変更や非推奨項目が複数あるため、アップグレード前に確認してください。

Key Points

  • Hermes のコンソール履歴:console.log() をバックグラウンドでキャプチャし、デバッガ接続時に過去ログを表示(Flipper / Chrome / 新しい実験的デバッガ 対応)。
  • 新しい実験的デバッガ:技術プレビューを提供。起動が速く、Chrome DevTools ベースの軽量 UI。既知の問題あり。
  • Metro のシンボリックリンク:symlink 解決がデフォルトで有効。モノレポ利用時は watchFolders の設定を確認すること。
  • Android 関連:Android 14 (API 34) をサポート。Android Gradle Plugin が 8.1 系に上がり、Java 17 がビルド要件に(例: brew install --cask zulu@17JAVA_HOME 更新)。
  • Kotlin テンプレート:Android のテンプレートが Java から Kotlin に移行。既存の .java は Android Studio の変換機能で .kt に変換可能。
  • New Architecture(Bridgeless Mode):ブリッジを作成しない Bridgeless Mode を実験的に導入。Native Module Interop Layer により既存モジュールとの互換性を支援。
  • 非推奨/削除:ネイティブの Flipper 統合は段階的に削除予定。Remote JavaScript Debugging は Dev Menu から削除(必要なら NativeDevSettings 経由で手動有効化)。Hermes を推奨。
  • 破壊的変更:Babel パッケージ名変更(@react-native/babel-preset@react-native/metro-babel-transformer)、Node.js >= 18、テンプレートの TypeScript 5.0、iOS 最小 13.4、Metro の Xcode 自動起動無効化 等。

Upgrade checklist

  • Upgrade Helper で差分を確認する
  • Java を 17 に更新し JAVA_HOME を設定する(AGP 8.1 対応)
  • Babel パッケージ名を更新(@react-native/babel-preset 等)
  • Node.js を 18 にアップグレードする
  • モノレポでは watchFolders を適切に設定する
  • Flipper / Remote Debug の移行計画を立てる
  • 新機能(Bridgeless)を試す場合は互換性を検証し、問題は New Architecture ワーキンググループへ報告する

Full Translation

翻訳

原文の流れを保ったまま読める翻訳セクションです。

openaijamodel: gpt-5-mini-2025-08-07

React Native 0.73 — デバッグ改善、安定したシンボリックリンクサポート、その他

Today we're releasing React Native 0.73! このリリースでは、Hermes を使ったデバッグ体験の改善、Metro の安定したシンボリックリンク(symlink)サポート、Android 14 対応、および新しい実験的機能を追加しています。旧来のデバッグ機能の非推奨化も行い、新アーキテクチャの次の柱である Bridgeless Mode(ブリッジなしモード)を公開します。

ハイライト

  • デバッグの改善
  • Metro の安定したシンボリックリンクサポート
  • Android 向け Kotlin テンプレート
  • Android 14 サポート
  • New Architecture の更新
  • 非推奨となったデバッグ機能

デバッグの改善

React Native チームと Hermes チームは、React Native におけるデバッグ体験の改善に取り組んでいます。0.73 では、この継続的な投資から初期の進捗をいくつか提供します。

コンソールログの履歴(Hermes)

console.log() は開発者が JavaScript コードを素早くデバッグするためによく使う方法です。従来のリリースでは、React Native アプリ内のコンソールログはデバッガが接続されるまで記録されないことがあり、アプリロード直後に発生するログの観察が困難でした。React Native 0.73 ではこの問題を解決しました。Hermes はバックグラウンドですべての console.log() 呼び出しをキャプチャし、デバッガが初めて接続されたときに Console タブへ送信します — これはウェブブラウザでのデバッグ体験と同様の挙動です。

この新しい挙動は Flipper、Hermes に接続した Chrome DevTools、および実験的な New Debugger で動作します。

デバッグドキュメントの更新

ドキュメントの「Debugging」セクションを刷新しました。サポートされているデバッガへの接続方法、React DevTools に関する情報、視覚資料の更新を含みます。

実験的な New Debugger

React Native チームは Flipper に代わる新しい JavaScript デバッガ体験に取り組んでおり、React Native 0.73 で Technical Preview を提供します。新しいデバッガはすぐに起動し、Hermes を用いて React Native をデバッグするためにカスタマイズされたシンプルな Chrome DevTools UI を特徴としています。

注: 新しいデバッガは実験的であり、既知の問題があります。これらは将来のリリースで解決に取り組んでいます。試用する場合は、同じディスカッションスレッドでフィードバックを報告してください。ドキュメントでこの体験の有効化方法を確認してください。


Metro における安定したシンボリックリンクサポート

Metro での symlink 解決サポートがデフォルトで有効になりました。シンボリックリンクのサポートにより、watchFolders を設定したモノレポ構成で React Native を利用できるようになります。シンボリックリンクは Metro の内部で深く表現されており、Fast Refresh などの機能と連携し、バンドル中の性能オーバーヘッドは小さいです。シンボリックリンクは Watchman の有無にかかわらず、すべてのデスクトッププラットフォームでサポートされています。

Info: モノレポに関する回避策

モノレポレイアウトで React Native を使用する際にいくつかのエッジケースが残っていることは認識しています。0.73 に間に合わなかった課題に対処する作業を計画しており、できるだけ早く提供することを目指しています。

  • React Native テンプレートプロジェクト(npx react-native init)では、Metro がそれらを検出するために、プロジェクトルート外の watchFolders を構成する必要があります(詳細参照)。
  • react-native 依存が別レベルのフォルダにインストールされている場合、ファイルパスの更新が必要になることがあります。
  • Expo アプリでは、Yarn (Classic) Workspaces のサポートがデフォルトで設定されています。Expo ドキュメントの "Work with monorepos" ガイドも参照してください。

Android の Kotlin テンプレート

0.73 から、Android アプリ向けの推奨言語が Java から Kotlin に変わりました。これは Android エコシステムの方向性に沿ったもので、モダンな言語でアプリを書けるようにします。React Native の Android テンプレートを Java から Kotlin に更新しました。新しい MainActivity.kt と MainApplication.kt はサイズが約 36% 小さくなっています。

Upgrade Helper も .java ファイルから .kt ファイルへの移行を容易にするよう更新されています。プロジェクト内の Java ファイルを以前に変更していて Kotlin への移行をサポートが必要な場合は、Android Studio の Code > Convert Java file to Kotlin File ユーティリティ(ショートカット: Cmd ⌘ + Shift ⇧ + Option ⌥ + K)を利用できます。


Android 14 サポート

React Native を更新し、Android 14 を完全にサポートするようになりました。0.73 から、React Native 開発者は最新の Android SDK バージョン(API Level 34, Upside Down Cake)をターゲットにできます。

Java 17 とAndroid Gradle Plugin のアップグレード

Android 14 をサポートするために、Android アプリをビルドするために使用する Android Gradle Plugin (AGP) を 7.4.x から 8.1.x に更新しました。この AGP のメジャーバージョン上げには一連の破壊的変更が伴い、Google のリリースノート(8.0.0 と 8.1.0)を参照してください。最も重要なのは、Android アプリのビルドに Java 17 が必要になったことです。Java のバージョンを 17 に更新するには次のコマンドを実行してください:

brew install --cask zulu@17

その後、Getting Started ガイドに従って JAVA_HOME を更新してください。

ライブラリ開発者であれば、ライブラリは変更なしで React Native 0.73 と動作するはずです。今年初めに、AGP のバンプがライブラリ作者にとって何を意味するかについての注記を公開しました。

写真・動画への部分的アクセス権付与

Selected Photos Access により、Android 14 ユーザーはアプリにメディアライブラリのすべてではなく特定の項目へのアクセスを許可できます。0.73 では、PermissionsAndroid API の READ_MEDIA_VISUAL_USER_SELECTED 権限を使用することで、この機能をサポートします。

Min SDK の引き上げ

React Native 0.73 は Android 5.0(API Level 21)をサポートする最後のバージョンになります。次のバージョンでは最小 SDK バージョンを 23(Android 6.0)に引き上げます。min SDK 引き上げの今後の変更についての詳細はリンク先を参照してください。


New Architecture の更新

New Architecture を OSS コミュニティ全体に提供する展開を継続しています。React Native 0.68 以降、新しいレンダラ(Fabric)と新しいネイティブモジュールシステム(TurboModules)は実験・評価目的で利用可能でした。これまでのフィードバックに感謝します。

本日、New Architecture のもう一つのピースである Bridgeless Mode を公開します。これまで New Architecture を有効にしてもブリッジは古いコンポーネントやモジュールとの後方互換性を保つために残されていましたが、私たちのビジョンはブリッジを完全に廃止することです。React Native 0.73 からは Bridgeless Mode を有効にするとブリッジの作成自体が無効になります。

Bridgeless Mode と共に、Bridgeless Mode 中に既存のモジュールを再利用できる Native Module Interop Layer を提供します。React Native 0.72 で導入した Renderer Interop Layer も Bridgeless Mode に対応するよう適合されています。

New Architecture の他の部分と同様に、Bridgeless Mode は当初は実験的です。興味のある方は有効化して、New Architecture ワーキンググループに問題や互換性の問題を報告してください。


非推奨となったデバッグ機能

Flipper ↔ React Native 統合

デフォルトの React Native デバッグツールとして Flipper から徐々に離れていきます。0.73 では、React Native に含まれるネイティブ Flipper 統合(Flipper のコアプラグインを接続するブートストラップコード)を非推奨にします。次回のリリースでこの統合と依存を削除する予定であり、その結果 Network プラグインなど Flipper の一部は動作しなくなります。

  • 変更なし: ネイティブアプリデバッグのための独立製品としての Flipper は引き続き存在します。将来 React Native の新規プロジェクトから削除された後でも、開発者が希望すれば手動で Flipper をアプリに追加できます。

なぜ Flipper から離れるかの詳細は RFC を参照してください。

Remote JavaScript Debugging

Remote JavaScript Debugging は、外部のウェブブラウザ(Chrome)をアプリに接続し、JavaScript コードをウェブページ(例: http://localhost:8081/debugger-ui )内で実行するレガシーなデバッグモードです。このモデルはデバッグ中にアプリの挙動が一貫しないことを招く可能性があり、New Architecture の下ではネイティブモジュールと互換性がありません。0.73 では Remote JavaScript Debugging を非推奨とし、Dev Menu から削除しました。リモートデバッガを有効にするには、NativeDevSettings API を介して手動で行う必要があります。手順は Other Debugging Methods のドキュメントに記載されています。

Info: Remote JavaScript Debugging は以前 JavaScriptCore (JSC) を使うアプリのデフォルトデバッグ体験でした。iOS アプリでは Safari Developer Tools(JSC による直接デバッグ)を推奨します。すべてのプラットフォームで一貫したデバッグ体験を得るには Hermes の利用を推奨します。


破壊的変更(Breaking Changes)

Babel パッケージ名変更

Metro から 2 つの Babel 関連パッケージを React Native のリポジトリおよびバージョニングに移動しました。これにより保守とアップグレードが簡素化されます。これらの新しいパッケージは 0.73 の New Architecture 機能をサポートするため、依存関係を更新する必要があります。アップグレードの際は Upgrade Helper を参照して依存関係が正しく更新されていることを確認してください。

一部パッケージ名の変更:

  • metro-react-native-babel-preset -> @react-native/babel-preset
  • metro-react-native-babel-transformer -> @react-native/metro-babel-transformer

Info: @react-native/babel-preset には @react-native/babel-plugin-codegen が含まれるようになったため、Babel 設定で別途指定する必要はありません。

その他の主な破壊的変更

以下は 0.73 の主要な破壊的変更の一部です。完全な一覧はフルチェンジログを参照してください。

  • Node.js の最小要件を 18.x に引き上げ(#37709)(Node.js 16 の EOL も参照)。
  • テンプレートは TypeScript 5.0 を使用するようになりました(#36862)。React Native の型は TypeScript 4.8 でも動作を継続します。
  • Android: Android アプリのビルドに Java 17 が必要になりました(上記参照)。
  • Android: Fresco を 3.0 にメジャーアップデート(#38275)。
  • iOS: 最小 iOS バージョンを 13.4 に引き上げ(#36795)。
  • iOS: Xcode を経由したビルド時に Metro が自動で起動されなくなります(#38242)。

ライブラリ作者向け:

  • Android: AGP を 8.1.1 に引き上げ(discussion)。

React Native CLI の変更

ハイライトされた破壊的変更

  • build-android コマンドでのデフォルトタスクプレフィックスを変更。今後 build-android を実行すると assemble の代わりに bundle タスクが実行されます(#1913)。
  • Metro 設定のデフォルトに対するフォールバック flow を削除しました(#1972)。0.72 以降の更新された metro.config.js フォーマットが 0.73 では必須です。
  • run-ios から --configuration オプションを削除(--mode に置き換え)(#2028)。
  • build-android から --variant オプションを削除(--mode に置き換え)(#2026)。

v12.0.0 のフルチェンジログを参照してください。


@types/react-native の非推奨

First-class Support for TypeScript で述べた通り、0.71 以降 react-native に TypeScript 型定義を同梱しており、0.73 で @types/react-native を非推奨にします。既存バージョンに対する将来のパッチは提供しません。@types/react-native からの移行を推奨します。移行手順はドキュメントを参照してください。


謝辞

React Native 0.73 は 68 名のコントリビュータによる 2259 を超えるコミットを含みます。皆さんの貢献に感謝します!


0.73 へのアップグレード

既存プロジェクトの間で React Native バージョン間のコード差分を確認するには React Native Upgrade Helper を使用し、Upgrading ドキュメントも参照してください。新しいプロジェクトを作成するには次を実行します:

npx react-native@latest init MyProject

Expo を使用している場合、React Native 0.73 は Expo SDK 50 のリリースでサポートされます。

Info: 0.73 は現在の最新の安定版であり、0.70.x 系はサポート対象外になります。詳細は React Native のサポートポリシーを参照してください。