OpenAIReact Native2023/06/21 0:00

React Native 0.72 - Symlink Support, Better Errors, and more

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

元記事

Quick Digest

要約

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

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

React Native 0.72 リリース — Symlink サポート、エラー改善など

Key Points

  • symlink ベータ
  • metro.config 更新必須
  • 廃止コンポーネント移行

Summary

React Native 0.72 がリリースされました。主な変更点は Metro の機能追加(symlink と package exports のベータ対応)、metro.config.js の新しい読み込みフォーマット、Hermes と CLI のエラー出力改善、ビルドとJSON処理の高速化、そしていくつかの破壊的変更(コンポーネント削除・パッケージ名のリネーム)です。新アーキテクチャ関連の更新は作業グループに移行され、今後はそちらで追跡します。

Key Points

  • Metro
    • symlink サポート(ベータ):モノレポ / pnpm に対応。0.73 でデフォルト有効予定。
    • package exports サポート(ベータ):resolver.unstable_enablePackageExports を有効にすると modern package exports に対応。
    • 0.72 で metro.config.js の読み込み形式が変更。0.73 で必須になるため、テンプレートに合わせて更新。
  • 開発者体験
    • 無効なスタイルプロパティは redbox ではなく無視される挙動に変更。
    • Hermes のエラーメッセージと LogBox のスタックトレースが改善。
    • Hermes の大きなオブジェクトリテラルと JSON パースが高速化。
  • 破壊的変更と移行
    • Slider / DatePickerIOS / ProgressViewIOS はコアから削除。各コミュニティパッケージへ移行。
    • 複数パッケージが @react-native/* スコープへリネーム。直接依存がある場合はバージョンを ~0.72 に更新。
  • 実務的な注意点
    • すぐ実施すること:metro.config.js を新テンプレートへ更新、削除されたコンポーネントをコミュニティ版に置換、リネームされたパッケージの依存を更新。
    • ベータ機能は resolver.unstable_enableSymlinks / resolver.unstable_enablePackageExports を使って有効化(metro.config.js に設定)。
    • アップグレード時は upgrade-helper とリリースノートを参照し、Expo 利用者は SDK 49 を確認。

References: upgrade-helper と React Native CLI / Hermes の各 changelog を参照してください。

Full Translation

翻訳

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

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

React Native 0.72 — シンボリックリンクサポート、エラー表示の改善、その他

本日、React Native 0.72をリリースします!

このリリースでは、Metro向けに多く要望されていた機能、エラー処理の改善、その他開発体験(DX)の向上を含みます。これらの多くは2022年のコミュニティ調査でのフィードバックから優先度付けされたものです — ご協力いただいた皆様、ありがとうございます。

ハイライト

  • 新しい Metro 機能
  • 開発体験の改善
  • New Architecture の移動(更新の届け先の変更)
  • Breaking Changes(破壊的変更)
  • 非推奨コンポーネントの削除
  • パッケージ名の変更

New Metro Features

Symlink Support (Beta)

Symlink(シンボリックリンク)サポートはMetroで最も要望の多い機能の一つであり、React Native 0.72ではベータサポートを提供します。これにより、monorepo構成やpnpmといった環境でReact Nativeが透過的に動作し、これまで必要だったワークアラウンドを不要にします。アプリで使うには "Enabling Beta Features" を参照してください。現在はさまざまなワークフローに対する開発体験に関するフィードバックを収集するためベータ段階です。0.73でデフォルト有効化する予定です。

Package Exports Support (Beta)

Package Exportsは package.json の main フィールドの現代的な代替で、npmパッケージが公開APIやReact Native向けのターゲットを定義する新しい機能です。Metro構成でPackage Exportsサポートを有効にすると、アプリは新しい "react-native" community condition を含むより広いJavaScriptエコシステムと互換になります。アプリで使うには "Enabling Beta Features" を参照してください。

ヒント: Package Exports Support in React Native を参照して、この機能と安定化の計画について詳しく確認してください。

ベータ機能の有効化方法

プロジェクトでこれらの機能を有効にするには、アプリの metro.config.js を更新し、resolver.unstable_enableSymlinks または resolver.unstable_enablePackageExports オプションを設定します。

const config = {
  // ...
  resolver: {
    unstable_enableSymlinks: true,
    unstable_enablePackageExports: true,
  },
};

新しい metro.config.js のセットアップ

React Native CLI内のMetroの設定読み込み方法を0.72で変更しました。プロジェクトの metro.config.js をテンプレートのバージョンに合わせて更新してください。

info: 以下のフォーマットにconfigファイルを更新してください。アップグレードには upgrade-helper に従うこともできます。これらの metro.config.js のフォーマット変更は0.73で必須になります。0.72では更新していない場合に警告を出します。

この変更により、base React Native Metro config の拡張方法をプロジェクト側で制御できるようになり、残されたデフォルト設定を整理しました。加えて、metro get-dependencies のような独立した Metro CLI コマンドも正常に動作するようになります。

Developer Experience Improvements

無効なスタイルプロパティで赤いエラー画面(redbox)が出なくなりました

以前は StyleSheet に無効なスタイルプロパティを与えるとredboxが表示され、高信号のエラーとして開発フローを中断していました。0.72では、この挙動をブラウザの無効なCSSプロパティと同様にサイレントに失敗するように緩和し、一部のエラーは実行時ではなく型チェック時に検出できるように型定義を更新しました。

Hermes のエラー可読性の向上

Hermesは、未定義の呼び出し可能を呼ぼうとした際によりわかりやすいエラーメッセージを追加しました。

var x = undefined;
x();
// Before: undefined is not a function
// After: x is not a function (it is undefined)

さらに、LogBox のスタックトレースからアプリ利用者にとって関係の薄い内部の Hermes バイトコードフレームをフィルタリングするようになりました。

React Native CLI のエラー出力の改善

0.72には React Native CLI v11 が同梱され、initrun-androidrun-ios などのコマンドで重複の削減、文言の明確化、冗長なスタックトレースの縮小、関連ドキュメントへのディープリンク追加などの改善が含まれています。その他の改善点は React Native CLI の changelogs を参照してください。

Hermes における高速化(コンパイルとJSONパース)

Hermesは大きなオブジェクトリテラルのコンパイル時間を改善しました。例えば、ある報告(#852)ではデータセット全体が大きなオブジェクトリテラルとして書かれており、Hermesが使用する重複除去アルゴリズムを改善することでコンパイルが97%高速化されました(221c)。これらの改善は多くのオブジェクトをバンドルするアプリのビルド時間に有益です。

JSONパースにも複数の最適化(de9c、6e2d)が入り、redux-persist のようにJSON操作を多用するライブラリを使うアプリに恩恵があります。

Hermes の ECMAScript サポート拡張

以下の仕様サポートがHermesに導入されました(React Native 0.72):

  • Array.prototype.at / TypedArray / String.prototype.at のサポート(see #823、ebe2)
  • 正しく整形された JSON.stringify の実装(d41d)により不正なUnicode文字列を防止
  • AggregateError の実装(9b25) — Promise.any() のように複数のエラーをまとめて表現するために有用

JSC を使っているユーザーにとっては、これらの機能はすでに利用可能です。

Moving New Architecture Updates

New Architecture は現在実験的です。対象となるユーザーにフォーカスした更新にするため、0.72以降の New Architecture に関する更新は専用の working group に移動します。この変更により、nightlyでリリースされる作業のような、より頻繁な更新を行いやすくなります。0.72 の New Architecture に関する更新内容は こちら で読めます。New Architecture の進捗を追いたい場合は、working group の GitHub 通知を購読してください。

Breaking Changes

非推奨コンポーネントの削除

以下のパッケージは React Native 0.72 から削除されました。推奨される community パッケージへ移行してください。

  • Slider@react-native-community/slider に置き換えられました
  • DatePickerIOS@react-native-community/datetimepicker に置き換えられました
  • ProgressViewIOS@react-native-community/progress-view に置き換えられました

パッケージ名の変更

react-native core リポジトリから公開されているすべてのパッケージは現在 react-native/packages 配下に移動し、所有権を明確にするために @react-native npm スコープで公開されます。react-native パッケージ自体に変更はありません。

変更に該当するパッケージは以下の通りです(旧名 → 新名):

  • @react-native-community/eslint-config@react-native/eslint-config
  • @react-native-community/eslint-plugin@react-native/eslint-plugin
  • @react-native/polyfills@react-native/js-polyfills
  • @react-native/normalize-color@react-native/normalize-colors
  • @react-native/assets@react-native/assets-registry
  • react-native-codegen@react-native/codegen
  • react-native-gradle-plugin@react-native/gradle-plugin

この変更は、これらの名前を直接依存関係として持っていない場合は影響しません。影響がある場合は、React Native 0.72 にアップグレードする際にリネームされた依存関係を ~0.72 バージョンに更新してください。これらの変更に至った動機は専用の RFC を参照してください。

謝辞

多くの改善はコミュニティからの直接のフィードバックに基づいています。ノイジーな redbox の報告、Package Exports に関するバグ、New Architecture のベンチマークなど、すべて貴重なフィードバックでした。0.72 には66名のコントリビュータによる1100件以上のコミットが含まれています。皆さんのおかげで成り立っています、ありがとうございます。

0.72 へのアップグレード

アップグレードに必要な変更の一覧は upgrade-helper を確認するか、既存プロジェクトの更新方法についてはアップグレードドキュメントを参照してください。新規プロジェクトを作成するには次を実行します:

npx react-native@latest init MyProject

Expoを使用している場合、React Native 0.72 は Expo SDK 49 でサポートされます。

info: 0.72 は現在の最新の安定版で、0.69.x 系はサポート対象外になりました。詳細は React Native の support policy を参照してください。