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ファイルははるかに小さくなります(`Android.mk`ファイルの50行以上に対し、コード3行)。これにより、将来の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ビルドごとに約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にバージョンアップ
変更点の全リストは変更履歴で確認できます。
謝辞
88人のコントリビューターによる493のコミットがこのリリースを可能にしました。皆さん、ありがとうございます!また、このリリースを可能な限り安定させるためにフィードバックをくださった他の方々にも感謝しています。