GoTheDistance

ござ先輩と言われています。(株) クオリティスタートという会社をやっています。

Flutterに出会ったことで脳汁プシャーになった話

Flutterに出会ってしまったせいで、Flutterを中心に生きていこうと考えている私のポエムでございます。

エンジニアとしての頭打ち感

2016年に35で独立した時はエンジニアとして頭打ちを感じていて、エンジニアとして独立することはあまり考えていなかった。初心者ではないけど、上級者になれないなと感じていた。

エンジニア一本じゃ難しいと考えた時、その隙間を埋める役割はありかなと思った。業務系のシステム導入なら、コンサル〜要件定義の上流工程をやり、開発系なら開発寄りのディレクター。その時々で研修講師。この辺を組み合わせて、今までやってきた。

コードは細々と書いていた。JavaPython、メンテナンスしてるシステム(WPF)やアプリ(iOS / Android)なり、kintoneでjs書いたりWordPressプラグイン開発みたいなやつをチラホラやってた。小規模な受託なら受けていた。個人開発と大差ない。できることをやる関係上、技術スタック・規模・ビジネス対象が似通ってくるので、頭打ち感は残ったままでした。

Flutter…ほう、そんなものが?!

Flutterを知ったのは、この記事だったと思う。

note.com

2019年10月だから、本番導入した国内事例で、かなり初期ではないでしょうか。もし本当にワンソースで生きていけるなら、こんなに素晴らしいことはない。本番導入した会社があることが強く印象に残った。自分もやってみよ、と。

コロナ禍で2020年の春頃に暇があったので、以前納品した社内向けモバイルアプリをflutterで焼き直すことで、検証してみた。本を1冊買ってあとは公式ドキュメントを写経。

結果は、iOSAndroidを両方作るのに3ヶ月弱(iOS2ヶ月、Android1ヶ月)。Flutterは2週間でした。

iOSに苦戦したのは、Storyboard/AutoLayout/Delegate/ARC等に始まるiOS特有の考え方や仕組みが多く、コードを書くよりiOS SDKの癖を掴むまでに時間を要し、最初はやっつけで、書き慣れた所でやっつけを書き直すなどをしたため。 ViewControllerはクセがすごい。iOSに比べるとAndroidはシンプルに感じた。Windowsのデスクトップアプリを作ってるのと大きな差異を感じなかった。画面数は12。

検証を終えて「はい、Flutterはレベチ。やっていき」に変わり、今年の2月に商品カタログ+注文アプリをリリースした。

Flutterの開発体験がレベチだった

3ヶ月と2週間の速度差が生まれる背景は「Flutterの開発体験の完成度」によるものだと思う。

  • ワンソースでマルチプラットフォームに対応できること
  • 提供されるWidgetが豊富にあること
  • DartコードのみでUIレイアウト・スタイルが完結し、可読性が高いこと
  • レイアウトが組みやすく、宣言的UI採用により再利用性が高いこと
  • Hot Reload によって修正点がすぐに確認できること
  • 状態管理の優れたライブラリがあること
  • Dart言語に癖がないこと

Flutterの優れた点は「プラットフォームのSDKの持つだるい部分に触れることなく、アプリケーションのコードに専念できる」に集約できる。

iOS(UIKit)を槍玉に上げてしまうけど、IB+Storyboard+Xibで画面開発をするのに比べると「あれ、こんな簡単に作れてええんか?何か間違ってないか?」と、拍子抜けするぐらいスムースに実装することができた。

AndroidiOSは、原則として手続き型でViewを更新する(ライブラリやSwiftUIなどがあるにせよ)。Viewを構成するパーツはミュータブルで、スタイルや表示内容をプロパティやメソッドを経由して変える方式。

Flutterは宣言的UIを採用しており、Viewはコンストラクタで初期化するのみ。イミュータブルになる。TextWidget(iOSにおけるUILabel)に対してsetTextとかやって、テキストの表示内容を変えることはできない。その代わり、Stateという状態そのものを管理する機構があり、Stateを操作するとViewの更新が走り、Viewが再構築され最新化される。

宣言的UIを採用すると、ViewとStateが分離できる。それが意味することは、状態管理の仕組みによってプロジェクトのアーキテクチャが規定されるってこと。

Flutterは状態管理のライブラリが色々あり、2021年も終わりになってこれでよくねっていうライブラリに落ち着いた感がある。個人的にはRiverpodが好き。色んなデータ保持の仕組みがあり、任意のタイミングでUIが更新でき、Viewの持つライフサイクルに当て込んでUIを更新しなくて良い。人類に必要なものだ。

ワンソースになれば利用するライブラリの数も少なくできる。内部的にはCocoaPodsやGradleで各プラットフォームのライブラリを取得しているけど、そこまでお世話して頂けることにジャンピング土下座。

あと、Dart言語が読みやすい。正確には癖がない。スッと頭に入る。運営元のGoogleも本腰入れて普及活動しているので、プロジェクトが途中で終わる可能性が極めて低そうなのもプラス材料。GoogleWa..いや何でもありません。

Flutterはモバイルアプリを書くのに最もモダンでかつ必要最低限のコードで実装できるフレームワークだと感じ、Flutterが切り開く未来を見てみたいというお気持ちが、すごく強くなった。

サービスデザインやりたいなぁ

Flutterに出会うまでは、データモデリングが好きだと思っていた。他人の書いたER図を見るのが大好き。みなさんが関わるビジネスはER図に全部出てくるし、その人が何を思ってこの設計にしたのか、感想戦をするのも好き。

細かい案件をこなすため、データモデリングができればローコードで秒殺狙いでkintoneやFileMakerに中途半端に手を出した時期もあった。ツールとしてはありだが、パートナーじゃないという結論になった。

Flutterでアプリ開発をやってみると、自分はデータモデリングよりもフロントエンド(もう少し大きく言うとサービスデザイン)が脳汁が出ることを実感した。サービスブループリント的なのを思い描きつつ、ここでこんな人がこんな判断でこんなムーブを決めると意味があるから、それに即したアクションってなにがあってどれがベストかな?を考えて進めていくのは、とてもよい。

プログラミングをそれなりにやっていて、久し振りにフレッシュな感動と共に「これ、面白いな〜!!」と思えたのが、Flutterでした!

Flutterを軸に会社を拡大する…かも

Flutterがマッチする案件や、Flutterでリプレイスする案件は絶対増えます。Flutterで作ったら戻れない。Googleちゃぶ台返して終了するのが最大のリスクではあるが、飲み込む価値がある。オンプレをクラウドに切り替えたら戻れないと同じで、ネィティブアプリ開発で解決しているペインがピンズド。

自分が「これ、面白いやん!」って思うことをやっていきたいし、その面白さを自分以外の人たちと共有して、なおかつ仕事になるなら、すげーいいな。今までひとり法人でぷらぷらしてたけど、Flutterを軸に会社を拡大しようかと思い始めてる。また、それに対応すべく、Flutter BootCamp的なメニューを作り始めてる。UI開発をやったことがある方なら、2週間でそれなりのものが作れる所を目指してる。

旧知の仲のYOUたちには、主にFBメッセンジャーでポツポツご連絡をさせて頂いており、Flutterに興味がある人いたらつないで!と自重せずお願いしています。

このエントリをここまで読んでくれて、私と面識がなくてFlutterにご関心がある方、最近流行りのカジュアル面談でもしましょう。面識ある人は飯でも行こう。1年弱やってますので、多少はお話できると思います。

2022年はFlutterを軸に生きていくことになります。

まふゆのだいぼうけん、はじまりだ!

カジュアル面談とTwitter

twitter.com

meety.net

SQLを学習できるWebサービスを作りました。