本日は2月末とおよそ1ヶ月間Flutterを触ってみたので自分なりの意見をまとめてみようと思う。
正確には今年の1月中旬からさらなるスキルアップとしてFlutterを触っていました。
今回はわかりやすく目次を書いてみようと思います。
- iOSエンジニアから見たFlutterの感想
- Flutterの学習コスト
- 組織でプロダクトとして導入できるかについて
- Flutterが苦手かもしれない分野
- そもそもなぜFlutterの情報発信をしているのか
- 来月以降の学習プラン
この順番でダラダラ文章を書いていきます。
iOSエンジニアから見たFlutterの感想
私のバックボーンが iOS : Android = 8 : 2 、つまりは「iOSエンジニア」側での意見ですが、インデントが深くなってしまうあのコードを見て結構げんなりしていました。最初の印象は可読性が悪そうだなと。それとちょっとした変更でどのカッコから切り取りして移動させるのが迷いそうかなと思いました。
ただ実際にFlutterを書いて見ると、驚くことに、そんなストレスは全くなかったです。ですが、なぜそんなストレスが結果的に発生しないのかが言語化できないです。複数人開発を経験すると実際の可読性について言及できそうですが、その経験がありませんので述べられません。
また、PCスペック的な面でいうとAndroid Stuido でiOSアプリが作れるのはとてもありなので頑張る価値はあるかと。今のXcode 11で16GB使うんですからそれに比べればとても少ない容量で開くことができます。
またAutolayoutが必要なくなるので「(Autolayoutの)制約足りねえよ」エラーの発狂から開放されます。
Flutterの学習コスト
iOSエンジニアにとって関心のある学習コストについてですが、こちらは今のiOSアプリ開発と比べると格段に安いと思いました。私は今日でちょうどFlutter歴は2ヶ月経って、それまでにブログポストは合計20記事くらいです。今の私でなら3画面構成のToDoアプリはサクッと作れる自信があります。
作れそうなアプリでいうと
- ToDoリストアプリ
- RSSアプリ
- カメラアプリ
- クイズアプリ
この辺りでしょうか。
RSSアプリに至っては以前ブログで作り方を投稿しました。
また、RSSアプリでWebViewのウィジェットを使いましたが確認したところFlutterのWebViewはWKWebViewだそうなので、Appleの審査には引っかからないことがわかっています。
また、iOSでいうところのAlertControllerにあたるウィジェットがあるのかは調査していませんが、調査すればレイアウトを組み立てれる自信ならあります。
レイアウトと言っても組み方自体はAndroidと似ているので、Androidのレイアウトが組み立てられるならFlutterの学習コストはほぼゼロかもしれません。また、Flutterでレイアウトを組み立てることに慣れればちょっとしたらいつの間にかAndroid開発ができているかもしれません。
会社組織でプロダクトとして導入できるかどうか
なんとなくこういう項目を作ってみました。
個人開発では今から新規開発するならもうFlutterで十分かなと思っています。
私はサラリーマンで、このブログは会社とは無関係でやってる前提ですが、
会社組織でFlutterをプロダクトとして導入できるかについては最早議論する必要はないと思っています。
既存事業では代わりにはなりませんが、新規事業ならFlutter一択かと。
ネイティブ開発にするとSwift / Kotlin とそれぞれのプラットフォームで別々にエンジニアが必要になるので単純に人件費が2倍ですし、プラットフォーム別にデザインを用意しないといけません。
このプラットフォーム別のデザインというのが開発中盤でも厄介だったりします。というかどこの現場でもこれで結構な工数がかかっているではないかなと。
それと私のキャリアがこれまでiOS歴が長かったのですが、iOSアプリ開発の場合、
そもそもUI設計でも
- コードオンリーでの開発
- storyboardやxibを使った開発
と宗教論争が起こっています。
どちらも一長一短なのでどっちが良いと言った結論がないように見えるのはシンドイように思います。
それとやっぱりAutolayoutが嫌いです。自分が張った成約はもちろん読み取れますが、他人が張った成約を全て把握する作業が地獄でした。これにSizeClassの概念が混じると、可読性が一気に下がります。
FlutterではAndroidと同じアプローチでpaddingやmarginでUIの調整ができるので読みやすいですね。
Flutterが苦手かもしれない分野
- キーボード処理
- background タスク
- アプリ間連携(URLスキーム)
- clipboard (クリップボード)
- AVFoundationなどの音声・動画機能
- Appleがリリースするバグ付きの新機能
OSに関わる部分ばかりですね笑。
そもそもなぜFlutterの情報発信をしているのか
iOSアプリエンジニアが私のファーストキャリアでAndroid歴はちょこっとですが、
Swiftはだいたいできるようになった影響で逆にiOS初心者が躓くポイントがわからなくなりました。そこで将来のiOSアプリエンジニアのためのFlutterの学習ロードマップになれればいいかなと思い続けています。
Flutterの存在は2018年の夏頃に知り合いエンジニアから聞いて知りました。
本当は2019年からこの情報発信を開始する予定でしたが本業忙しすぎて・・・。
当時のFlutterのわたしの感想はこちらの記事にまとめてます。
来月以降の学習プラン
3月以降の学習プランは
- BLoCやproviderといった設計概念
- API連携
- iOSの申請/リリースとAndroidの申請対応
- RxDart
この辺りを集中的に時間リソースを当てていきますので理解できたらブログにアウトプットしていこうと思います。