ClaudeReact Native2023/06/21 0:00

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

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

元記事

Quick Digest

要約

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

claudejamodel: claude-sonnet-4-20250514

React Native 0.72 - シンボリックリンクサポート、エラー改善など

Key Points

  • シンボリックリンクとPackage Exportsのベータサポート
  • 無効スタイルプロパティのredbox廃止
  • Hermesのコンパイル速度97%向上

Summary

React Native 0.72がリリースされ、Metroの新機能、エラーハンドリングの改善、開発者体験の向上が含まれています。

Key Points

新しいMetro機能

  • シンボリックリンクサポート(ベータ版): monorepoセットアップやpnpmとの透過的な連携が可能
  • Package Exportsサポート(ベータ版): 新しい「react-native」コミュニティ条件をサポート
  • metro.config.js設定の更新: 新しい設定フォーマットが必要(0.73で必須化予定)

開発者体験の改善

  • 無効なスタイルプロパティでのredbox廃止: ブラウザのCSS同様にサイレント失敗に変更
  • Hermesエラーメッセージの改善: より読みやすいエラー表示
  • React Native CLIの改善: v11で重複削除、文言明確化、詳細スタックトレース削減
  • Hermesのコンパイル・JSON解析高速化: 大きなオブジェクトリテラルで97%高速化

破壊的変更

  • 非推奨コンポーネントの削除: Slider、DatePickerIOS、ProgressViewIOSをコミュニティパッケージに移行
  • パッケージ名変更: @react-nativeスコープ下に統一

Full Translation

翻訳

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

claudejamodel: claude-sonnet-4-20250514

React Native 0.72 - Symlink サポート、エラー改善、その他

本日、0.72をリリースします!このリリースでは、Metroの高い要望があった機能、より良いエラーハンドリング、その他の開発者体験の改善が追加されています。この作業の多くは、2022年コミュニティサーベイからのフィードバックを優先して行われました。参加していただいた皆様、ありがとうございました!

ハイライト

新しいMetro機能

Symlinkサポート(ベータ版)

Symlinkサポートは、Metroで最も要望の多い機能の一つであり続けており、React Native 0.72では、ベータサポートを発表できることを嬉しく思います。Symlinkサポートにより、React Nativeはmonorepoセットアップやpnpmと透過的に動作し、回避策の必要性を取り除きます。

アプリで使用するには、Enabling Beta Featuresを参照してください。現在は様々なワークフローでの開発者体験に関するフィードバックを収集するためにベータ版となっています。詳細はこちらをご覧ください。0.73でsymlinksをデフォルトで有効にする予定です。

Package Exportsサポート(ベータ版)

Package Exportsは、package.jsonの"main"フィールドの現代的な代替手段であり、npmパッケージがパブリックAPIを定義し、React Nativeをターゲットにするための新しい機能を提供します。Metro configでPackage Exportsサポートを有効にすることで、新しい"react-native"コミュニティ条件を含む、より広い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 0.72では、React Native CLIでのMetroの設定読み込みセットアップを変更しました。プロジェクトのmetro.config.jsファイルをテンプレートのバージョンに合わせて更新してください。

情報: 設定ファイルを以下の形式に更新してください。upgrade-helperも参照できます。metro.config.jsのこれらの形式変更は0.73で必須になります。0.72では、更新されていない場合に警告をログ出力します。

これにより、ベースのReact Native Metro設定を拡張する制御がプロジェクトに移り、残っていたデフォルト設定をクリーンアップしました。さらに、metro get-dependenciesなどのスタンドアロンMetro CLIコマンドが動作するようになります。

開発者体験の改善

無効なスタイルプロパティでの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の変更履歴をご覧ください。

Hermesでのより高速なコンパイルとJSONパース

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

JSONパースに対する複数の最適化(de9c6e2d)も実装され、redux-persistのようなJSON操作に大きく依存するライブラリを使用するアプリに恩恵をもたらします。

HermesでのECMAScriptサポートの拡張

React Native 0.72では、Hermesで以下の仕様のサポートが実装されました:

  • ArrayTypedArrayStringprototype.atサポート。#823ebe2)を参照
  • 不正なUnicode文字列を防ぐwell-formed JSON.stringifyの実装(d41d
  • 単一のエラーにラップされた複数のエラーを表すAggregateErrorの実装(9b25)。Promise.any()で渡されたすべてのpromiseが拒否された場合などの複数のエラーに有用

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

New Architectureアップデートの移動

New Architectureは現在実験的です。アップデートをターゲットオーディエンスに焦点を当てるため、0.72および今後のリリースでは、New Architectureアップデートを専用ワーキンググループに移動しています。この変更により、nightlyで出荷される作業など、より頻繁なアップデートも可能になります。

0.72のNew Architectureアップデートはこちらで読むことができます。

New Architectureの進捗について最新情報を得るには、ワーキンググループのGitHub通知を購読してください。

破壊的変更

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

以下のパッケージは0.72でReact Nativeから削除されました。推奨されるコミュニティパッケージに移行してください:

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

パッケージ名の変更

react-nativeコアリポジトリから公開されるすべてのパッケージは、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リリースでサポートされます。

情報: 0.72は現在React Nativeの最新安定版であり、0.69.xバージョンはサポート対象外になりました。詳細については、React Nativeのサポートポリシーを参照してください。

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