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

React Nativeチームの原則

·5分で読めます
Eli White
エリ・ホワイト
ソフトウェアエンジニア @ Meta

FacebookのReact Nativeチームは、React Nativeでの作業の優先順位付けを決定する原則に導かれています。これらの原則は、特に当社のチームを表すものであり、React Nativeコミュニティのすべての利害関係者を表すものではありません。私たちは、私たちを動機付け、意思決定を行い、努力を集中させるものについて、より透明性を高めるために、これらの原則をここで共有しています。

ネイティブ体験

React Nativeの最優先事項は、人々が各プラットフォームに抱く期待に応えることです。これが、React Nativeがプラットフォームプリミティブにレンダリングする理由です。私たちは、クロスプラットフォームの一貫性よりもネイティブなルック&フィールを重視します。

たとえば、React NativeのTextInputは、iOSではUITextFieldにレンダリングされます。これにより、パスワードマネージャーやキーボードコントロールとの統合がすぐに機能します。プラットフォームプリミティブを使用することで、React Nativeアプリは、AndroidおよびiOSの新しいリリースからのデザインおよび動作の変更に常に最新の状態を保つことができます。

ネイティブアプリのルック&フィールに合わせるためには、そのパフォーマンスにも合わせる必要があります。これが、私たちが最も野心的な努力を集中する場所です。たとえば、FacebookはHermes、Android上のReact Native用にゼロから構築された新しいJavaScriptエンジンを作成しました。Hermesは、React Nativeアプリの起動時間を大幅に改善します。また、スレッドモデルを最適化し、React Nativeとネイティブコードとの相互運用性を容易にする主要なアーキテクチャ変更にも取り組んでいます。

大規模なスケール

Facebookアプリの数百の画面はReact Nativeで実装されています。Facebookアプリは、非常に多くのデバイスで数十億の人々に使用されています。これが、私たちが大規模な最も困難な問題に投資する理由です。

アプリにReact Nativeを展開することで、小規模では見られない問題を特定できます。たとえば、Facebookは、最新のiPhoneから多くの旧世代のAndroidデバイスまで、幅広いデバイスでパフォーマンスを向上させることに重点を置いています。この焦点が、Hermes、Fabric、TurboModulesなどのアーキテクチャプロジェクトに影響を与えます。

React Nativeが大規模な組織にもスケールできることを証明しました。数百人の開発者が同じアプリに取り組んでいる場合、段階的な採用は必須です。これが、React Nativeを一度に1つの画面で採用できるようにした理由です。まもなく、これをさらに一歩進めて、既存のネイティブ画面の個々のネイティブビューをReact Nativeに移行できるようになります。

大規模なスケールに焦点を当てるということは、私たちのチームが現在取り組んでいない多くのことがあることを意味します。たとえば、私たちのチームは、業界におけるReact Nativeの採用を推進していません。また、大規模では見られない問題に対するソリューションを積極的に構築することもありません。私たちは、コミュニティにとって重要なそれらの分野に焦点を当てることができる多くのパートナーや主要な貢献者がいることを誇りに思っています。

開発者のスピード

優れたユーザーエクスペリエンスは繰り返し作成されます。実行中のアプリでコード変更の結果を確認するには、数秒しかかからないはずです。React Nativeのアーキテクチャは、開発中にほぼ瞬時のフィードバックを提供できるようにします。

React Nativeを採用することで開発者のスピードが大幅に向上したと、チームからよく聞きます。これらのチームは、開発中の即時フィードバックにより、さまざまなアイデアを試したり、ちょっとした変更のたびにコーディングセッションを中断することなく、さらに磨きをかけたりするのがはるかに簡単になると感じています。React Nativeに変更を加える際には、開発者エクスペリエンスのこの品質を維持するようにしています。

即時フィードバックだけがReact Nativeが開発者のスピードを向上させる方法ではありません。チームは、高品質のオープンソースパッケージの急速に成長するエコシステムを活用できます。チームは、Android、iOS、およびWeb間でビジネスロジックを共有することもできます。これにより、更新をより迅速にリリースし、プラットフォームチーム間の組織のサイロを減らすことができます。

あらゆるプラットフォーム

2014年にReact Nativeを導入した際、私たちは「一度学べば、どこでも書ける」というモットーで発表しました。そして、私たちは「どこでも」を意味しています。開発者は、デバイスモデルやオペレーティングシステムに制限されることなく、できるだけ多くの人々にリーチできるべきです。

React Nativeは、モバイル、デスクトップ、ウェブ、TV、VR、ゲーム機など、非常に多様なプラットフォームをターゲットにしています。開発者が最低限の共通点に合わせて構築することを要求するのではなく、各プラットフォームで豊かな体験を可能にしたいと考えています。これを達成するために、各プラットフォームの独自の機能のサポートに焦点を当てています。これは、さまざまな入力メカニズム(例:タッチ、ペン、マウス)から、VRの3D環境のような根本的に異なる消費体験にまで及びます。

この原則は、React Nativeの新しいコアアーキテクチャをクロスプラットフォームのC++で実装し、プラットフォーム間のパリティを促進するという私たちの決定を裏付けました。また、MicrosoftのWindowsやmacOSなど、他のプラットフォームメンテナーを対象とした公開インターフェースも改良しています。あらゆるプラットフォームがReact Nativeをサポートできるように努めています。

宣言型UI

私たちは、すべてのプラットフォームでまったく同じユーザーインターフェースを展開するのではなく、同じ宣言型プログラミングモデルで各プラットフォームのユニークな機能を公開することを信じています。私たちの宣言型プログラミングモデルはReactです。

私たちの経験では、Reactによって普及した一方向のデータフローは、アプリケーションを理解しやすくします。私たちは、画面を命令的に管理されたビューとしてではなく、宣言型コンポーネントの構成として表現することを好みます。ReactのWebでの成功と、新しいネイティブAndroidおよびiOSフレームワークの方向性は、業界も宣言型UIを採用していることを示しています。

Reactは宣言型ユーザーインターフェースを普及させました。しかし、Reactだけが解決できる未解決の問題が依然として多く残っています。React Nativeは、Reactの革新の上に構築し続け、宣言型ユーザーインターフェースの動きの最前線に立ち続けます。