React Native 0.70の発表
React Nativeの新バージョン 0.70.0 をリリースできることを嬉しく思います。このバージョンには、Codegenの新しい統合設定、デフォルトエンジンとしてのHermes、Androidビルドの完全なCMakeサポートなど、いくつかの改善が含まれています。また、新しいアーキテクチャのドキュメントも更新されています。詳細については、引き続きお読みください!
セクション
- 新アーキテクチャの新しいドキュメント
- デフォルトエンジンとしてのHermes
- Codegenの新しい統一された設定
- 新アーキテクチャライブラリ向けのAndroid自動リンク
- Androidビルドの完全なCMakeサポート
- 0.70のハイライト
新しいアーキテクチャの新しいドキュメント
過去数ヶ月間、私たちはドキュメントの新しいアーキテクチャセクションにコンテンツを追加する作業を行ってきました。新しいセクションでは、移行ガイド、例、チュートリアルが提供され、迅速に習得できます。
それとともに、新しいアーキテクチャが必要な理由と、そのさまざまな部分を掘り下げた新しいドキュメントもご覧いただけます。これにより、新しいAPIの背後にある根拠をよりよく理解できることを願っています。
フィードバックはいつでも歓迎です。react-native-websiteリポジトリでお知らせください。
Hermesがデフォルトエンジンに
React Native 0.70は、自社製JSエンジンであるHermesがデフォルトで有効になった最初のバージョンです。
これは、HermesチームとReact Nativeチームの協力、そしてコミュニティからの貴重な貢献の結果です。私たちはHermesのパフォーマンスを向上させ、コミュニティから強く要望されていた機能を提供するために改善と調整を行いました。
詳細については、公式発表ブログ記事をご覧ください。
Codegenの新しい統一された構成
0.70では、iOSとAndroidの両方でCodegenスペックを定義する統一された方法が導入されました。以前は、Androidの構成を別のbuild.gradleファイルに記述する必要がありました。
これで、package.jsonに直接定義できるようになりました。
"codegenConfig": {
"name": "CustomAnimationView",
"type": "components",
"jsSrcsDir": "./src",
"android": {
"javaPackageName": "com.custom.animation"
}
}
この改善により、ライブラリメンテナーがコードベースを新しいアーキテクチャに移行する際の一貫性が向上します。
ライブラリメンテナーの方は、React Native New Architectureワーキンググループのこの議論で、そのプロセスがどのように進んでいるかをお知らせください。
新しいアーキテクチャライブラリのAndroid自動リンク
0.70では、新しいアーキテクチャのユーザーは、Android.mkまたはCMakeファイルに追加の設定なしでライブラリを自動的にリンクできるようになりました。
自動リンクは、React Native開発体験の重要な部分です。これにより、CocoaPodsやGradleのセットアップに対処することなく、yarn addコマンドで外部ライブラリを含めることができます。
新しいアーキテクチャでは、Codegenを使用し、ネイティブコードをアプリ開発者に公開するライブラリをサポートするために、自動リンク機能を適合させる必要がありました。
iOSの新しいアーキテクチャライブラリでは自動リンクがうまく機能しましたが、Androidではそうではありませんでした。0.70ではこのギャップを埋め、yarn addでライブラリをプロジェクトに含め続けることができるようになりました。どのアーキテクチャでも正しくリンクされます。
Androidビルドの完全なCMakeサポート
0.70から、ユーザーはCMakeを使用してネイティブビルドを構成できるようになりました。アプリユーザーが直接C++コードを記述することは想定していませんが、ネイティブコンパイルのエントリポイントは依然として必要です。
今後、プロジェクト内のAndroid/ネイティブ関連のすべてにAndroid.mkファイルの代わりにCMakeLists.txtファイルを使用できます。
この変更は、新しいアーキテクチャのアプリユーザーとライブラリユーザーの両方にメリットがあります。
- アプリで作成されるCMakeファイルははるかに小さくなります(3行のコードに対し、Android.mkファイルでは50行以上)。これにより、将来のReact Nativeバージョン間の更新が容易になり、メンテナンスするコードが少なくなります。
- Codegenは
Android.mkとCMakeLists.txtの両方を生成するようになったため、ライブラリは、新しいアーキテクチャライブラリに提供されているデフォルトのセットアップを使用している場合、何も心配する必要はありません。 - 上記の自動リンクは、CMakeファイルとAndroid.mkファイルの両方でそのまま機能します。
- アプリは
Android.mkまたはCMakeファイルのどちらも自由に使用できますが、将来的に推奨されるソリューションはCMakeファイルになります(CMakeに関する優れたドキュメント、ツール、エコシステムのため)。
0.70のハイライト
上記で述べたように、このリリースでのいくつかの重要な改善は、新しいアーキテクチャの体験を中心としています。しかし、他にも注目すべき変更点がありました。
- Catalystの修正がライブになり、Podfileで
mac_catalyst_enabledをtrueに設定します(詳細はアップグレードヘルパーの差分を参照)。 - metroを0.72.0にバンプし、新しいReact JSX Transformを有効にします:reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html。
reactnativeutilsjniを削除しました。これはreactnativejniと同じソースからビルドされるため、Android APKビルドごとに約220KBが節約されます。(https://github.com/facebook/react-native/pull/34339)。
破壊的変更
いくつかの破壊的変更もありました。
- react-nativeパッケージからjest/preprocessorを削除しました(0301cb285b by @motiz88)
- 非標準の
Promise.prototype.doneを削除しました(018d5cf985 by @motiz88)
また、Metroのバージョンが0.72にバンプされ、5つの破壊的変更が含まれていることにも注意してください。
アップグレード
そして、いくつかの依存関係をアップグレードしました。
- RN CLIをv9.0.0にバンプ
- Android Gradle Pluginを7.2.1にバンプ
- Gradleを7.5.1にバンプ
- RCT-Follyを2021-07-22にバンプ
- Metroを0.72にバンプ
- SoLoaderを0.10.4にバンプ
変更点の全リストはチェンジログで確認できます。
謝辞
493コミットを持つ88人の貢献者の方々が、このリリースを可能にするために協力してくれました。皆さんに感謝します!また、このリリースが可能な限り安定するようにフィードバックを提供してくださったすべての方々にも感謝いたします。



