メインコンテンツへスキップ

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

·5分で読めます
Héctor Ramos
Facebook エンジニア

今年、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が容易にテストを含められるようにします。

対象領域の縮小と組み合わせることで、コントリビューターは自信を持ってより迅速にPull Requestをマージできるようになります。

📜 公開API

意図しない破壊的変更を減らすため、Facebookはオープンソースと同じように公開APIを介してReact Nativeを利用するようになります。これに対処するため、社内の呼び出し箇所の変換を開始しました。私たちの目標は、安定した公開APIに収束させ、バージョン1.0でセマンティックバージョニングを採用することです。

📣 コミュニケーション

React Nativeは、コントリビューター数でGitHubでトップクラスのオープンソースプロジェクトの一つです。これは私たちにとって非常に喜ばしいことであり、この状況を維持したいと考えています。透明性の向上やオープンな議論など、コントリビューターの積極的な関与につながる取り組みを継続していきます。ドキュメントは、React Nativeに初めて触れる人が最初に目にすることの一つですが、これまで優先事項ではありませんでした。私たちはこれを修正したいと考えており、まずは自動生成されるAPIリファレンスドキュメントを復活させ、質の高いユーザー体験の創造に焦点を当てた追加コンテンツを作成し、リリースノートを改善することから始めます。

タイムライン

私たちはこれらのプロジェクトを来年一年ほどで完了させる予定です。これらの取り組みのいくつかは、すでにオープンソースに導入されているJSIのように、すでに進行中です。対象領域の縮小など、完了までにもう少し時間がかかるものもあります。私たちはコミュニティに進捗状況を随時報告できるよう最善を尽くします。React Nativeコミュニティからのイニシアチブであり、このロードマップで議論されているいくつかのイニシアチブの創出につながったDiscussions and Proposalsリポジトリにぜひご参加ください。