React Nativeオープンソースアップデート 2019年3月
2018年第4四半期に、React Nativeオープンソースコミュニティへの投資を増やすことを決定した後、React Nativeオープンソースロードマップを発表しました。
最初のマイルストーンとして、私たちはコミュニティの最も目に見える側面の特定と改善に注力しました。目標は、未解決のプルリクエストの削減、プロジェクトの表面積の削減、主要なユーザー問題の特定、コミュニティ管理のためのガイドラインの確立でした。
過去2ヶ月間で、私たちは予想以上の進歩を遂げました。詳細については、以下をお読みください。
プルリクエスト
健全なコミュニティを構築するためには、コード貢献に迅速に対応する必要があります。過去数年間、コミュニティからの貢献レビューを優先せず、280件のプルリクエスト(2018年12月)を蓄積していました。最初のマイルストーンでは、未解決のプルリクエストの数を約65件にまで減らしました。同時に、1日あたりの平均プルリクエスト開設数は3.5件から7件に増加し、これは過去3か月で約600件のプルリクエストを処理したことを意味します。
プルリクエストのほぼ3分の2をマージし、3分の1をクローズしました。これらは、陳腐化しているか、品質が低いか、またはプロジェクトの表面積を不必要に増加させる場合に、マージされずにクローズされました。マージされたプルリクエストのほとんどは、バグの修正、クロスプラットフォームの同等性の改善、または新機能の導入でした。特筆すべき貢献としては、型安全性の向上と、AndroidXをサポートするための継続的な作業が挙げられます。
Facebookでは、React Nativeをmasterから実行しているため、すべての変更はReact Nativeリリースに組み込まれる前に最初にテストされます。マージされたすべてのプルリクエストのうち、問題を引き起こしたのはわずか6件でした。そのうち4件は内部開発にのみ影響し、2件はリリース候補の段階で捕捉されました。
より目立つコミュニティ貢献の1つは、更新された「RedBox」画面でした。これは、コミュニティが開発者エクスペリエンスをより親しみやすいものにしている良い例です。
リーンコア
React Nativeは現在、Facebookであまり使用されていない、多くのメンテナンスされていない抽象化を持つ非常に広い表面積を持っています。私たちはReact Nativeをより小さくし、Facebookであまり使用されていない抽象化をコミュニティがより適切に管理できるようにするために、表面積を削減することに取り組んでいます。
最初のマイルストーンでは、Lean Coreプロジェクトでコミュニティに協力を求めました。その反応は圧倒的で、すべての進捗状況にほとんど追いつけないほどでした。1か月未満で完了したすべての作業をチェックしてください!
私たちが最も興奮しているのは、メンテナーたちが長年の問題を修正し、テストを追加し、長く要望されていた機能をサポートするために飛び込んできたことです。これらのモジュールは、React Native内でこれまで以上にサポートを受けており、これはコミュニティにとって大きな一歩であることを示しています。そのようなプロジェクトの例としては、抽出以来多くのプルリクエストを受け取ったWebViewや、現在コミュニティのメンバーによってメンテナンスされており、必要な改善と修正を多く受けたCLIがあります。
主要なユーザー問題
12月に、コミュニティにReact Nativeについて嫌いな点を尋ねました。私たちはその回答を集計し、すべての問題に回答しました。幸いなことに、私たちのコミュニティが直面する問題の多くは、Facebookでも問題となっています。次のマイルストーンでは、主要な問題のいくつかに取り組む予定です。
最も多くの票を集めた問題の1つは、React Nativeの新しいバージョンにアップグレードする際の開発者エクスペリエンスでした。残念ながら、これは私たちがReact Nativeをmasterから実行しているため、私たちが経験することではありません。幸いなことに、コミュニティのメンバーがすでにこの問題に対処するために立ち上がっています。
- CallstackのMichał Pierzchałaは、内部でrn-diff-purgeを使用することで、react-native upgradeを改善しました。また、古いアップグレード手順を削除するためにウェブサイトを更新しました。
- iOSプロジェクトではデフォルトでCocoaPodsを推奨する予定です。これにより、React Nativeのアップグレード時のプロジェクトファイルの変動が減少します。Lean Coreのコンテキストでは、プロジェクトがデフォルトでより多くのモジュールをリンクすることを期待しているため、これは人々がサードパーティモジュールをインストールしてリンクすることをより容易にします。
0.59リリース
React Nativeコミュニティ、特にMike GrabowskiとLorenzo Sciandraの協力がなければ、私たちはリリースを出荷することはできませんでした。リリース管理プロセスを改善し、今後より積極的に関与していく予定です。
- 各メジャーリリースごとにブログ記事を作成するためにコミュニティメンバーと協力します。
- 新しいバージョンにアップグレードする際に、破壊的変更をCLIに直接表示します。
- リリースにかかる時間を短縮します。自動テストを増やす方法や、改善された手動テスト計画を作成する方法を検討しています。
これらの計画の多くは、今後のReact Native 0.59リリースに組み込まれる予定です。0.59には、React Hooks、Android用の新しい64ビット版JavaScriptCore、そして多くのパフォーマンスと機能の改善が搭載されます。現在、リリース候補として公開されており、今後2週間以内に安定版になる予定です。
次のステップ
今後2か月間、私たちは順調に進むようプルリクエストの管理を継続し、同時に未解決のGitHubイシューの削減を開始します。Lean Coreプロジェクトを通じてReact Nativeの表面積を削減し続けます。主要なコミュニティ問題のうち5つに取り組む予定です。コミュニティガイドラインを最終決定するにつれて、ウェブサイトとドキュメントに注意を向けます。
3月には、これらの取り組みのいくつかを進めるために、Facebookロンドンでコミュニティから10人以上の貢献者を招き、大変嬉しく思っています。React Nativeをご利用いただきありがとうございます。2019年に私たちが取り組んでいる改善を見て、感じていただけると幸いです。数か月後に別の更新情報を掲載し、その間に皆様のプルリクエストをマージしていきます!⚛️✌️