初めまして!モバイルアプリ開発エンジニアの木村です。
弊社ではストア検索1位の見積・請求書作成アプリ『ジムー』をはじめとする、
モバイルアプリ開発を行っておりまして私は主にアプリの開発を担当しております。
本記事ではFlutterについての説明と初めて導入してみて
気づいたメリット・デメリットについてお伝えできればと思います。
もくじ
はじめに
Flutter導入したきっかけ
自社サービス内で新しくアプリを開発するお話をいただき、
このアプリはAndroidとiOSの両OSでリリースしたいという要件がありました。
今までの開発だとAndroidとiOSをそれぞれネイティブ開発していたのですが
開発期間や保守を考えていく上で1つのソースコードで両OSを開発できる
クロスプラットフォーム開発に着目し、その中でも需要が急速に伸びてきていて
将来性が見込めるFlutterを採用しました。
Flutterの詳細については次章で説明いたします。

Flutterとは?

Googleが提供しているモバイルアプリフレームワークで2018年12月にリリースされました。スマートフォンのアプリ開発に特化しており、開発のしやすさや将来性の高さから
非常に注目されております。
Flutterの優れている点をいくつか紹介いたします。
(1) 対応できる開発環境の多さ(クロスプラットフォーム開発)
Flutterは以下のプラットフォームで動かせるシステムを1つの言語(Dart)で開発することができます。
どのように実現できるかというとFlutterがそれぞれのプラットフォームの開発の差を吸収して役割を担っており、具体的にはDart言語で記載したものをFlutterSDKが
Androidだと「Kotlin、Java」、iOSだと「Swift、Objective-C」に置き換えて動かしてくれています。
この仕組みにより1つの言語(Dart)で複数のプラットフォームで動かすことを実現しています。
そして注目を浴びている理由の1つでもあるのですが
Flutterは対応しているプラットフォームの数が非常に多いです。
他のフレームワークはiOS/Androidの2種類に対応していますが
Flutterは以下の6種類のプラットフォームに対応しています。
■対応しているプラットフォーム
- Android
- iOS
- Webアプリケーション
- Windows
- Mac
- Linux
(2)ホットリロードによる開発効率の向上
Flutterはホットリロード(HotReload)という機能を備えております。
ホットリロードとはプログラムを実行している間に修正したソースコードも
ボタンひとつで即座に反映できてそのまま実機で確認することができます。
従来であれば修正するたびにソースコードを実機で動かすようにする処理(ビルド)が
必要で非常に時間がかかっていましたが
Flutterではその部分が解消されて効率良く開発が可能となります。

(3)将来性の高さ
冒頭でも記載しておりますがFlutterはGoogleが提供しているので非常に安定しており、 FlutterSDKはパッチバージョンで見ると隔週くらいの頻度で更新されております。
さらにGoogle自身でも「Google Ads」や「Google Assistant」をFlutterで
開発しているため、Flutterに力を入れていることが見受けられます。
Flutter開発を通して気づいたメリット・デメリット
弊社では初めて取り組みでFlutter開発を採用しまして、
開発を通してFlutter開発のメリット・デメリットについて気づきがありましたので
共有いたします。
メリット
(1)開発の期間や費用の削減
1つのソースコードでAndroidとiOSの開発ができるので開発の期間・費用の削減が可能です。今後の修正も共通のソースコード修正で対応できます。
※注意点もあり、そちらはデメリットの方に記載します。
(2)UIデザインをプラットフォームに依存せず統一できる
従来であればAndroidとiOSだとそれぞれ用意されているUIパーツが
異なっていたので見た目を合わせることが困難でした。
しかしFlutterだとSDKが同じような異なるプラットフォームでも
同じ見た目に近づけてくれるため開発者はOSごとの
見た目を気にせずに実装することができます。
さらにGoogle推奨のマテリアルデザインを採用しており、
ユーザが直感的に操作できるUIデザインを簡単にかつ自由度高く
カスタマイズすることも可能です。
(3)パッケージの充実
Flutterでは開発効率を上げれるようにパッケージが公開されております。
パッケージとはPub.devで公開されている便利な機能を提供してくれるプログラムとなります。
開発を進めて思いましたが、仕様やデザインが決まって実装する前に
実現するためのパッケージを探すことをおすすめします。
理由はアプリで実現しようとしていることの多くは他の開発者も実現したいと思っており、 既にパッケージが用意されていることが多いためです。
本記事を記載している2023年7月時点では36,000件以上のパッケージが公開されており、
このパッケージの豊富さは開発効率向上させる上で大きなメリットだと思います。
デメリット
(1) クロスプラットフォーム開発だが工数は半分にならない
AndroidとiOSが1つのコードで開発できるので単純に工数が半分になると思いがちですが
単純にそれぞれネイティブ開発工数の半分で見積もりをすると痛い目に合います。
なぜ半分の工数にならないのか?
それは以下の工程についてはOSごとに対応が必要になるからです。
- コア部分の開発:OSに依存するBluetooth・プッシュ通知機能等の実装やFlutterパッケージが用意されていないものはネイティブ開発が必要
- 試験工程:Android・iOSそれぞれで試験実施が必要
- リリース作業:申請作業はApp Store ConnectとGoogle Play で必要
見積もりをする際は上記の点を考慮の上、出していただければと思います。
(2)人材不足
Flutterはリリースされてから歴史が浅いため開発経験があるエンジニアは少ないです。 そのため人材を集めることが難しく比較的エンジニアの単価が高いと言われています。
Flutter経験者を集めるよりもアプリエンジニアにFlutterを学習してもらう方が
良いかもしれません。
弊社ではモブプロ開発を導入してFlutterエンジニアの育成にも力を入れております。
(3)日本語の資料が少ない
デメリットの(2)と同様でFlutterがリリースされて歴史が浅いことが理由で
日本語の文献はまだまだ少ないです。
自動翻訳機能などが普及していますが英語が読めなければ多少は開発速度は落ちます。
ただ、Flutterが急速に普及してきているのでここ数年で
文献も急増している印象はあります。
検索すると実現したいことの記事はほとんど出てきたので
複雑な処理やマニアックな仕様が必要なければデメリットにもならないかもしれません。
まとめ
Flutter開発を経験してまず感じたことはかなりFlutter・Dartは扱いやすいことでした。
私自身、もともとAndroidエンジニアでアプリ開発の経験があったこともあり、
1から学習をやり直すことなく入れたかと思います。
次に大きかったのはUI部分の作りやすさになります。
Flutterのレイアウト部分はWidgetをツリー上に並べて作成するのですが
これが直感的に分かりやすく、簡単な画面だと数時間で1画面実装できました。
ハイペースで作成できますが注意点もあり画面のデータを更新する際に
リロードの範囲などを意識しないと不要なレンダリングが走ったり、
無限にリロードされ続けることもありました。
こちらについては長くなりそうなので次回以降の記事で共有できればと思います。
以上がFlutter開発を行って感じた内容になります。
Flutterの導入を検討されている方や興味がある方の参考に少しでもなれば幸いです。