本文へスキップ

新アーキテクチャロールアウトに関するアップデート

7分間の読書
Nicola Corti
Nicola Corti
Metaのソフトウェアエンジニア

皆さん、こんにちは。以前発表したとおり

2022年は、オープンソースにおける新アーキテクチャの年になるでしょう。

まだ新しいReact Nativeアーキテクチャ(FabricレンダラーとTurboModuleシステム)を検討する時間がない場合は、今がまさにその時です!

この取り組みにおいて、誰もが参加できるように、コミュニティと準備したイニシアチブと資料を共有したいと思います。

ワーキンググループ

最近、GitHub上にReact Native新アーキテクチャワーキンググループを立ち上げました。これは、エコシステム全体への新アーキテクチャのロールアウトを調整し、サポートするための、議論のみを目的としたリポジトリです。

このワーキンググループは、コミュニティが出会いアイデアを共有し、新アーキテクチャの採用における課題について議論できる場になると考えています。さらに、透明性を確保するために、このワーキンググループを使用して、より広範なコミュニティと情報を共有し、アップデートを提供していきます。

議論に焦点を当てるために、このワーキンググループは、公開で閲覧可能とし、承認されたユーザーのみに書き込みを制限することにしました。

議論に参加したい場合は、このフォームに記入して、応募するか、議論に貴重な貢献をすると思われる人を推薦することができます。

どなたでも議論への参加を申請できます。

あらゆる議論の場と同様に、他者の意見を尊重し、歓迎することが非常に重要であることを改めて強調したいと思います。まだの場合は、行動規範をお読みください。

移行ガイド

数回のレビューとフィードバックを経て、ついに移行ガイド(旧称:プレイブック)をマージしました。これは新アーキテクチャワーキンググループでご覧いただけます。

この移行ガイドでは、カスタムFabricコンポーネントまたはTurboModuleの作成方法をステップバイステップで説明します。また、既存のアプリやライブラリを新アーキテクチャで使用するように適応する方法も示します。

さらに、ウェブサイトの真新しいアーキテクチャセクションもご確認ください。そこには、React Nativeの内部構造に関する詳細な記事や説明が掲載されています。特にFabricセクションでは、新アーキテクチャにおけるレンダリングパイプラインを理解するのに役立ちます。

最後に、このドキュメント資料に関するフィードバックをワーキンググループで共有していただければ幸いです。私たちは常に開発者の意見を求めており、皆様にとって最も役立つコンテンツを提供したいと考えています。

今後数ヶ月間は、皆様をさらに支援するためのドキュメントの改良と追加に取り組んでいきます。

新アーキテクチャテンプレート

React Native 0.68.0が間もなくリリースされます。このバージョンのReact Nativeは、新しいアプリテンプレートにオプトインスイッチが含まれる最初のバージョンとして、新アーキテクチャのロールアウトにおいて重要なマイルストーンとなります。

つまり、テンプレートの1行を変更するだけで、新アーキテクチャを試すことができるようになります。また、すぐに使用できるように、テンプレートにコメントとドキュメントを豊富に追加しました。これにより、コードの記述量を削減して、新アーキテクチャを採用するのに役立つことを願っています。

今後のリリースでは、テンプレートをさらに合理化し、使いやすくするためにアップデートを継続します。

いずれかのプラットフォームで新アーキテクチャを有効にするには、

  • iOSでは、iosフォルダ内でRCT_NEW_ARCH_ENABLED=1 bundle exec pod installを実行します。
  • Androidでは、どちらか一方の方法でnewArchEnabledプロパティをtrueに設定します。
    • android/gradle.propertiesファイル内の対応する行を変更します。
    • 環境変数ORG_GRADLE_PROJECT_newArchEnabled=trueを設定します。
    • -PnewArchEnabled=trueを使用してGradleを呼び出します。

その後、yarn react-native run-androidまたはrun-iosアプリを実行すると、FabricとTurboModulesが有効な状態で実行されます。

この新しいテンプレートを試していただき、発生した可能性のあるバグや予期しない動作についてご報告ください。過去数ヶ月間、コミュニティからの継続的なフィードバックとテストがなければ、見つけるのが困難だったバグやビルドエラーの修正に努めてきました。

サードパーティライブラリエコシステム

コミュニティは、サードパーティライブラリの作成者とメンテナンス担当者の全面的なサポートなしに、新アーキテクチャに移行することはできません。

これが面倒なプロセスであること、そして古いアーキテクチャと新しいアーキテクチャの両方でユーザーをサポートすることの重要性を理解しています。今後数ヶ月間は、ライブラリ開発者をサポートし、移行を支援することに重点を置きます。

ライブラリ開発者の方は、新アーキテクチャワーキンググループにアップデートを投稿して、ライブラリの状況を知らせてください。これにより、アーリーアダプターを引き付け、ライブラリにブロッカーがあるかどうかを理解するのに役立ちます。

ライブラリユーザーの方は、ここでメッセージを投稿して、ライブラリの移行をリクエストできます。多数のユーザーにとってブロッカーとなるライブラリを特定した場合、メンテナンス担当者に連絡を取り、まだ移行されていない理由を理解しようとします。

最後に、Software Mansionがreact-native-screensの新しいバージョンをリリースしたことをご報告します。これには、両方のアーキテクチャのサポートが含まれています。さらに、彼らはブログ投稿(Introducing Fabric to react-native-screens)で、移行の経緯を説明しています。この事例が、皆様の移行の参考になれば幸いです。

リリース

0.68プレリリースの作業では、昨年後半に定義した改良されたリリースプロセスの多くを実現しました。

0.68では、以下を実現できたことを嬉しく思っています。

  • リリース作業を社内ローテーションにスムーズに移行しました。この多くは、リリースプロセスの改善されたドキュメントによって支えられており、リリースプロセスのバスファクターを削減します。
  • Copilotローテーションを支援するため、パートナーとの議論を開始しました。この取り組みによって、プロセスの透明性が向上し、パートナーがReact Nativeのリリースとエコシステムを支援するための投資先を明確に理解できるようになることを期待しています。
  • コミュニティから複数のリリースサポーターとテスターを受け入れました。 前半にヘルプの呼びかけを行ったところ、多くの方々が手を上げてくださいました!テスターとサポーターからのフィードバックは、特に新しいアーキテクチャに関する重要なバグと回帰の修正に役立ちました。今後のリリースに反映されます。ご登録いただき、リリースのテストにご協力いただいた皆様に感謝申し上げます!

React Native 0.69では、このプロセスをさらに洗練し、理想的には、パートナーがより早期にリリースのシグナルを提供し、コパイロットを受け入れるようにします。いつものように、フィードバックは大歓迎です。リリースのテスターまたはサポーターとして参加したい場合は、こちらからご登録ください

Hermesをデフォルトエンジンにするに向けて

新しいアーキテクチャの展開における重要なポイントの1つは、新しいJavaScriptエンジンであるHermesの採用です。

新しいReact Nativeアーキテクチャでは、Hermesをデフォルトエンジンとして設定します。つまり、新しいドキュメントとテンプレートではHermesが有効になります。

JSC(JavaScript Core)などの他のエンジンもサポートされるように、コミュニティと協力して作業を継続することにご留意ください。ご希望のエンジンを引き続き使用できますが、Hermesを明示的に無効にする必要があります。

Hermesの安定性を向上させるため、Hermesの配布モデルの変更に取り組んでいます。具体的には、HermesのリリースプロセスをReact Nativeのリリースプロセスに近づけることを目指しています。

これにより、完全に互換性のあるバンドルされたJSエンジンを搭載したReact Nativeのバージョンを出荷できます。実行時のクラッシュやHermesの非互換性に対処する必要がなくなり、デバッグや理解が非常に困難になります。

さらに、これにより、Hermesの改善とバグ修正を取り込むサイクルが短縮され、React Nativeユーザーのニーズにより迅速に対応できるようになります。

この件については、今後数か月でさらに情報を共有します。それまでの間、ワーキンググループで議論に参加することを歓迎します。

まだHermesを試していない場合は、今が試す絶好の機会です。また、発生する可能性のある問題や障害を必ず報告してください。

これで以上です。

このブログ投稿のレビューと、これらの取り組みへの貴重な貢献をしてくださったAndrei、Aleksandar、Dmitry、Eli、Luna、Héctor、Neilに感謝いたします。

そして、皆様の移行に関するストーリーをお待ちしております。