新アーキテクチャの展開に関するアップデート
皆さん、こんにちは。以前のお知らせの通り
2022年はオープンソースにおける新アーキテクチャの年となるでしょう
まだ新しい React Native アーキテクチャ (Fabric Renderer と TurboModule システム) を調べる時間がなかったとしても、今ほど良い時期はありません!
この取り組みに全員が参加できるように、私たちが準備したいくつかのイニシアチブと資料をコミュニティと共有したいと思います。
ワーキンググループ
先日、GitHubにReact Native New Architecture Working Groupを立ち上げました。これは、エコシステム全体に新しいアーキテクチャの展開を調整し、サポートするための「ディスカッションのみ」のリポジトリです。
私たちは、このワーキンググループを、コミュニティが新しいアーキテクチャの採用中に出会い、アイデアを共有し、課題を議論する場として考えています。さらに、このワーキンググループを使用して、透明性を確保するために、より広範なコミュニティと情報と更新を共有する予定です。
議論に焦点を当てるために、このワーキンググループは公開で読み取り可能にし、承認されたユーザーのみが書き込み可能とすることにしました。
会話に参加したい場合は、このフォームに記入して、議論に貴重な貢献をすると思われる人物を応募または推薦できます。
どなたでも会話への参加を申し込むことができます。
他のディスカッションフォーラムと同様に、他者の意見に対して敬意を払い、歓迎することの重要性を改めて強調したいと思います。まだお読みでない場合は、ぜひ行動規範をお読みください。
マイグレーションガイド
何度かレビューとフィードバックを重ねた結果、ついにマイグレーションガイド(旧称「プレイブック」)をマージしました。これは新しいアーキテクチャワーキンググループにあります。
このマイグレーションガイドは、ステップバイステップのアプローチでカスタム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では、以下のことを達成できたことを嬉しく思います。
- 社内ローテーションへのリリース作業の移行に成功しました。これは、リリースプロセスのバスファクターを減らす改善されたドキュメントによって大部分がサポートされています。
- コパイロットローテーションをサポートするためのパートナーとの議論を開始しました。この取り組みにより、プロセスの透明性が向上し、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には、このブログ記事をレビューし、これらの取り組みに貴重な貢献をしてくれたことに感謝します。
そして、皆さんの移行体験談を読むのを楽しみにしています。