Flutterの第一印象


Main

今年の1月からFlutterを触り始めた。初めてReact Native以外でモバイルアプリの開発をしている。Flutterに対する第一印象を書いておきたい。ちなみに使ってるSDKバージョンは3.5.X

Developer Experience

Flutterを触り始めてまず感じたのが、DX(開発者体験)への配慮だ。VSCode内でのインスペクターやデバイスの管理、デバッガーなどがデフォルトで用意されている。もちろんホットリロードも使える。

flutter create my_app をしたら、すぐに開発に取り掛かれる。正直vanillaの状態だとReact Nativeと比べものにならないほど良いと思う。RNの場合は、少なくとも僕の開発環境の場合ではExpoにかなり依存していた。

GoogleがSDKの思想をしっかりコントロールしているからなのだろうか、「こう開発してほしい」みたいなのを感じる。だからより多くの機能や拡張性を求めたFlockなどが出てきたのかもしれない。

どちらが良いといった観点からRNと比較しているわけではない。VSCodeからボタンをポチポチしてエミュレーターとビルドを実行することができるが、僕はターミナルから実行している。前者の方がUI的には綺麗だけれども、後者の方が自由があるように感じる。

UI

UIの構築の仕方はRNと大きく異なる。RNはJavaScript Interfaceを使い、RNのコードをネイティブのUIに変換する。FlutterはSkiaという独自のレンダリングエンジンを持っていて、ネイティブのレンダリングロジックに依存しないUIの構築ができる。確かに、FlutterはiOSとAndroidの間のUIの違いが小さいと感じる。

ここは言葉にするのが少し難しい。Flutterの作るUIは軽い感じがある。表面に浮いているような感覚。React NativeはネイティブのUIパーツを使っているので「いつも通り感」みたいなのがある。どっちが良いとかはよくわからない。RNを使って良いUIを作ることもできるし、悪いUIを作ることもできる。Flutterでも同じ。

特にモバイルアプリの開発をしていて思うのが、ユーザーが直接指で触るし、目からの距離も近いので、UIのちょっとした不具合が非常に不愉快に感じるということ。その分、優れたUIを持つアプリを触ると、まるで物理世界に存在するような製品を触っているような気持ちになる。

エコシステム

RNはReact,JSのパッケージを使えるのも魅力の一つだと思う。Flutter(pub)はそれに比べて小さいエコシステムなので、そこが少し心配だったが、珍しい要件を実装したいとかでは無い限り、難なく対応できるほどのエコシステムを持っている。

React/ReduxとRiverpodのように、Reactで覚えたデザインパターンをFlutterに活かせたりするので、RNエンジニアとしてはありがたい。

Widget

Flutterにおいて「全てはWiget」らしい。Wigetを積み重ねてUIを作っていく。宣言的UIの開発には慣れているので、この部分はすぐとっかかれた。デフォルトのWigetしか使ったことはないが、追加で色々なものを使えるらしいがまだ試せていない。

dart

Flutterはdartで書く。去年、AEMのためにJavaを覚えたのが役に立った。シンタックスはほとんどJavaと同じのように思える。型システムも充実していて、読みやすい。C言語系のシンタックスのプログラミング言語には親しみを感じやすい。

Twitterを見ていると、どのプログラミング言語が優れているか論争が起こることがあるが、 僕にはお気に入りのプログラミング言語は無い。

「JavaScriptのここが嫌だなぁ」とかはあるけれども、JSで書かれた優れたソフトウェアが数多く存在するということは、JSは開発に耐えうるプログラミング言語であると言えるだろう。とはいえ、最近Kotlinをやっていて、かっこいい言語だと思う。

まとめ

まだ触り始めて数ヶ月なので、これからもっと知見を深めていきたいと思う。同時に、この初心者のフェーズを楽しみたい。恋人の嫌な部分みたいに、SDKの嫌な部分を見出さないうちに。