私が所属しているCBcloudが展開しているプロダクト、ピックゴーのモバイルアプリはFlutter/Dartを使って開発をしております。
以前からFlutterを使ってモバイルアプリ開発をするのに興味はあったのですが、私はRubyonRailsでバックエンドの開発をする方が多く、モバイル側はモバイルアプリのエンジニアにお願いした方が早いので自分が触る機会はなかなかありませんでした。ただ、あるプロジェクトで簡易的にアプリ側を修正する必要が出てた時にこれぐらいだったら導入として良さそうでは?と思い、「これ、僕がモバイルも修正しますねー!」と勝手に宣言して初めてFlutterアプリへのコミット、そしてリリースをすることができました。
その開発を通して個人的に気付いたFlutter/Dartを使ったモバイルアプリ開発の特徴を書いていきたいと思います。
1: 開発環境(エディタ)を選ばない自由
過去に本当に小さなアプリですが、iOS/Androidのアプリを作ったことがあったのですが、その時の印象としてはiOS、Androidともに開発環境として実質専用のIDEを使う前提になっていてそれ以外の方法で開発するのはかなり厳しい印象がありました。
iOSだとXCode、AndroidだとAdroid Studioですね。
僕は普段Emacsで開発をしているので、それ以外のエディタを使うと途端にiQが10下がるほど開発効率が落ちてしまうのでIDE使うのがかなり苦手だったのですが、FlutterはコマンドラインツールやEmacsで開発していてもほとんどストレスなく開発をすることができました。
ドキュメントもVSCodeやAndroid Stdioでのやり方に合わせてCLIで実行する方法を大体書いてくれているのでほとんど困りませんでした。
僕は自由に失うのをとても嫌うので、開発環境の自由が保障されているFlutterの開発は、これならモバイルアプリ開発をやってもいいな〜と思える物でした。
2: hot reload/restartだけでもFlutterを使う理由になる圧倒的な開発者体験
過去にモバイルアプリの開発をちょっとやった時に苦痛だったのが、書いたコードのフィードバックループの遅さです。
僕はコードを一気に書いて一気に実行してテストするよりも、本当に少しづつ書いて、確認して、直すのフィードバックループを細かく早く何度も回す開発スタイルを好むのすが、iOS/Androidで開発した時にそれを端末にビルド・インストール・起動・確認するのが非常に時間がかかることにものすごいストレスを感じていました。
ただFlutterだと大抵のコードがhot reloadに対応してくれるので書いたコードの変更をすぐに端末に反映して変更内容を確認することができたことに革命的に良い開発者体験を感じました。
UIの修正をする時に、その画面に遷移するのに幾つかの操作が必要の場合、ビルド・インストール・起動の待ち時間だけでなく起動後の画面から修正箇所の画面に移動するのもまた手間だったりするのですが、hot reloadによってその画面を開いた状態でコードの修正をして変更結果を確認できるのは相当開発効率が上がります。
iOS/Androidのネイティブ開発がいまhot reloadに対応しているのかちょっとわかりませんが、もし対応していないのであれば、iOS/Androidの特有の機能を使わないのであればクロスプラットフォーム対応をしなくてもFlutterで開発したいと思わされました。
3. コードを自分で書くだけではなく生成するという文化
APIクライアントやJSONパースして特定のオブジェクトに変換するなど、ボイラープレートとなるようなコードが増えても生産性が落ちないようにそのようなコードは自分で書くのではなく自動生成しようと文化がコミュニティで育っているのが面白いです。
Rubyで普段開発していると言語自体の柔軟性が高いので、コード生成するというよりもコードの実行中にメソッド定義やクラス定義などのボイラプレートなるコードを実行していて開発を効率化しているのですが、Dartは言語自体にはRubyほどの柔軟性はない(出来るべきはないと考えていそう)ので、そもそも定義となるコードを書いたらそのコードを元に生成することで繰り返しの多いコードを書かなくてよくするライブラリが育っていました。
Rubyとは言語体系は全然違いますが、開発者体験をいかに良くするか、楽しくプログラミングするにはどうすればいいかが中心的な価値観になっていそうな点に親しみを覚えてDartという言語自体も少し好きになりました。
終わりに
小さな機能とはいえDart/Flutterのコードを書いてリリースするという経験を積め、しかもコードを書くのが楽しいと思えることができたので、今後もどんどんモバイルアプリの開発にも手を伸ばしていきたいと思います。
CBcloudではDart/Flutterを使ったモバイルアプリ開発をやりたい人を募集しているので、興味があればぜひ採用情報を覗いてみてください。