Flutter とは何か?メリット、デメリット、採用しているプロダクト(アプリ)まで一挙にご紹介!

Flutter とは何か?メリット、デメリット、採用しているプロダクト(アプリ)まで一挙にご紹介!

エンジニアブログ

投稿日:2021/03/23 | 最終更新日:2021/10/20

Flutter は、画面サイズを選ばない、アンビエントコンピューティングを標榜する、マルチプラットフォーム・フレームワークです。モバイルに限らず、Win/Mac/Linuxのデスクトップアプリの開発も行えます。

3月の Flutter 2 のリリースにより、モバイルだけでなく、Webアプリも安定版リリースで開発できるようになりました。デスクトップについては、利用できますがまだベータ版扱いとなっています。

Flutter は Google サービスならではの様々な特徴を有しており、実業務に活用することで、企業は多くのメリットを享受することができます。

本記事では、 Flutter の基礎的な内容から、メリット、デメリット、できること、採用しているプロダクト(アプリ)まで一挙にご紹介します。ぜひ、最後までご覧ください。

Flutter とは

サービス概要

Flutter は Google が提供しているオープンソース(ソースコードが一般公開されている)のフレームワークです。フレームワークとはアプリケーション開発の土台となるソフトウェアであり、アプリを開発する際に便利な機能が多数搭載されています。

特徴

Flutter の特徴として、 OS や画面サイズにとらわれないアプリケーションを開発できる点が挙げられます。Flutter は「モバイルアプリフレームワーク」という位置付けのサービスであり、「 Android 」や「 iOS 」など、異なる OS に対して同じソースを共有し、アプリケーションを同時に構築することが可能です。一部、プラグインやハードウェア対応、ビルド環境などの関係から、わずかな違いが発生するケースも存在します。

また、 Flutter は「ホットリロード」や「ホットリスタート」と呼ばれるコード変更の確認を、再フルビルドすることなく反映できるため、アプリケーションの高速開発を実現することができます。加えて、柔軟なユーザーインターフェース( UI )で自由自在にカスタマイズができるなど、企業にとって必要な機能を数多く兼ね備えています。

動作環境

Flutter が対応している動作環境を表にまとめました。

Windows Mac Linux Chrome
OS Windows7 SP1以上(64bit) macOS (64bit) Linux (64bit) Linux (ベータ版)がオンになっている Chrome OS(64bit)
Disc 1.32 GB以上の空容量 2.8 GB以上の空容量 600 MB以上の空容量 600 MB以上の空容量
ツール ・Windows PowerShell 5.0 以上
・Git for Windows 2.x
・bash
・curl
・git 2.x
・mkdir
・rm
・unzip
・which
・zip
・bash
・curl
・file
・git 2.x
・mkdir
・rm
・unzip
・which
・xz-utils
・zip
・bash
・curl
・git 2.x
・mkdir
・rm
・unzip
・which
・xz-utils

Flutter を導入する前に、自社の環境をあらかじめチェックしておきましょう。

React Native との違い

Flutter と同様にクロスプラットフォームのアプリケーション開発フレームワークとして「 React Native 」が挙げられます。 React Native は Facebook が開発したサービスです。

2つの最も大きな違いは開発言語であり、 Flutter は「 Dart 」という開発言語を利用するのに対して、 React Native は「 JavaScript 」を利用します。

また、 IDE (アプリケーションを構築するためのソフトウェア)にも違いが存在し、Flutter は「 Android Studio 、 IntelliJ 、 VS Code 」を使いますが、 React Native は「 VS Code 、 Nuclide 」を採用しています。

このように、 Flutter と React Native は異なるサービスであることを理解しておきましょう。 Flutter の開発言語「 Dart 」については、次章で詳しくご説明します。

開発する時は、Flutter と React Native をパフォーマンスで比較するのはもちろんですが、動作環境やそれぞれの言語を書けるエンジニアのリソースなどなど総合的な判断をすることが大事だと言えます。

Dartとは?

Dart は2011年に Google が開発したアプリケーション開発向けのプログラミング言語であり、モバイルアプリケーション領域( Flutter )をはじめとして幅広く活用されています。とても高いパフォーマンスを誇るため、大規模な開発にも問題なく対応することが可能です。

Dart はオブジェクト指向型であり、かつ、開発時に明確に型が決定する「静的型解決」を行う言語となっています。「 Null Safety ( Null 安全)」に対応しており、 Null を原因とした実行時エラーが発生しないため、実業務でも安心して利用することが可能です。

開発しながら動作確認ができるため、生産性向上を実現することができ、幅広いプラットフォームに対応しているため、スマートフォン以外のアプリケーション利用も考慮した設計になっています。

加えて、元々 Dart は JavaScript の欠点を補うために開発された背景があり、 JavaScript を理解している人にとっては扱いやすい言語であるため、経験者の学習コストを抑えられる点は大きなメリットだと言えます。

IDE やコードエディターがサポート対象となっている他、開発ツールの種類も豊富なため、実業務で安心して利用できる点も嬉しいポイントのひとつです。

Flutter のメリット

単一コードでプロダクト(アプリ)を開発可能

Flutter を使えば、単一のコードベースで iOS / Android のアプリケーションを開発することができます。ホットリロード(自動リロード)の機能で「コード修正から1秒」でアプリの再実行(リロード)が可能であり、共通のコードとデバッグの高速化・共通化によって高速開発を実現しています。

iOS / Android ともに共通した UI を開発可能

Flutter が搭載している「 Pixel Perfect ( GPU 制御による直接描画)」を活用することで iOS / Android ともに共通した描画表現が可能になります。そのため、 OS に依存することなく共通したユーザーインターフェース( UI )を実現できます。また、OS ごとに差別化を図ることも可能であり、自社が実現したい内容に合わせて柔軟に開発を進めていくことができます。

なお、 iOS の開発にはデザインガイドラインが存在するため、ガイドラインに沿った見た目の UI を提供する「 Cupertino 」というパッケージ・ウェジェットを利用することも可能です。

サービスに関するドキュメントが充実

Flutter はサービスに関するドキュメントが充実しています。 Google 公式のドキュメントが数多く用意されているため、わからないことを解決しやすいというメリットがあります。ただし、ドキュメントの大半は英語資料であるため、現実的には Flutter コミュニティなどを活用して、疑問点を解消するのがオススメです。加えて、 Flutter はサンプルコードが豊富な点も嬉しいポイントです。

ウィジェットベースでレイアウト構築が可能

Flutter は「ウェジェット(パーツ)」の組み合わせでアプリケーションを構築する仕様となっています。ウィジェットは汎用性が高いため、自社の実現したいことに合わせて、あらゆるレイアウトを迅速かつ柔軟に作ることができます。

スムーズな仕様変更が可能

ネイティブアプリケーション開発においては、レイアウト変更をした場合は再度デバッグをして結果を検証する必要がありますが、 Flutter のホットリロードを利用することで、変更結果を即座に確認することが可能になります。

また、 Flutter はコードベースでレイアウトを構築するため、コードを書き換えるだけで簡単に仕様を変更することができます。当然ながら、デザイナー自身も Flutter や Widget について理解する必要がありますが、レイアウト変更における工数を削減し、スムーズな仕様変更が可能な点は Flutter の大きなメリットであると言えます。

iOS と Android を同時リリースできる

一般的なアプリ開発だと、iOS と Android アプリをそれぞれ作ります。会社の規模やプロジェクトの予算で同時に開発するのか、iOS をリリースしてから Android を開発に着手するのかの違いはありますが、2回分のリソースがかかります。一方、Flutterでは Android と iOS で開発を分けることなく開発ができ、共通のコードで対応ができるため、iOS と Android の同時リリースがしやすいです。

さらに、工数が減ることにより、一般的には、 iOS と Android の二つ開発するよりも予算を押さえることができます。

ただし、リリース先は「 Google Play 」と「 AppStore 」でそれぞれ異なります。リリースするアプリは、通常の Android / iOS アプリと同じ扱いになるため、両者の特性を理解している人間がリリースを対応する必要があります。

Flutter のデメリット

要件次第でネイティブコードの呼び出しが必要

Flutter の場合、基本的にはコミュニティ内で既成のプラグインを探し、利用することが可能ですが、必要なプラグインが存在しない場合には、自社でネイティブ言語を書き、プラグインを作ることになります。

Flutter を扱える人材が少ない

Flutter は比較的新しいフレームワークであり、昔から存在しているサービスと比べると扱える技術者は少ないです。そのため、 Flutter でのアプリケーション開発について、即戦力のエンジニアを募集したい場合には、人材雇用に苦労する可能性がある点はデメリットの一つであると言えます。

Flutter でできること

開発における生産性向上を実現できる

Flutter はホットリロードや共通コード、デバッグの高速化などにより、スムーズな開発を実現するサービスです。アプリケーションの動作は OS に最適化されるため、開発者が意識する必要はなく、 OS ごとに異なるロジックやレイアウトを表示する事もできます。ただし、利用するプラットフォームによって挙動が変わる可能性がある点は注意が必要です。

iOS と Android のアプリを同時にリリースできる

iOS と Android のアプリケーションを開発する場合、本来は OS ごとに別々の開発作業が必要になります。 iOS であれば 「 Swift 」、 Android であれば「 Kotlin 」などのプログラミング言語を使って、開発しなければいけません。

しかし、Flutter は単一コードで iOS / Android のアプリケーションを同時に開発することができるため、開発作業を効率化することが可能になります。OS 横断的にアプリケーションの同時開発が可能な点は、工数・コストの両面から企業にとって大きな価値になります。

ただし、ビルド環境はそれぞれ異なるため、 Android では「 Gradle 」、 iOS では「 Xcode 」に詳しい担当者が最低1名は必要になります。

モバイルアプリだけではなく web サービスにも利用できる

本来、webサービスを開発するためには、「 Python 」「 Java 」「 Ruby 」「 C# 」などの開発言語が必要になりますが、 Flutter はモバイルアプリケーションだけではなく、 web サービスにも利用することができます。

そのため、 Flutter で一度アプリケーションを開発してしまえば、 iOS / Android のどちらでも使えるだけでなく、 web サービスにも応用して利用者の幅を広げていくことが可能になります。

ただし、アプリケーションの内容次第では、 web サービスとして完全に同じソースコードを利用できない可能性もあるため、その点は注意が必要です。

Flutter を採用しているプロダクト(アプリ)

Google Ads は Google が提供しているプロダクト(アプリ)であり、モバイルアプリ広告のリアクション状況をリアルタイムに確認することが可能です。 Google が自社のサービス開発に利用している点からも、 Flutter のサービスレベルの高さを伺うことができます。

PostMuse

PostMuse は Instagram の画像やストーリーを作成できる、無料の写真エディターアプリです。 iOS / Android どちらの OS にも対応しており、プロダクト(アプリ)の裏側には Flutter が採用されています。

カウル

カウルはマンション購入に特化した住まい探しのプロダクト(アプリ)です。ユーザーに合った物件を検索することができ、希望条件を入力して AI が最適なマンションを提案してくれたり、アプリ経由で簡単に見学の申し込みができるなど、便利な機能が数多く搭載されています。

inKino

inKino はフィンキノ映画館の上映スケジュールの確認やチケット購入を行うことができるプロダクト(アプリ)です。現在は Google Play ( Android )限定の提供となっていますが、フィンキノ映画館に関するあらゆる情報を網羅しています。

プロダクト(アプリ)を開発したエンジニアの声

前章でご紹介したプロダクト(アプリ)の一部について、実際にアプリケーションを開発した Flutter エンジニアの声を集めました。

PostMuse を開発したエンジニアの声

iOS / Android 両方のアプリが調査研究を含めて数ヶ月で完成しました。開発チームは2名体制であり、驚異的な開発速度と認識しています。Dart 言語は Kotlin と比較して見劣りする部分はありますが、ホットリロードやコンパイルの速さは、それを補ってあまりあるだけの性能を誇ります。

Swift または Kotlin でのコード開発が必要になる「プラットフォーム・ネイティブ」のアプリケーションには Flutter は不向きな印象であり、開発するアプリケーションの特性に合わせて、サードパーティ・ライブラリ(プラグイン)を事前にチェックしておくことが重要です。

カウルを開発したエンジニアの声

Flutter は学習に必要なコストを抑えることができ、 React Native と比較して高度なユーザーインターフェース( UI )をシンプルに作成することが可能です。

一方で、プラットフォーム・ネイティブな機能を提供するサードパーティ・ライブラリ(プラグイン)の開発はプラットフォーム経験が必要になるため、依存するプラグインの提供が終了した場合のリスクは存在します。

inKino を開発したエンジニアの声

仕事後の自由時間を利用して、わずか2週間でアプリケーションをリリースすることができました。 Flutter アプリの構成管理に関する情報が多くない点はデメリットだと感じます。

まとめ

エンジニアの声として目立ったのが、短期間でアプリケーションを開発できる点です。 iOS / Android のアプリケーションを同時に開発でき、ホットリロードやコンパイルの速さを含めて考えれば、 Flutter によるアプリ開発のスピード感は圧倒的であると言えます。

一方で、特定 OS に依存するプラットフォーム・ネイティブなアプリケーション開発に関しては、 Flutter の苦手分野と言えるでしょう。自社のアプリ要件を事前にチェックし、プラグインの利用も視野に入れて考えるべきです。

このように Flutter には得意な領域と苦手な領域が存在するため、自社のアプリケーション特性を見極めた上で慎重に利用を検討してください。

実際に Flutter で開発したエンジニアの私見

最後に Flutter で開発を行ったエンジニアの私見をご紹介します。

「 Flutter の大きな魅力として、単一のコードベースで iOS / Android アプリを開発・メンテナンスできる点が挙げられます。また、ホットリロード機能を活用することでコード修正から「わずか1秒」でアプリの再実行(リロード)ができる他、共通のコードとデバッグの高速化・共通化で高速開発を可能にしています。
 
さらに、単一のコードベースで iOS / Android ともに同じ見た目のユーザーインターフェース( UI )を開発することができます。 Pixel Perfect ( GPU 制御による直接描画)により、 OS を問わずに同じ描画表現が可能となっており、ネイティブと見分けが付かないほどの高速な UI 描画(60 fps )と、動作レスポンスを実現しています。

Flutter は独自のデザインやアニメーション表現を持つ UI を作りやすい点も特徴のひとつであり、ネイティブ UI コンポーネントを使わないため、 OS やバージョンの違いによる無駄な UI 差異の吸収実装が不要になります。

一方で Flutter の難点としては、最新のネイティブ・ライブラリへの対応がコミュニティ頼りとなる点です。また、要件が複雑な場合は Flutter による開発負荷が一気に大きくなる点も忘れてはいけないポイントです。

加えて、仮にネイティブのみで提供されているライブラリや API 機能が必要な場合は、 Flutter とネイティブをスムーズに繋ぐためのプラグインを独自に開発しなければいけません。

Flutter は「開発負荷低減」「高速開発」「高いサービス品質」などのメリットを望めますが、市場においては新興サービスであるため、ハードウェアの特殊制御や OS の新機能対応などが発生した場合は、サードパーティによる機能支援が弱いです。

そのため、自分が製品オーナーでない場合は、柔軟な仕様変更の可否について、あらかじめ確認しておくことが必要になります。」

まとめ

本記事では、 Flutter の基礎的な内容から、メリット、デメリット、できること、採用しているプロダクト(アプリ)まで一挙にご紹介しました。

Flutter には得意分野と苦手分野が存在するため、 Flutter のサービス特性と自社のアプリ要件を複合的にチェックし、慎重な開発計画を立てることが大切です。

例えば、「 Flutter DevTools 」という開発支援ツールを使うことで、 Flutter アプリの UI レイアウト・状態を調べたり、パフォーマンスの問題を診断できる他、デバッグを実行することも可能です。

Flutter 開発における問題点をわかりやすく可視化できるため、このようなツールも活用しながら、 Flutter でのアプリケーション開発を進めてみてはいかがでしょうか?

弊社トップゲートでもFlutter 開発を承ることが可能ですので、何かお困りのことがございましたらお気軽にお問い合わせください。相談ベースや見積もりでのご連絡でも大丈夫です。

過去の開発事例紹介資料も、公開中!
ご興味ある方は、ぜひDLしてみませんか?
開発事例紹介資料をダウンロードする



弊社トップゲートでは、 Google Cloud (GCP) 、または 20ID以上のGoogle Workspace(旧G Suite) 導入をご検討をされているお客様へ「Google Meet で無料個別相談会」を実施いたします。導入前に懸念点を解決したい方、そもそも導入した方がいいのかをお聞きしたい方はお気軽にお申し込みください!

トップゲート経由でGoogle Cloud (GCP) をご契約いただけるとGoogle Cloud (GCP) の利用料金はずっと3%オフとお得になります!

お申込みはこちら

Tags:

記事を探す

GCP のメリットを最大限に活用しよう!

Google Cloud・Google Workspace のご相談・
お見積り依頼はお気軽に
お問合せフォーム