🐥
React Nativeが多くのクロスプラットフォームアプリの開発について適しているのではないか、と言う仮説
React Nativeがなぜ多くのアプリ開発にとって最適になりうるか
エンジニアリングリソース
- FlutterではDartという独自言語を用いて実装します。独自の言語なので書ける人がまず少ないです。
- 採用のコストとしては、独自言語、独自プラットフォーム(後述)のため、通常のネイティブエンジニアの採用と同じかそれ以上にコストがかかります
- React Nativeでは、既存のReactフレームワークに乗っかる形で、フレームワークが構成されており、Reactを書いたことがある人であれば開発にとりかかれることは可能です(もちろん、アーキテクチャーやいい設計についての知見は必要です)
- Reactアプリケーションのノウハウやパッケージの多くを使えるのも強いです
UIのカスタマイズ性
- Flutterでは、独自のレンダリングの仕組みを採用しており(Impeller)高速かつ、かなり自由なレンダリングを行うことができます。そのため、世界観を強く意識したアプリや、表現にこだわったモバイルアプリの開発に適しています。
- React NativeではCSSライクなスタイルでカスタマイズするのが中心です。また、Shopifyが提供しているSkiaのパッケージを利用することで、シェーダーを利用したり、図形表現、アニメーションを実現することができます。
- ちなみにSkiaはGoogleがImpellerを採用する前にFlutterに導入されていたレンダリングエンジンです。
保守性
- Flutterでは、主にUIを独自レンダリングで構成するため、iOS/ AndroidライクなUIはそのレンダリングエンジンでそれぞれのプラットフォームを模倣したモジュールが存在します(Cupertinoなど)
- メインOSのUIのトレンドが変わった場合に一気に陳腐化するリスクがあります。
- React nativeでは、javascriptを通じてそれぞれのプラットフォームのUIのAPIを読んでいるため、実際のネイティブコンポーネントを利用することができます。
- そのため、同じコンポーネントのデザインがメジャーアップデートで変わった場合、開発者はアプリをアップデートせずとも、UIを最新に維持することができます
上記の観点を踏まえ
- しばらくはUIを変えない、世界観がしっかりしているアプリの開発はFlutterが向いているが、それを除いた場合ではReact nativeの方が適しているのではないかと思った次第です。
Discussion