React Nativeチームの原則
FacebookのReact Nativeチームは、React Nativeにおける作業の優先順位を決定するのに役立つ原則に基づいています。これらの原則は、私たちのチームに特有のものであり、React Nativeコミュニティのすべての利害関係者を代表するものではありません。私たちは、私たちを動かすもの、意思決定の方法、努力の集中方法について、より透明性を高めるために、これらの原則を共有します。
ネイティブ体験
React Nativeの最優先事項は、各プラットフォームに対して人々が抱く期待に応えることです。これが、React Nativeがプラットフォームのプリミティブにレンダリングする理由です。私たちは、クロスプラットフォームの一貫性よりも、ネイティブのルック&フィールを重視します。
たとえば、React NativeのTextInputは、iOSではUITextFieldにレンダリングされます。これにより、パスワードマネージャーやキーボードコントロールとの統合がすぐに機能することが保証されます。プラットフォームプリミティブを使用することで、React Nativeアプリは、AndroidとiOSの新しいリリースによるデザインや動作の変更にも対応できます。
ネイティブアプリのルック&フィールに合わせるためには、そのパフォーマンスにも合わせる必要があります。ここに、私たちの最も野心的な努力が集中しています。たとえば、Facebookは、Android上のReact Native向けにゼロから構築された新しいJavaScriptエンジンであるHermesを開発しました。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を導入した際、私たちは「一度学べば、どこでも書ける(Learn once, write anywhere)」というモットーを掲げました。この「どこでも(anywhere)」には文字通り「どこでも」という意味が込められています。開発者は、デバイスのモデルやオペレーティングシステムに制限されることなく、できるだけ多くの人々にリーチできるべきです。
React Nativeは、モバイル、デスクトップ、ウェブ、TV、VR、ゲーム機など、非常に多様なプラットフォームをターゲットにしています。開発者が最小公倍数のために構築することを要求するのではなく、各プラットフォームで豊富なエクスペリエンスを可能にしたいと考えています。これを実現するために、各プラットフォームの独自の機能のサポートに注力しています。これは、さまざまな入力メカニズム(例:タッチ、ペン、マウス)から、VRの3D環境のような根本的に異なる利用体験にまで及びます。
この原則が、プラットフォーム間のパリティを促進するために、React Nativeの新しいコアアーキテクチャをクロスプラットフォームのC++で実装するという決定に影響を与えました。また、WindowsとmacOSのMicrosoftのような他のプラットフォームメンテナーを対象とした公開インターフェースも改良しています。あらゆるプラットフォームがReact Nativeをサポートできるように努めています。
宣言的UI
私たちは、すべてのプラットフォームでまったく同じユーザーインターフェースをデプロイすることに同意しません。私たちは、同じ宣言型プログラミングモデルで各プラットフォームの独自の機能を公開することを信じています。私たちの宣言型プログラミングモデルはReactです。
私たちの経験では、Reactによって普及した単方向データフローにより、アプリケーションが理解しやすくなります。私たちは、画面を命令的に管理されたビューではなく、宣言型コンポーネントの構成として表現することを好みます。WebにおけるReactの成功と、新しいネイティブAndroidおよびiOSフレームワークの方向性は、業界も宣言型UIを採用していることを示しています。
Reactは宣言型ユーザーインターフェースを普及させました。しかし、Reactが独自に解決できる未解決の問題はまだたくさんあります。React Nativeは、Reactの革新の上に構築し続け、宣言型ユーザーインターフェース運動の最前線に立ち続けます。