Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

Flutter楽しいれす

前職の兼ね合いで、一緒になって作りたいサービスを5月から合間見て作っております。

それにはスマホのネイティブアプリが必要だったので、Flutterで作り始めているのですが、これはすごいっすね。ありがとうFlutterを作ってくれたネ申エンジニア。儲かったら334ドルはコミュニティに寄付したい。

初めてiPhoneアプリ+SwiftとAndroidでアプリを作った時、ひとりで全部組んだせいもあって、だいたい半年かかった。Flutterで作ったら概ね3週間で実装できた。スマホアプリを作ったことがなくてゼロベースでやったとしても、1ヶ月半もあればできたと思う。

Flutterだと生産性があがるいくつかの理由

当たり前だけど、iOS / Androidのアプリが1つのコードに共通化できる。そんなことが可能になる時代になるなんて思ってなかった。Flutterのエンジンがどういう理屈かわからないけど、Flutterで実装すると、Xcode / Android Studioのプロジェクト形式にコードを書き出してくれる。Flutterのコアはコードジェネレーターなのだ。コードが共通化できることで、車輪の再発明がなくなった。使用するライブラリのメンテナンスコストが下がった。iOSAndroidで別々に管理しなくて良くなったからだ。

状態管理も楽になった。Androidの場合はActivityやFragmentのライフサイクルに気を使ったりして面倒だったり、iOSもViewdidLoad/ Appear系の関数をうまく使って状態管理をしていた(そういうコードを書いてしまったのだ)が、Flutterになると原則「StatelessWidget + Provider」でやっていけるので、コードの記述量も減った。

何よりも嬉しいのは、豊富なWidgetがあること、ビューがコードで書けること。iOSのStoryboardや、Androidのlayout_xx.xmlとか面倒くさいだけだったな・・・と噛み締める。iOSの場合は、共通化したいViewはxibファイルを作って、親となるViewControllerでaddSubviewしてからのイベントハンドリングはdelegeteかまして任意の誰かにイベントハンドラを実装させて・・・みたいなコードを頑張って書いたが、Flutterの場合はWidget作って返すだけ。カスタムセルとかレイアウトもGridからColumn/Row、スクロールなども簡素化できた。ネストが深くなるけどね。状態が変更されたらWidgetがリビルドされることで、モデルのデータに沿ったビューが簡単に実装できるのも良い。

ネイティブだと、ビューの癖が強いのも生産性を下げる一因だったんだと思いました。iOSのUITableViewとかは、複数のオーバーライドしないといけなかったり、セルをカスタムする場合はカスタムセルのXib作って、AutoLayoutで制約与えて(これから解放されたのもでかい)... そうなんですよ、iOSってビューを作るのがだるいんですよ。Flutterになって、ビューを作るのが楽しくなった。全部コードで組めるからだと思う。

Flutterが重くなるとすればビルドしまくることなんだろうな... あまり想像できないけど。

リーチ一発Flutterでいけるか?

いけると思う。XCodeで開発したことがなくても、FlutterのWidgetのライフサイクルや、BuildContextの思想などをある程度理解できれば良い。AndroidiOSのビューのライフサイクルに熟知しないと作れないことはないかな。問題があるとしたら、Flutterでジェネレートしたネイティブのコードに対する修正が必要な場合だけど、よっぽどのことがない限りないと思う...

今後スマホのネイティブアプリを新規に作るとしたら、Flutterが良いですよ。はい。