2016年に、iOS/Android対応のアプリケーションを開発してリリースし、メンテナンスコストが非常に高いことから、なかなか他のアプリケーションの開発ができていませんでした。スマホアプリでなくてはならない案件が少なかったせいもあるのですけれども。
2020年初頭にFlutterの存在を知り学習を開始しました。Flutterを使えるようになるまで2ヶ月程度かかりましたが、Flutterを覚えてから「もうFlutter以外でスマホアプリを作らない」と決めました。それぐらい、Flutterとの出会いは衝撃的でした。だるさ爆発のスマホアプリ開発が楽しくなりました。
なにがだるいかと言えば、この2つです。
- iOS / Androidで同じ動きをするプログラムを開発する二度手間。
- UIデザインが面倒
Flutterのすごい所は、Flutterで開発するとiOS / Androidのアプリを各々ビルドできる点です。Flutterで実装すると、Xcode / Android Studioのプロジェクト形式にコードを書き出してくれます。コードが共通化できるますので、簡単に言えば時間が半分になります。使用するライブラリのメンテナンスコストも下がりました。iOSとAndroidで別々に管理しなくて良いからです。
もう1つあるのが、画面デザイン・遷移の設計がクソ面倒なこと。昔はiPhoneしかなく、デバイスのサイズも同じでした。しかし、iPadがでるわ色んなiPhoneが出るわで、異なるデバイスサイズであろうとも同じ見た目を提供するのが大変でした。その後iOSではAutoLayoutやStoryboardが出てきて、AndroidではAndroidのlayout_xx.xmlのように、DPIや画面サイズに応じたレイアウトを切り分ける場合はXMLを切り分けるスタイルになりました。
オレがやりたいのはCSSで言うたら「padding:8px」だけなのに、死ぬほど面倒だなと思ったわけです。
Flutterの素晴らしい所は、ビューを宣言的なコードでひたすら記述できること。iOSの場合は、共通化したいViewはxibファイルを作って、親となるViewControllerでaddSubviewしてからのイベントハンドリングはdelegeteかまして任意の誰かにイベントハンドラを実装させて・・・みたいなコードを頑張って書いたが、Flutterの場合はWidget作って返すだけ。カスタムセルとかレイアウトもGridからColumn/Row、スクロールなども簡素化できました。ビューの癖が強いのも生産性が下がる大きな要因でした。
専門的な話が続きましたが、Flutterを使わない理由はない時代になってきましたし、Flutter以外でスマホのネイティブアプリは一切作る気が有りません。iOSのカスタムアプリケーションも、Flutterで実装しています。