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 新しいアーキテクチャワーキンググループ内)で、プロセスの状況をお知らせください。
新しいアーキテクチャライブラリ用の 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
に設定します(詳細については、upgrade-helper の差分を参照してください)。 - metro を 0.72.0 にアップグレードすると、新しい React JSX Transform が有効になります: reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html。
reactnativeutilsjni
はreactnativejni
と同じソースからビルドされるため、すべての Android APK ビルドで約 220 KB が節約されます (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に引き上げました。
変更の全リストはチェンジログで確認できます。
謝辞
88人のコントリビューターによる493件のコミットが、今回のリリースを可能にしました。皆さん、ありがとうございます!また、このリリースが可能な限り安定したものになるようにフィードバックを提供してくださったすべての方々に感謝いたします。