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

React Nativeチームの原則

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

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、およびウェブ間でビジネスロジックを共有することもできます。これにより、更新をより迅速にリリースし、プラットフォームチーム間の組織のサイロを減らすことができます。

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

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

React Nativeは、モバイル、デスクトップ、ウェブ、TV、VR、ゲーム機など、非常に異なるプラットフォームを対象としています。私たちは、開発者が最低共通の分母向けにビルドすることを要求するのではなく、各プラットフォームで豊かなエクスペリエンスを可能にしたいと考えています。これを達成するために、私たちは各プラットフォームのユニークな機能のサポートに焦点を当てています。これには、さまざまな入力メカニズム(例:タッチ、ペン、マウス)から、VRの3D環境のような根本的に異なる消費エクスペリエンスまでが含まれます。

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

宣言型UI

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

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

Reactは宣言型ユーザーインターフェースを普及させました。しかし、Reactが独自に解決できる多くの未解決の問題が残っています。React Nativeは、Reactのイノベーションを基盤とし、宣言型ユーザーインターフェース運動の最前線に立ち続けます。