見出し画像

Flutter #1 : "Flutter"って?

はじめに

できるだけわかりやすく書こうと思いますので、表現方法などに色々言いたくなる方がいらっしゃるかもしれませんが、大目にみてください。
正確な技術情報は、公式ドキュメントやもっとFlutterについて理解されている方の情報を参考にしてください。
ウソは書かないように努力します。もしあればご指摘ください。
また、この記事を書いている私について知りたい方はこちらをご確認ください。

なお、私はFlutter“推し”派です。そこも考慮していただけると幸いです。

Flutterとはなにか?なぜ使うのか?

「Flutter」(読み方はフラッター、です)とは、以下のようなメリットを持つ技術です。

ⅰ. Googleが開発しているオープンソースのスマホアプリ開発技術です。
Googleが次世代OS候補であるFuchia(フーチア)を開発していて、そこで使われている技術がFlutterであるとの情報も。このあたりは競合技術であるReact Native(リアクトネイティブ)やXamarin(ザマリン)との違いですね。

ⅱ. クロスプラットフォーム開発、つまりiOSアプリとAndroidアプリをいっぺんに作ることができます。
つまりざっくり言って開発コストの削減が期待できます。弊社の肌感として、設計から結合テストあたりまでで、2〜3割のコスト削減は期待していいのかな、という感触です。なお、5割、つまり半分にはなりづらいです。最低でもテストはiPhone、Android両端末で実施する必要がありますので。

ⅲ. Dart(ダート)というあまりメジャーではないがモダンなプログラミング言語を使って開発します。
Dartを学習する、というコストをどう考えるか?は賛否あると思います。ただツールやトランスコンパイラを駆使して縛るJavaScriptに比べて、言語レベルで縛りをつけられるところは複数人開発には適しているのかなと。
まあ、なし崩し的にDartを採用したんじゃね?という疑いは今でも残ってますが…。

ⅳ. Windows環境でもMac環境でも開発できます。
わたしはMacでしか開発したことないですが、Windowsでも可能です。

ⅴ. UIやグラフィックの潜在的表現力が高いです。
iOS標準デザインや、Androidマテリアルデザインに引っ張られないUIや表現も作ることができます。もっと言うと、iOSのViewController、AndroidのActivity / Fragmentありきの画面設計からも解放され、かなり自由なUIが作成できます。それがユーザにとって使いやすいかどうかはさておき。
個人的にはここにかなり可能性を感じています。

ⅵ. 「Hot Reload」という、HTML制作のときのような、保存したタイミングで変化が反映されて開発が捗る機能が使えます。
React Nativeのようなクロスプラットフォーム技術には付いている機能なのですが、従来のネイティブ開発だといちいちコンパイルしてビルドして実行して確認して…と、時間がかかっていたのが、一度機能してしまえば大抵のことはコードを保存したタイミングで実行中のアプリに即反映できるようになります。

ⅶ. シンプルにiOSアプリやAndroidアプリを開発した場合に比べて遜色ないぐらい、パフォーマンスがよいです。
例えばReact Nativeに比べると、より低レベルのレンダリング(画面描画)APIを使用して動作しているため、動作スピードはかなり速いです。複雑な仕組みでなければ、普通にネイティブアプリを作っているのと変わらないほぼ感覚です。

Flutterのデメリット

もちろん、デメリットや気にしないといけない点はあります。

Ⅰ. スマホ端末やOSに依存する(例えばセンサーまわりやカメラ、通知、AR/VRなどの)機能はFlutterだけで開発できない。
Dart / Flutterで使用できるパッケージを管理している pub.dev から、上記機能を使用可能にするパッケージを取り込めば、Dart / Flutterだけで上記機能を持つアプリを作れるかもしれません。
ただ、それらのパッケージも実は裏でネイティブコードが動作しているだけですので、それらにバグがあるときや、ちょっといじりたいときのためにも、結局はネイティブ開発の知識やスキルが必要になります。

Ⅱ. ロギングやターゲット環境別バイナリ書きだしなど、開発者としてほしい!っていう機能のサポートが貧弱。
このあたりもネイティブ開発感覚があればクリアできると思いますが、Dart / Flutterだけの知識だと厳しいかもしれません。

Ⅲ. 開発するソフトウェアのライフサイクルが長いことが想定される場合は採用リスクあり。
一般論ですが、あくまでAppleやGoogle公式の技術ではない(Googleはほぼ公式みたいなものかもですが)ので、急速にFlutterが下火になったり、今後さらによい技術が生まれる可能性はゼロではないです。ですので、資産計上したくなるようなソフトウェア開発だったり、大体3年以上のソフトウェアライフサイクルを想定している場合は、Flutterはフィットしないかな…と思います。

Ⅳ. まだ絶賛開発中である点。
上記に似てますが、Flutterコアパッケージ自体も日々アップデートされています。もちろんそれにはセキュリティリスク対応のものも含まれるでしょうし、急にAPIがdeprecatedになって改修を余儀なくされることもあると思います。そのあたりは前もって想定しておく必要があります。(特に開発人材)

Ⅴ. Appleが黙っているのか?問題。
こちらも関連しますが、今ぐらいの盛り上がりであればまだAppleも見て見ぬ振りしてくれる気がします。が、もっと盛り上がってきたときにAppleがなにかと因縁を付けてFlutterアプリの締め出しを考える可能性はあるかもしれません。
とはいえ、Adobe Airアプリもそのようにはなっていないので、考えすぎかな。大丈夫かな。

Ⅵ. デザイナーさんに負荷かかりそう問題。
マテリアルデザインやよくあるアプリのデザインでUI開発は可能なので、あくまで頑張ってデザイン作ろうとした場合の話ですが。
割とノールールでデザインできてしまうところが、デザイナーさんを苦しめるのかな…と。考えすぎかな。(というかそういうデザインでFlutterアプリ作ってみたいんですが。個人的には)

Flutterをオススメするアプリの種類

iOS と Android 両方で配布する必要があるアプリ
基本的なところとして、片方だけで(特にiOSだけで)動作させればいいアプリは、それぞれネイティブ開発でいいのかな、と思います。

非ゲーム系アプリ
いわゆるSNSアプリ、ニュースアプリ、ECアプリなど、ゲームではないアプリは検討できると思います。
3Dゴリゴリゲームアプリには向かないです。2Dゲームだとまあ作れなくはないが…他でもいいような気がします。

短期で使用が終了し、ビジュアルインパクトが大事なアプリ
例えば広告連動アプリとか、キャンペーンアプリとかには、コストメリット含め使えると思います。

一旦作ってみる系アプリ
フィジビリティスタディやモックアップ制作にはベストではないかと。