ENECHANGE Developer Blog

ENECHANGE開発者ブログ

Flutter採用理由とFlutterで開発してみて

引き続き、EV充電サービス事業部の@yuyasatです。

前回は、EV充電サービスアプリ開発経緯についてご紹介いたしました。今回は、ネイティブアプリ開発にあたってなぜFlutterを採用したのか、Flutterを採用してみてどうだったのかというのを紹介したいと思います。

なぜFlutterを採用したのか

私はこれまでRailsを軸としながらフロントエンドはVue.js、開発のディレクション、AWSのインフラ周りをさわるなどしながら仕事をしてきました。Webの一連の技術に関しては詳細とまではいかないまでも大まかな概要はつかんできたなという実感があったので、2018年ごろ、プライベートで少しだけAndroidアプリの開発をKotlinで行っていました。その当時はプライベートで知見を広げるため程度での開発でしたが、Webと比べたらビルドにかかる時間も長いですし、iOSとAndroidをそれぞれ対応しないといいけないとなると、iOSアプリはSwiftで、AndroidアプリはKotlinで開発という形となり、スピード感をもって開発するのが難しいという印象を持ちました。クロスプラットフォーム開発では、当時はReactNativeやXamarinなどがありましたが、周りに話を聞くと結局はiOS、Androidそれぞれ開発しているという現場もあり、決定打に欠ける印象をもっていました。加えて仕事ではネイティブアプリ開発の機会はありませんでしたので、ネイティブアプリの開発に関してはあまり深く関わることはなくしばらく過ごしていました。

ところが、2021年11月ごろ、弊社でEV充電サービスを立ち上げるにあたり、ネイティブアプリの開発をするということになり、いろいろな理由で私が開発責任者として開発を推進していくことになりました。まず取り組んだのが言語やフレームワークの選定です。これが決定しないとエンジニアを採用するにもどのようなエンジニアを採用すればいいかも決まりません。今回はEV充電サービスの立ち上げということで、できる限り垂直的に立ち上げをすることがビジネス上求められます。また、EV充電というある種のインフラサービスを提供するのですから、iOSだけ、Androidだけといった提供形式も望ましくありません。そこで、クロスプラットフォームで開発できる中からFlutterに目をつけました。他の選択肢については前述の通りです。

Flutterについては、クロスプラットフォーム開発のフレームワークとして度々話題になっていて興味は持っていました。iOS、Androidだけでなくwebにも対応しているというのはとても夢のある話です。Googleが開発しているというのも、信頼ができるものだなと感じました。もともと気にはなっていたものの実際に触れてみる機会なかったので、早速触ってみることにしました。

触ってみたところ、開発中のものをSimulatorで確認することに関してはストレスなくスムーズに導入ができました。また、例えばWidgetを追加したり色やサイズを変更したりしたあとのホットリロードによる反映もはやく、これでiOSとAndroidのクロスプラットフォーム開発ができるなら文句なしなのではと思いました。宣言的UIで実装できるというのも仲良くなれそうという印象を持ちました。

とはいえ、業務でFlutter開発の経験はないので開発が私だけでは心もとないですし、サーバーサイドの開発も進めないといけないことから、リソース面で考えても実際のアプリ開発の大部分は業務委託の方にお願いせざるをえません。そこで、これまでお付き合いのあった企業様や弊社社員の知り合いの会社などさまざまあたっていきました。参画を依頼する面談の中で、経験のあるFlutterエンジニアの方にやろうとしていることをお伝えし、その内容であればFlutterの開発も問題なくできそうというアドバイスもいただき、Flutterで開発を進めることを決定しました。

Flutterで開発してみて

では、実際にFlutterで開発してみてどうだったかを紹介したいと思います。大前提として優秀なエンジニアの方に参画いただけたということが大きいのですが、1月から本格的に開発を開始し、4月中に最初の審査を通すことができたというのは比較的短期間なのではないかと思います。しかもiOS、Androidともにです。やはりFlutterの生産性の高さが大きいのではないかと思います。例えば、開発がiOS、Androidと分かれていればそれぞれの方に対して仕様をお伝えし理解していただく必要がありますが、Flutterであれば一人の方にお伝えするだけですみます。クロスプラットフォーム開発は一つのコードでiOS、Android両方のアプリとして振る舞えるというメリットだけでなく、コミュニケーションコストの面からもメリットが大きいのではないかと思いました。

Flutter開発にあたり課題がまったくなかったかというとそういうわけではありません。使っているライブラリの制限から、デザイナーが実現したいことができなかった部分もありました。今回の場合は機能的にはマストではなかったため実装をあきらめましたが、クリティカルな部分であれば問題となっていたところでした。こうしたことは実際に実装してみないとわからない部分ではありますので、クリティカルな機能に関しては実現可能性については早めに調査しておくことが大切だと感じました。ただしこのあたりのことはFlutterに限らずライブラリを使っていれば起こりうることなので、Flutterの固有の問題ではないかなと思います。

最後に

今回、ネイティブアプリ開発にあたって、Flutterを採用したことは大正解でした。また、個人としてもこのタイミングでアプリ開発の機会を得られ、Flutterの経験をできたこと(だいぶ未熟ではありますが)、ビジネス面でもFlutterを採用してスピード感を持ってリリースまでもっていけたことは非常に良かったのではないかと思います。

Flutterエンジニア募集中!!

引き続きネイティブアプリエンジニアの採用は継続中ですので、Flutterでの自社開発に興味のある方はぜひご連絡ください!日本の電気自動車の未来を一緒につくっていきましょう!

enechange.co.jp