雑記 - React Native vs Flutterという不毛な争いに決着をつける(当私比)
公開日時:
*この記事は、独断と偏見に推論を重ね掛けして作成された雑記・スクラップになります。真面目ではありますが、しかし正しさや文章の精巧さは担保しないことをご了承ください。
まずは情報整理として、それぞれのフレームワークがどのようなものかを箇条書きしていきます。 ただしとりあえずそれぞれの比較としての観点を持って整理します。
React Native
- ”Learn once, write anywhere”(一度学べばどこでも書ける)
- JavaScriptで書く
- Metaが開発
- ネイティブUIをラップしている
Flutter
- Googleが開発
- Dart言語で書く
- 独自レンダリングエンジンを使用
- ウィジェットベースのUI構築
この思考のもとになったもの
この思考の出発点となったのは以下のコメントです。
https://github.com/flutter/flutter/issues/170310#issuecomment-2957530656
以下一部抜粋及び意訳したものです。
個人的には、Flutterが本来持っている強みにこそ注力すべきだと思います。
つまり「自前でUIを描画できる力」と「圧倒的に優れた開発体験」です。
思考プロセス
あたりまえですが、FlutterとReact Nativeは完全に同じものではありません。 というわけで、両者の違いを理解し、それぞれの強みを活かすアプローチが求められます。
両方『クロスプラットフォーム』ではあるのですが、それはかなり抽象度の高い比較になると思います。 その視点での議論はまぁそれはそれで大事ではあるのですが、もう少し抽象度を下げて比較してもいいんじゃないのかという気持ちになりました。
というわけでこの二つを比較するときに大事なのはここなのかなぁと思っています。
- React Native : ネイティブUIのラッパーである。
- Flutter : 独自レンダリングエンジンを用いたオリジナルUIである。
まぁFlutterはオリジナルUIとはいってもマテリアルデザイン寄りではあるのですが、原義的にはそのはずです。 ここを判断軸として考えて、あとは趣味だったり仕事だったりの複数の変数を合わせていけばまぁ大体そんなに困らず考えられるのではないかと思います。
- 既存のアプリをクロスプラットフォーム化する必要があるか
- OS間のデザインの多少の差分を許容できるか
- OSごとに最適化されたユーザー体験を届けることを優先したいか・できるか
で、ここまで考えておそらく一般的な集団(主語でか)はOSごとに別々のデザインを行うというのをあまりしないのではないかと思います。 そうなったときに、必然的にFlutterが選ばれるんだろうなぁという気持ちになりました。
個人的な主義主張としてはOSごとにそれに合わせたユーザー体験を提供すべきというのはありますが、 まぁしかし現実問題というやつがあります。僕も悪い大人になってしまった。
またネイティブ最適化されたUIを作りたいならそれはもうネイティブを直接触ったほうがいいんでねぇのという気持ちにも。 ただここで最初に提示した、「JavaScriptで書く」がそれはそれで機能していて、要は複数の言語を学習するコストは意外としんどいのですよね。 なのでそう考えたときにやっぱりReact Nativeも便利なツールになりえます。
あとはもうクロスプラットフォーム、ひいてはフレームワーク全般に言える問題ですが、そのフレームワークに賭けられるかですね。 メンテナンスが終わったら終わりです。まぁその点だけでいえばReact Nativeからネイティブへの移行のしやすさはあるのかなぁと思います。
ここまでの雑記で何が言いたいのかといわれるとつまりすべては要件次第なんだよなぁということかもしれません。
総括 React NativeとFlutter、結局どう選ぶべきか?
React NativeとFlutterは、どちらも「クロスプラットフォーム開発フレームワーク」として語られがちですが、
本質的には「設計思想が異なる別物」であることを理解したほうがいいと思う。
項目 | React Native | Flutter |
---|---|---|
UIの描画 | ネイティブUIのラッパー | 独自レンダリング |
言語 | JavaScript | Dart |
開発元 | Meta | |
デザイン方針 | OSの見た目に寄せる | 独自UIで統一 |
判断のための3つの軸
- 既存のアプリや資産との整合性
- React Nativeはネイティブ資産の活用がしやすい
- OSごとのUI差分を許容できるか
- Flutterは統一された見た目を保ちやすい
- ユーザー体験の最適化をどこまで目指すか
- 本気でネイティブ最適化したいなら、ネイティブ開発も視野に
最後に:選定とは「妥協の取捨選択」である
技術選定というのは、**「何が正しいか」ではなく「今の自分たちにとって何が適しているか」**を見極める作業です。
どの技術にも、それぞれに魅力的な未来像や現実的な強みがあります。
重要なのは、目の前の課題に対してどれが最も合理的な選択かを考えることです。
結局、すべてはプロジェクトの要件次第。
理想と現実のバランスを取りながら、「今、自分たちにとって最善の選択」を重ねていくことが大切だと思います。
みたいな感じで頭の整理がつきました。本当に思考をダダ漏らしただけの雑記ですが、まぁ個人学習のスクラップだと思って見逃していただけると幸いです。
最後に(二回目)。 私は強つよエンジニアの方みたいに言語処理系を実装できるわけでもなければ、DBを作れるわけでもない。 元同僚に言わせるとITユーザーなのでしょう。
ただし、職業エンジニアとしてITユーザーなりの教示をもって今後も活動していければいいかなぁと思っています。 今後ともよろしくお願いいたします。