なぜFlutterか

otihateten.hatenablog.com

記事の感想。というかそこから思考したとりとめのない内容。正直SwiftUI触ったことないしAndroidの記憶もおぼろげになってきたしなんならFlutterも半年近く業務で関わってない上で書く。

現在のサービス開発はミニマムスタートならPWAで十分で、それじゃ叶えられない機能を持たせるためにネイティブアプリを検討する。その場合そういった難易度の高い機能を開発するなら最終的にswift/kotlinで書いたコードをブリッジして呼び出すことになりやすい。つまり技術的な理由からネイティブアプリによる開発を決めた場合は最初からswift/kotlinで開発するほう効率良いかもしれない。

ただしそれはios/android開発でそれぞれ2名以上(同じ人がios/android両方見るのでも可)の開発者を用意できるプロジェクトの場合で、それよりも小規模な場合はFlutterによって開発を共通化した方がリスクヘッジしやすい。小規模でios/androidを別々に開発しようとするとそれぞれ1名ずつアサインする場合が多くその開発者がやめて開発停滞したりPRレビューしづらかったり弊害が大きい。swift/kotlinの箇所を極力減らすことでチームに分断が起きにくくなる。

これらは新規プロダクト開発についてで、元記事にある通り既存のアプリをリプレースする程のメリットはFlutterには現状ない。また意思決定者がなんとなくネイティブアプリが良いという理由でアプリ開発する場合もある。この場合はまずガワネイティブを、続いてFlutterによる開発を検討する。

人材面も元記事に同意でios/android未経験のFlutter開発者は正直厳しい。ネックになるのは2点でOS固有の事情を知らないことと、宣言的UI・状態管理の知見。もしFlutter実務未経験者を入れる場合は前者はもうどうにもならないので後者の経験を重視する。Flutterを独学で触ってるかどうかよりもReactやVue.jsなど最近のJSフレームワーク・ライブラリでの宣言的UI・状態管理経験の方が重要。

ここまではFlutterに限らずreact-nativeにも共通する話。Flutterに限った話だと開発体験はかなり優れてる。自分はvscodeメインだったがsetupや普段の開発でつまずくことがほとんどなくこれまでのネイティブ共通フレームワークの中では一番開発体験が良かった。Xcode/Android Studioによるネイティブ開発に近い不便のなさで開発できた。dartが微妙と言われればそうだしFlutter独特の書き味もなんとも言えないんだがまあphpの$みたいなもんで慣れかなと思う。

Flutterだとアプリのクオリティが落ちるというのは良くわからない。あまり気にしたことなかったけど自分が突き詰められてないから知らないだけかもしれない。コンポーネントのアニメーション等細かい点のこなれてなさみたいなのは感じたことあるが、一般ユーザが気にするレベルの差は感じられなかった。 Flutterのデメリットって上記の機能面や人材に関する部分のみで開発や性能にそこまでデメリット無いと思っている。iosでもandroidでも。一番の問題はやっぱり人材。

今後も新規案件でのFlutter採用は増加していくし部分的にFlutterを導入するユースケースも増えていくと思う。swift/kotlinは次のパラダイムシフトが起こってスマートフォンがレガシーになったときに生き残れるかはわからない。もちろんそれはFlutterについてもそうなんだけど、Flutter for Webだったりfusciaだったり可能性の種が多そう。kotlin/swiftもサーバサイドあるけど現実的にはなかなか業務で使う機会がなさそうなイメージ。

Flutterをおすすめするとしたらios/android開発経験者かredux,recoil,vuexとかその辺の状態管理の実務経験者。それ以外の人にはFlutterはおすすめしないかな。それより鉄板のreact系 & TypeScriptをすすめる。

でもキャリアを考えた場合Flutter覚えるのはアプリエンジニアへの最短ルートにはなり得そう。ios/androidエンジニア未経験で実務できるチャンスほぼないけど、プログラマー実務+Flutterの独学ポートフォリオあれば潜り込めるのでは?と思ったり。 まあキャリアアップとか狭苦しく考えずにやりたいことやるのが一番。