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

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

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

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

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

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

有意義なコミュニティ貢献

素晴らしいと思った最近の貢献をいくつか紹介します。

リーンコア

Lean Coreの主な動機は、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)に増加しました。現在、masterブランチではバンドルサイズが28kb減少し579kbになっており、100kb以上のデルタとなっています!

Lean Coreの最初のイテレーションを終えるにあたり、React Nativeに追加される新しいAPIについてはより意図的に取り組み、React Nativeをより小さく、より速くする方法を継続的に評価し、さまざまなコンポーネントのオーナーシップをコミュニティが引き継げるようにする方法を見つけていきます。

ユーザーフィードバック

6ヶ月前、私たちはコミュニティに「React Nativeの何が気に入らないか?」と尋ね、人々が直面している問題の概要を把握しました。私たちは数ヶ月前に投稿に返信しており、上位の問題に対して行われた進捗状況をまとめる時期になりました。

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

残念ながら、まだすべてを改善することはできませんでした。

  • デバッグ:私たちは、人々が日常的に遭遇していた多くの不便なバグや問題を修正しましたが、残念ながら、これについては期待していたほどの進展が見られていません。React Nativeでのデバッグが優れていないことを認識しており、今後、この改善を優先します。
  • Metroシンボリックリンク:残念ながら、これについてはまだシンプルで簡単な解決策を実装できていません。しかし、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にもご期待ください。エキサイティングなものになるでしょう