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

React Nativeオープンソースアップデート 2019年6月

·9分で読めます
Christoph Nakazawa
Christoph Nakazawa
元Facebookエンジニア

コードとコミュニティの健全性

過去6ヶ月間で、550人以上の貢献者によってReact Nativeに合計2800のコミットが行われました。コミュニティから400人の貢献者が1,150以上のプルリクエストを作成し、そのうち820のプルリクエストがマージされました。

過去6ヶ月間における1日あたりのプルリクエストの平均数は、Lean Coreの取り組みによってウェブサイト、CLI、および多くのモジュールをReact Nativeから分離したにもかかわらず、3から約6に増加しました。未解決のプルリクエストの平均数は現在25を下回っており、通常は数時間から数日以内に提案とレビューで返信しています。

意味のあるコミュニティ貢献

最近のコントリビューションの中から、私たちが素晴らしいと感じたいくつかをご紹介します。

リーンコア

リーンコアの主な動機は、モジュールをReact Nativeから分離されたリポジトリに分割し、より良いメンテナンスを受けられるようにすることでした。わずか6ヶ月で、WebViewNetInfoAsyncStorageウェブサイトCLIなどのリポジトリは、合計で800以上のプルリクエストを受け取りました。より良いメンテナンスに加えて、これらのプロジェクトはReact Native自体よりも頻繁に独立してリリースできます。

また、React Native自体から時代遅れのポリフィルやレガシーコンポーネントを削除する機会も得ました。以前は、JavaScriptCore(JSC)の古いバージョンでMapSetなどの言語機能をサポートするためにポリフィルが必要でした。React Nativeが新しいバージョンを搭載するようになったため、これらのポリフィルは削除されました。

この作業はまだ進行中であり、ネイティブ側とJavaScript側の両方でさらに多くのものを分割または削除する必要がありますが、サーフェスエリアとアプリサイズの増加傾向を逆転させることができたという初期の兆候があります。たとえば、JavaScriptバンドルを見ると、約1年前のバージョン0.54ではReact Native JavaScriptバンドルサイズは530kbでしたが、わずか6ヶ月でバージョン0.57までに607kb(+77kb)に増加しました。現在、マスターではバンドルサイズが28kb削減され、579kbになっています。これは100kb以上の差です!

リーンコアの取り組みの最初のイテレーションを終えるにあたり、React Nativeに追加される新しいAPIについてより意図的に取り組み、React Nativeをより小さく、より速くする方法を継続的に評価するとともに、コミュニティがさまざまなコンポーネントの所有権を持つことを可能にする方法を見つけるよう努力します。

ユーザーフィードバック

6ヶ月前、私たちはコミュニティに「React Nativeについて嫌いなことは何ですか?」と尋ね、人々が直面している問題の概要を把握することができました。私たちは数ヶ月前にその投稿に返信しました。主要な問題に関してこれまでに達成された進捗をまとめる時期が来ました。

  • アップグレード: React Nativeコミュニティは、アップグレード体験を改善するために複数の取り組みを行いました。オートリンクrn-diff-purgeを介したより良いアップグレードコマンド、アップグレードヘルパーウェブサイト(近日公開)。また、各メジャーリリースごとにブログ記事を公開することで、破壊的変更やエキサイティングな新機能を確実に伝達します。これらの改善の多くは、0.60リリース以降の将来のアップグレードを大幅に容易にするでしょう。
  • サポート / 不確実性: 多くの人々は、プルリクエストの活動不足や、React Nativeに対するFacebookの投資に関する一般的な不確実性に不満を抱いていました。上記で示したように、私たちはさらに多くのプルリクエストを受け入れる準備ができており、皆様の提案と貢献を熱心に楽しみにしていると自信を持って言えます!
  • パフォーマンス: React Native 0.59は、新しいより高速なJavaScriptCore(JSC)バージョンと共にリリースされました。別途、私たちはインラインリクワイヤをデフォルトで有効にすることを容易にするために取り組んでおり、今後数ヶ月でさらにエキサイティングな最新情報をお届けします。
  • ドキュメント: 最近、React Nativeのドキュメントすべてを見直し、書き直す作業を開始しました。貢献を希望される場合は、ぜひお力をお借りしたいです!
  • Xcodeでの警告: 私たちは既存の警告をすべて取り除き、新しい警告を導入しないよう努力しています。
  • ホットリローディング: Reactチームは、まもなくReact Nativeに統合される新しいホットリローディングシステムを構築しています。

残念ながら、まだすべてを改善できたわけではありません。

  • デバッグ: 私たちは、人々が毎日遭遇していた多くの不便なバグや問題を修正しましたが、残念ながら、望むほどこの点で進捗はありませんでした。React Nativeでのデバッグが優れているとは言えず、将来的にはこの改善を優先します。
  • Metro symlinks: 残念ながら、これに対するシンプルで直接的な解決策はまだ実装できていません。しかし、React Nativeユーザーは、様々な回避策を共有しており、それが役立つかもしれません。

過去6ヶ月間の多くの変更を考慮し、同じ質問を再度皆様にしたいと思います。最新バージョンのReact Nativeをご利用で、フィードバックしたいことがあれば、「React Nativeについて嫌いなことは何ですか?」の新しい版にコメントしてください。

継続的インテグレーション

Facebookはすべてのプルリクエストと内部変更をまずFacebookのリポジトリに直接マージし、その後すべてのコミットをGitHubに同期します。Facebookのインフラストラクチャは一般的な継続的インテグレーションサービスとは異なり、すべてのオープンソーステストがFacebook内で実行されているわけではありませんでした。これは、GitHubに同期されるコミットが頻繁にオープンソースのテストを壊し、その修正に多くの時間がかかることを意味していました。

React NativeチームのHéctor Ramosは、過去2ヶ月間、FacebookとGitHubの両方でReact Nativeの継続的インテグレーションシステムを改善しました。現在、ほとんどのオープンソーステストは、FacebookでReact Nativeへの変更がコミットされる前に実行されるようになり、コミットが同期される際にGitHub上のCIが安定した状態を保つことができます。

次へ

React Nativeの未来についての私たちの講演をぜひチェックしてください!今後数ヶ月で、FacebookのReact NativeチームのメンバーがChain ReactReact Native EUで講演します。また、間もなくリリースされる次のバージョン、0.60にも注目してください。きっとエキサイティングなものになるでしょう