オープンソースのロードマップ

今年、React Nativeチームは大規模なReact Nativeの再設計に注力してきました。Sophieが彼女のState of React Nativeの投稿で述べたように、私たちはFacebook以外のReact Nativeユーザーと協力者の活気あるコミュニティをより良くサポートするための計画を練り上げてきました。私たちが取り組んできたことについて、さらに詳しく共有する時が来ました。その前に、オープンソースにおけるReact Nativeの長期的なビジョンを説明したいと思います。
React Nativeに対する私たちのビジョンは…
- 健全なGitHubリポジトリ。 IssueとPull Requestが妥当な期間内に処理されること。
- テストカバレッジの向上。
- Facebookのコードリポジトリから同期されるコミットが、オープンソースのテストを破壊しないこと。
- より大規模で意味のあるコミュニティからのコントリビューション。
- 安定したAPI群。 オープンソースの依存関係との連携が容易になること。
- Facebookがオープンソースと同じ公開APIを使用すること。
- React Nativeのリリースがセマンティックバージョニングに従うこと。
- 活気のあるエコシステム。 コミュニティによって維持される、高品質なViewManager、ネイティブモジュール、および複数のプラットフォームのサポート。
- 優れたドキュメント。 ユーザーが高品質な体験を創造する手助けに焦点を当て、APIリファレンスドキュメントを最新の状態に保つこと。
このビジョンを達成するために、以下の重点分野を特定しました。
✂️ Lean Core
私たちの目標は、非コアで未使用のコンポーネントを削除することで、React Nativeの表面積を減らすことです。非コアコンポーネントは、コミュニティがより速く動けるように、コミュニティに移管します。表面積が減ることで、React Nativeへの貢献の管理が容易になります。
WebViewは、コミュニティに移管したコンポーネントの例です。私たちは、これらのコンポーネントをリポジトリから削除した後も、内部チームがそれらを引き続き使用できるようなワークフローに取り組んでいます。私たちは、コミュニティに所有権を与えるさらに数十のコンポーネントを特定しました。
🎁 内部のオープンソース化と🛠ツール更新
FacebookのプロダクトチームにとってのReact Nativeの開発体験は、オープンソースとはかなり異なる場合があります。オープンソースコミュニティで人気のあるツールはFacebookでは使用されていません。同じ目的を達成する内部ツールがあるかもしれません。場合によっては、FacebookチームはFacebook以外の場所には存在しないツールに慣れてしまっていることもあります。これらの不一致は、今後のアーキテクチャ作業をオープンソース化する際に課題となる可能性があります。
私たちはこれらの社内ツールの一部を公開する作業を進めます。また、オープンソースコミュニティで人気のツールのサポートも改善します。以下は、私たちが取り組むプロジェクトの(すべてではない)リストです。
- JSIをオープンソース化し、コミュニティが独自のJavaScript VMを持ち込み、RNの初期リリースからの既存のJavaScriptCoreを置き換えることを可能にします。JSIが何であるかについては今後の投稿で説明しますが、それまではReact ConfでのParashuramの講演からJSIについて詳しく学ぶことができます。
- Androidでの64ビットライブラリのサポート。
- 新しいアーキテクチャ下でのデバッグを可能にする。
- CocoaPods、Gradle、Maven、および新しいXcodeビルドシステムのサポートを改善する。
✅ テストインフラストラクチャ
Facebookのエンジニアがコードを公開するとき、すべてのテストに合格すれば安全に適用できると考えられています。これらのテストは、変更が独自のReact Nativeの表面を破壊するかどうかを特定します。しかし、FacebookがReact Nativeを使用する方法には違いがあります。これにより、意図せずにオープンソースでReact Nativeを破壊してしまうことがありました。
オープンソースに可能な限り近い環境で実行されるように、内部テストを強化します。これにより、これらのテストを破るコードがオープンソースに公開されるのを防ぐことができます。また、GitHubのコアリポジトリのテストを改善するためのインフラストラクチャも開発し、将来のプルリクエストにテストを簡単に含めることができるようにします。
対象領域の縮小と組み合わせることで、コントリビューターは自信を持ってより迅速にPull Requestをマージできるようになります。
📜 パブリックAPI
意図しない破壊的変更を減らすため、Facebookはオープンソースと同じ方法でパブリックAPIを介してReact Nativeを利用します。これに対処するため、内部の呼び出しサイトの変換を開始しました。私たちの目標は、安定したパブリックAPIに収束し、バージョン1.0でセマンティックバージョニングの採用につながることです。
📣 コミュニケーション
React Nativeは、貢献者の数でGitHubでトップのオープンソースプロジェクトの1つです。私たちはそれを本当に嬉しく思っており、この状態を維持していきたいと考えています。透明性の向上やオープンな議論など、貢献者の参加を促すイニシアチブに引き続き取り組んでいきます。ドキュメントはReact Nativeに初めて触れる人が最初に目にするものですが、これまでは優先事項ではありませんでした。私たちはこれを改善したいと考えており、自動生成されたAPIリファレンスドキュメントの復活、質の高いユーザーエクスペリエンスの作成に焦点を当てた追加コンテンツの作成、そしてリリースノートの改善から始めます。
タイムライン
これらのプロジェクトは、今後1年程度の間に実施する予定です。これらの取り組みの一部はすでに進行中であり、例えばJSIはすでにオープンソースに組み込まれています。一方、表面積の削減など、完了までに少し時間がかかるものもあります。私たちは進捗状況をコミュニティに常に最新の状態で伝えるよう最善を尽くします。このロードマップで議論されているいくつかのイニシアチブの作成につながったReact NativeコミュニティのイニシアチブであるDiscussions and Proposalsリポジトリにご参加ください。