Flutterの概要
Flutterは、2018年にGoogleがリリースしたアプリケーション開発用フレームワークです。
ここ2~3年で世界のIT大国(米国、中国、インドなど)を中心に注目を集めており、クロスプラットフォーム対応アプリの開発に関する話題では、常に名前が挙がる存在です。
Flutterはオープンソースソフトウェアであることから、原則として誰もが無償で使用することができます。また、1種類のソース(ワンソース)で複数のプラットフォームに対応できることから、Android、iOS、LinuxなどOSをまたいだ開発で特に重宝されています。
Flutterで使われている言語はGoogleが開発したオブジェクト指向言語「Dart」です。Dartは、強力な型推論や学習コストの低さ、非常に高速な動作などを備えた汎用性の高い言語です。
Dartは、Web開発向けのプログラミング言語で2011年10月に公開され、JavaScriptの代替としてWebブラウザへの組み込みを想定していました。しかし、JavaScriptを完全に代替する存在になることはなく、その後数年間はマイナー言語として認識されていました。しかし、Flutterの隆盛とともに再注目されています。
otlinとの違い
Flutterと混同されがちなツール「Kotlin」との違いについても理解しておきましょう。
まず、「Kotlinは言語」であり、「Flutterはフレームワーク」であるという違いがあります。Kotlinはプログラミング言語そのものですが、Flutterは複数のツールの集合体です。
また、Flutterで使われるプログラミング言語「Dart」はひとつのコードで複数のOSに対応します。これに対してKotlinは、原則としてAndroidのみに対応する言語です。
ちなみにKotlinでも、「Kotlin Multiplatform」というフレームワークを使用することでクロスプラットフォーム対応(Android+iOS)が可能になるものの、あまり使用されていないようです。
Flutterの将来性は高いとされる理由
Flutterはここ数年で知名度が向上したツールで、将来性については未知数な部分があります。しかしクロスデバイスやマルチデバイス環境が当たり前になりつつある現在、クロスプラットフォーム対応のフレームワークとして汎用性の高いFlutterへの注目は高く、将来性も十分期待できる状況です。実際のところ、既にGoogle Playを始めとしたさまざまなGoogleサービスでFlutterの導入が進んでいます。
世界的なトレンドの急上昇
Flutterは、キーワードごとの人気度・注目度を計測するツール「Googleトレンド」において、中国・アメリカ・インドなどのIT大国全てで右肩上がりの傾向を示しています。世界のITをけん引する3国で注目されているだけに、今後は日本をはじめとした他の国々でも使われる機会が増えていくと予想されます。
また、2020年9月にはGoogleがGoogle PlayをFlutterで書き換えたとの発表がありました。このように開発元であるGoogleの注力ぶりがうかがえることも、プラス材料のひとつです。
2021年3月公開の「Flutter2」でさらに盤石に
Googleは2021年3月公開に、Flutterの新バージョンである「Flutter2」を公開しました。Flutter2では、ワンコードでiOS・Androidのモバイルアプリ、Windows・Mac・Linuxのデスクトップアプリ、Webアプリ、組み込みデバイスのアプリ生成までをカバーします。
これまでもクロスプラットフォームに対応した言語・ツールはいくつも登場してきました。しかし、Flutterのように汎用性の高いツールは稀です。Flutter2ならば、理論上はスマートフォン向けアプリケーションやPC向け業務アプリケーションに加え、IoTデバイス向けアプリケーションにまで対応できることになります。現存するほぼすべてのプラットフォームに対応できると言っても過言ではないでしょう。
クロスデバイス、マルチデバイス環境の浸透
同じアプリケーションをPC・スマートフォン・タブレット・ゲーム機・IoTデバイスなど複数の環境で使うことが当たり前になってきています。これは「クロスデバイス」「マルチデバイス」と呼ばれる利用形態です。
しかしクロスデバイスやマルチデバイスでは、デバイスとOS(プラットフォーム)の固定化が問題になりがちです。デバイスとプラットフォームの組合せが固定されている場合、デバイスをまたいでアプリケーションを利用すると、プラットフォームごとにデザイン・描画などの差が出てしまいます。
「スマートフォンでは表示されるボタンが、PCでは表示されない」といった微妙な差であっても、ユーザーの利便性を低下させることに変わりはありません。生活の中で複数のデバイスを当たり前に用に使う現在では、プラットフォームの差を意識せずに利用できることが求められているのです。
Flutterはワンコードと独自UIによって、クロスデバイス・マルチデバイスへ容易に対応できることから、将来性は高いと言えるでしょう。
学習コストの小ささ
Flutterに採用されているDartは、JavaやJavaScriptに似た文法を持つ言語です。したがって、JavaやJavaScriptの経験があれば、非常に学習コストが小さい言語だと言えます。
ちなみに2023年6月執筆時点で、GitHubによる人気言語ランキングの1位はJavaScript、3位はJavaです。この2つの言語に触れたことのあるユーザーは非常に多いことが分かります。このことから「より小さな学習コストでDartを習得できる潜在ユーザーが多数存在する」とも言えるわけです。
Flutterは流行らないと言われる理由
Flutterは広く使用されており、今後も使用されていくことが予想されていますが、今後は流行らないと予想している方もいます。ここからは、Flutterが流行らないと言われている理由を2つ紹介します。
React Nativeの成長次第で需要が変わる可能性がある
React Nativeとは、Webアプリ開発で高い人気を誇るReactのコンセプトや構文を活用するモバイルアプリケーションを開発するフレームワークです。JavaScriptをベースにしたコードのため、Web系エンジニアに受け入れやすく、処理速度も優れています。
そのため、React Nativeの成長や開発者コミュニティの拡大によって需要が変動する可能性があります。もしReact Nativeがさらに成長し、新機能や改善が継続的に提供される場合、一部の開発者や企業、特にReactを活用している組織はReact Nativeを使用する可能性があります。
アプリへの要求水準が高まりにより商用利用に対応できるか不明瞭
スマートフォンをはじめとしたデバイスの性能が向上しているため、アプリへの要求水準が高まっています。特に重視されているのは、高いパフォーマンスや豊富なUI/UXの提供、セキュリティなどです。また、これらに加えてアプリサイズを最小限に抑えられるかも重視されます。
現時点でFlutterは上記の要件を満たしています。また、トヨタコネクテッドが次世代車載機としてFlutter/Dartを採用しているなど、大規模な企業やプロジェクトでも採用されています。
とはいえ、今後商用利用に対応できるか不明瞭のため、Flutterは流行らないと言われる一因となっています。
Flutterの特徴
Flutterの特徴について解説します。Flutterの特徴は、次の5点に集約されるでしょう。
マテリアル準拠のUIデザイン
Flutterは、Googleが提供しているUIデザインのガイドライン「マテリアルデザイン」に準拠したUI構築が可能です。
マテリアルデザインとは、現実世界にあるような物体の動き・影・奥行きなどを踏まえたデザイン手法です。マテリアルデザインを用いることで、ユーザーが直感的に「ボタンやバーが持つ意味」や「操作の流れ」を察知しやすくなるとされています。
また、デバイスのディスプレイサイズに合わせて表示が最適化されるように、シンプルで装飾の少ないデザインになっていることも特徴のひとつです。
プラットフォームに依存しない共通UI
Flutterはプラットフォームをまたいでも変化しない共通のUIを備えています。
前述のマテリアルデザインを採用したことで、プラットフォームが変わっても表示が崩れたり変わったりしないようなUIを、半自動的に生成できるわけです。
Flutterが対応するプラットフォームは、Android、iOS、Windows、MacOS、Linux、Webと多岐にわたります。共通のUIを用いることで、WindowsとiOSのように共通点が少ないOS同士であっても、プラットフォーム間の差異を埋める作業が発生しないように工夫されています。
ウィジェットを組み合わせた「ツリー構造」
Flutterは「ウィジット」と呼ばれる部品を組み合わせたUI構築を基本とします。ウィジットとは、端的に言えば「極小かつ単機能な部品」です。
一般的なUI構築では、まずUIの構成要素(パーツ)を定義し、各パーツを作成するところから始めます。
これに対してFlutterは、UIを構築する際に必要な「ウィンドウ」「入力ボックス」「スクロールバー」などがあらかじめウィジットとして定義されているため、これらを組み合わせることでUIを構築していくわけです。具体的には、ウィジットをツリーのようにつなげていくことで「ウィジットツリー」と呼ばれる階層構造を造ります。この階層構造がアプリケーションの骨組みとなります。
ホットリロード
ホットリロードとは、アプリケーションを停止・再起動させることなく修正を反映する機能を指します。ホットリロードが有効になっているシステムでは、改良や修正をダウンタイムなしで、かつリアルタイムに反映させることが可能です。Flutterにはこのホットリロード機能が標準で搭載されており、ソースの変更をリアルタイムに確認・反映させることができます
宣言型UIプログラミング
Flutterは、「宣言型UIプログラミング」を採用しています。UIプログラミングには大きく「宣言型UIプログラミング」と「手続き型UIプログラミング」という2つの手法があり、それぞれ以下のような特徴を持っています。
・宣言型UIプログラミング…「Aという値が与えられたらBを行う」という具合に、処理の条件を特定の状態(値)として記述する
・手続き型UIプログラミング…「AがBになったらウィンドウの色を変える」のように処理の条件を流れ(手続き)を意識して記述する
一般的に宣言型UIプログラミングは、画面の状態を意識する必要が無いためコーディングの効率が良くなると言われています。
FlutterとReact Nativeの違い
Flutterと同じようなクロスプラットフォーム対応のフレームワークとして「React Native」があります。ともに近年注目されているプラットフォームですが、設計思想や使用言語、UI仕様などで複数の違いが確認できます。
まずは表で確認しましょう。
Flutter | React Native | |
---|---|---|
使用言語(開発言語) | Dart | JavaScript |
UI | 独自UI | ネイティブUI |
特徴 |
|
|
デメリット |
|
|
パフォーマンス比較
FlutterとReact Nativeでは、パフォーマンスに多少の差が生じます。具体的な実行時間は環境によって異なるため、ここでは大まかな目安を比較してみました。
FlutterとReact Nativeは開発環境により選ぶ
FlutterはDart言語で開発されているのに対してReact NativeはJavaScriptで開発されています。そのため、Flutterはコンポーネントを直接管理できるのに対してReactはUIの変換にJavaScriptを使用しなければなりません。
また、Flutterは修正時の影響範囲が狭いのに対してReact Nativeはパフォーマンス全体に影響を与える可能性があります。つまり、運用保守体制が揃っているならReact Native、揃っていないならFlutterを選択すべきでしょう。
また、いずれかのフレームワークでアプリ開発を検討している場合、所持しているスキルセットをもとに選択するのもおすすめです。
Flutterは公式ドキュメントが非常に豊富なので、初心者でもアプリ開発をしやすいです。React NativeはJavaScriptの知識でモバイルアプリ開発ができるので、JavaScript経験者にはReact Nativeがおすすめです。
Flutterを活用するメリット
FlutterとReact Nativeを比較したところで、ここからはFlutterのメリットを5つご紹介します。
Flutterを活用するメリットは以下の5つです。
-
・1つの言語でクロスプラットフォームに対応したアプリケーションを作成できる・保守コストが低い
・仕様変更への対応が柔軟にできる
・開発期間の短縮化
・公式ドキュメントが充実しており、初心者でも使用しやすい
1つの言語でクロスプラットフォーム対応アプリを作成できる
Flutterを活用する最大のメリットは、1つの言語でクロスプラットフォームに対応したアプリケーションを作成できる点です。
通常「iOSはSwift、Web版はJavaScript、AndroidはKotlin」などOSに応じて開発言語が異なります。一方でFlutterは前述の通り、対応しているOSが多いため1つの言語でクロスプラットフォームに対応したアプリケーションを作成できます。スマートフォンの人口が増え続けている昨今では無視できないメリットでしょう。
保守コストが低い
Flutterを活用すると、プラットフォームごとのエンジニアを確保する必要がないため、運用コストを抑えることができます。通常のアプリの場合、iOSとAndroidにそれぞれのエンジニアを確保する必要がありますが、Flutterではその必要がありません。
仕様変更への対応が柔軟にできる
Flutterはホットリロード機能を搭載しているため、仕様変更への対応が柔軟にできます。本来モバイルアプリ開発ではソースコード修正後に、アプリを再起動させて反映させなければなりません。しかし、Flutterのホットリロード機能はソースコードを修正するとすぐに反映されるため正しい変更がされたか確認するのが容易です。
開発期間の短縮化
前述の通り、通常複数のプラットフォームで動作するアプリを開発する場合それぞれの環境に応じた言語で別々に開発する必要があります。そのため、開発期間を確保できない場合はとりあえずWeb版だけ公開などプラットフォームを絞る必要がありました。しかし、Flutterは1言語で開発できるため、クロスプラットフォームアプリの開発期間を大幅に短縮化できます。
公式ドキュメントが充実しており、初心者でも使用しやすい
Flutterは2018年開発と比較的新しいフレームワークですが、公式ドキュメントが非常に充実しているため学習しやすい点もメリットと言えるでしょう。公式ドキュメントのチュートリアルを通じて様々なウィジェットに触れることができます。
Flutterのデメリット
Flutterを使用するメリットを確認してきましたが、新しい技術故のデメリットがあります。ここからはFlutterで開発する際のデメリットを2つ紹介します。
日本語情報が少なく導入ハードルが高い
Flutterは日本語での情報が少なく、初めて使用する際のハードルが高いです。実務で使用する際の問題解決には英語や海外のコミュニティで情報収集しなければなりません。
特有機能との連携やカスタマイズが必要なアプリ開発には向かない
Flutterは、クロスプラットフォームの開発をサポートするために設計されていますが、一部のアプリ開発においては特有の機能やプラットフォームのカスタマイズが必要になる場合があります。
例えば、ネイティブAPIとの連携や特定のモバイルプラットフォームの機能を使用する場合、Flutter単体では限定的なサポートしか提供されていません。
このような場合に、Flutterのライブラリやパッケージを活用したり、ネイティブコードとの組み合わせを行う必要があります。
特有機能の連携やカスタマイズを行う際は開発時間やリソースの調整が必要です。また、前述の通り日本語での情報が少ないため、カスタマイズに手間取る可能性があることも念頭に置く必要があります。
比較的新しい技術のため導入・採用をはじめたばかりの企業が多い
FlutterはJavaScriptやPythonと比べて比較的新しい技術ですので、導入・採用し始めたばかりの企業が多いです。そのため、他のフレームワークと比べて成熟しておらず、ネット上の情報も少ないです。
調べてもほしい情報が見つからない、最適化やパフォーマンス改善案の事例が少なく、商用利用する際に苦戦する可能性があるといえるでしょう。
Flutterで開発できるアプリ例
Flutterは様々なアプリを開発できます。以下は一例です。
-
・ソーシャルメディアアプリ・音楽プレイヤーアプリ
・ニュースリーダーアプリ
・食品配達アプリ
・トラベルガイドアプリ
これらのアプリはFlutterの特徴である洗練されたUI/UX、高速なパフォーマンスを活かした開発が可能です。また、他の多くの言語と異なり、iOSとAndroidの両方に対応できます。
Flutterの勉強方法
前述の通り、Flutterは公式ドキュメントが非常に充実しているため、まずは公式ドキュメントを用いて学習しましょう。公式ドキュメントのメニューに沿ってチュートリアルを受けると各種ウィジェットやロジックとUIを切り分けた記述、実行方法などを一通り学べます。
Flutterの習得が向いている人
次に、Flutterの習得に向いている人をタイプ別に紹介します。
フロントエンド側のスキルも身に着けたいエンジニア
すでにサーバーサイドでの開発経験があり、今後はフロントエンド側のスキルも磨きたいというエンジニアであれば、Flutterは有望なスキルのひとつです。Dartはサーバーサイドで使用する言語と似た特性を持つために、学習コストが小さい言語です。
JavaやJavaScriptの知識をベースとしてDartを学ぶことで、Webアプリ開発の実践力を高められるでしょう。また、LinuxやWindowsといったサーバー向けプラットフォームにも対応しているため、「AndroidやiOSは扱ったことがない」というエンジニアでも移行しやすいです。
アプリケーションエンジニアとしてキャリアを積みたいエンジニア
アプリケーションエンジニアとしてキャリアを積みたいのであれば、ほぼすべてのプラットフォームに対応するFlutterのスキルが役立つでしょう。今後はスマートフォン・PC・タブレットで同時に利用できるアプリケーションが一般的になるため、クロスプラットフォームに対応できるか否かでキャリアの幅が変わってきます。
ほぼすべてのプラットフォームに対応するFlutterを使いこなすことで、参画可能なプロジェクトの幅が拡がるため、キャリアを積み上げやすくなるわけです。
JavaScriptやJavaの基礎知識がある初級エンジニア、学生など
JavaScriptやJavaは、学習ソースが豊富であり、独学に向いている言語です。もし学習時間に余裕があるのならば、こうした言語とともにFlutterも学んでみてはいかがでしょうか。Flutterで使用されているDartは、JavaやJavaScriptに文法が近いだけでなく、用途も似ているからです。
Flutterに関するよくある質問
最後にFlutterに関するよくある質問に回答していきます。
Q1. Flutterの習得難易度を教えてください
Flutterはネイティブ開発経験者にとっては比較的容易に習得でき、未経験者からしても難しくはありません。ネストなど他の言語では無い概念に慣れる必要はありますが、コードは比較的短く、JavaScriptの記述に似ているため、比較的容易と言えるでしょう。
Q2. Flutterが人気な理由を教えてください
Flutterが人気を集める最大の理由はクロスプラットフォーム開発が可能であり、iOSとAndroidアプリを同じコードで構築できる点です。従来はiOSにはSwift、AndroidにはJavaなど異なる言語で構築する必要があったため、2言語分のエンジニアが必要でした。
一方、Flutterを使用すると、1言語分のエンジニアで開発が可能なため、開発効率向上が見込めます。
また、Flutterはネイティブアプリに匹敵するUI/UXを簡単に構築できます。UI要素やアニメーションのカスタマイズ性が高く、リッチデザインを再現可能です。
Q3. Flutterの弱みを教えてください
Flutterは比較的新しい技術のため、JavaScriptフレームワークなど昔からある技術と比べてネット上の情報が少ないです。また、日本語での情報も非常に少なく、躓いたエラーやシステムの効率化事例などが英語でしか見つからない場合があります。さらに、特定の機能やプラットフォームカスタマイズを行う際にFlutter単体では対応しきれない場合があります。
まとめ
Flutterは、2018年にGoogleがリリースしたアプリケーション開発用フレームワークです。オープンソースソフトウェアであることから、無償で使用することができる点や、1種類のソース(ワンソース)で複数のプラットフォームに対応できる点が特徴です。ここ2〜3年で世界的に注目を集めており、中でもクロスプラットフォーム対応アプリの開発で重用されています。
すでにアプリケーションエンジニアとして働いている方の場合、今後はFlutterに関するスキルを磨くことで、アプリケーションエンジニアとしてのキャリアアップにつながるでしょう。
ITエンジニアの転職ならレバテックキャリア
レバテックキャリアはIT・Web業界のエンジニア職を専門とする転職エージェントです。最新の技術情報や業界動向に精通しており、現状は転職のご意思がない場合でも、ご相談いただければ客観的な市場価値や市場動向をお伝えし、あなたの「選択肢」を広げるお手伝いをいたします。
「将来に向けた漠然とした不安がある」「特定のエンジニア職に興味がある」など、ご自身のキャリアに何らかの悩みを抱えている方は、ぜひ無料のオンライン個別相談会にお申し込みください。業界知識が豊富なキャリアアドバイザーが、一対一でさまざまなご質問に対応させていただきます。
「個別相談会」に申し込む
転職支援サービスに申し込む
※転職活動を強制することはございません。
レバテックキャリアのサービスについて