Flutterの概要
Flutterは、2018年にGoogleがリリースしたオープンソースソフトウェアのアプリケーション開発用フレームワークです。ここ2〜3年で世界のIT大国(米国、中国、インドなど)を中心に注目を集めており、クロスプラットフォーム対応アプリの開発に関する話題では、常に名前が挙がる存在です。
1種類のソース(ワンソース)で複数のプラットフォームに対応できることから、Android、iOS、LinuxなどOSをまたいだ開発で特に重宝されています。
Flutterで使われている言語は、Googleが開発したオブジェクト指向言語「Dart」です。Dartは、強力な型推論や学習コストの低さ、非常に高速な動作などを備えた汎用性の高い言語で、Flutterの隆盛とともに再注目されています。
Kotlinとの違い
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の経験があれば、非常に学習コストが小さい言語だと言えます。
ちなみに2024年7月執筆時点で、GitHubによる人気言語ランキングの1位はJavaScript、4位はJavaです。この2つの言語に触れたことのあるユーザーは非常に多いことが分かります。このことから「より小さな学習コストでDartを習得できる潜在ユーザーが多数存在する」とも言えるわけです。
Flutterはオワコンといわれる理由
Flutterは広く使用されており、今後も使用されていくことが予想されています。しかし、一部では「Flutterはオワコン」という声も聞かれます。
具体的には、React Nativeの台頭によりFlutterの需要が左右される可能性や、アプリ要件に対するFlutterの適応力への懸念が挙げられます。
また、Dart言語の習得が必要なことや頻繁なアップデートによる継続的な学習の負担も理由のひとつです。本章では、これらのFlutterがオワコンといわれる理由について解説します。
React Nativeの成長次第で需要が変わる可能性がある
React Nativeとは、Webアプリ開発で高い人気を誇るReactのコンセプトや構文を活用するモバイルアプリケーションを開発するフレームワークです。JavaScriptをベースにしたコードのため、Web系エンジニアに受け入れやすく、処理速度も優れています。
そのため、React Nativeの成長や開発者コミュニティの拡大によって需要が変動する可能性があります。もしReact Nativeがさらに成長し、新機能や改善が継続的に提供される場合、一部の開発者や企業、特にReactを活用している組織はReact Nativeを使用する可能性があります。
アプリへの要求水準が高まり商用利用に対応できるか不明瞭
スマートフォンをはじめとしたデバイスの性能が向上しているため、アプリへの要求水準が高まっています。特に重視されているのは、高いパフォーマンスや豊富なUI/UXの提供、セキュリティなどです。また、これらに加えてアプリサイズを最小限に抑えられるかも重視されます。
現時点でFlutterは上記の要件を満たしています。また、トヨタコネクテッドが次世代車載機としてFlutter/Dartを採用しているなど、大規模な企業やプロジェクトでも採用されています。
とはいえ、今後商用利用に対応できるか不明瞭のため、Flutterは流行らないと言われる一因となっています。
Dart言語を学ぶ必要がある
Flutterで開発するためには、Dart言語の習得が必要です。しかし、Dartは他の主要言語と比べて知名度が低く、これがFlutterの普及を妨げる一因となっています。
JavaScriptやJavaの経験者にとっては、Dartの学習障壁は低いかもしれません。ですが、プログラミング初心者の場合は、一から学ぶ必要があります。
現状、Dartの市場需要や汎用性は限定的で学習コストを懸念する方も少なくありません。このような理由から、Flutterはオワコンといわれています。
アップデートが頻繁で知識の更新が必要
Flutterは改良が進んでおり、頻繁にアップデートが行われます。アップデートは最新機能や改善点を早く取り入れられるメリットがある一方で、課題も生み出しています。
具体的には、既存アプリとの互換性問題や新たなバグの発生リスクです。アップデートがあるたびに開発者は常に変更点を把握し、必要に応じてアプリを修正し、再テストする必要があります。
この継続的なメンテナンスの負担が、一部の開発者や企業にとってFlutterを避ける要因となっています。
FlutterとReact Nativeの違い
Flutterと同じようなクロスプラットフォーム対応のフレームワークとして「React Native」があります。ともに近年注目されているプラットフォームですが、設計思想や使用言語、UI仕様などで複数の違いが確認できます。
まずは表で確認しましょう。
Flutter | React Native | |
---|---|---|
使用言語 (開発言語) |
Dart | JavaScript |
UI | 独自UI | ネイティブUI |
特徴 | ・クロスプラットフォーム開発に特化 ・ホットリロードによる効率的な開発が可能 ・UIが優れている |
・クロスプラットフォームの開発が可能 ・Reactをベースに作成されているため、 馴染みのある方が多い ・Reactのエコシステムと連携可能 |
デメリット | ・日本語の情報が少ない ・特定機能やカスタマイズを実装できない場合がある ・アプリサイズが大きくなりやすい |
・運用コストが高い ・Flutterと比べてメモリを多く使用する |
パフォーマンス比較
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には、さまざまな特徴があります。主な特徴としては、マテリアル準拠のUIデザインやプラットフォームに依存しない共通UI、ウィジェットを組み合わせた「ツリー構造」などが挙げられます。
また、ホットリロードや宣言型UIプログラミングを採用している点も特徴です。本章では、Flutterの特徴について解説します。
マテリアル準拠の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を活用するメリット
Flutterを活用することで、アプリ開発に多くのメリットをもたらします。主なメリットのひとつは、1つの言語でクロスプラットフォーム対応アプリを作成できることです。
また、保守コストが低いことや仕様変更への対応が柔軟にできることもメリットとして挙げられます。また、開発期間の短縮化も大きな魅力です。さらに、公式ドキュメントが充実しており、初心者でも使用しやすい環境が整っています。本章では、Flutterを活用するメリットについて解説します。
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のデメリットについて解説します。
日本語情報が少なく導入ハードルが高い
Flutterは日本語での情報が少なく、初めて使用する際のハードルが高いです。実務で使用する際の問題解決には英語や海外のコミュニティで情報収集しなければなりません。
特有機能との連携やカスタマイズが必要なアプリ開発には向かない
Flutterは、クロスプラットフォームの開発をサポートするために設計されていますが、一部のアプリ開発においては特有の機能やプラットフォームのカスタマイズが必要になる場合があります。
例えば、ネイティブAPIとの連携や特定のモバイルプラットフォームの機能を使用する場合、Flutter単体では限定的なサポートしか提供されていません。
このような場合に、Flutterのライブラリやパッケージを活用したり、ネイティブコードとの組み合わせを行う必要があります。
特有機能の連携やカスタマイズを行う際は開発時間やリソースの調整が必要です。また、日本語での情報が少ないため、カスタマイズに手間取る可能性があることも念頭に置く必要があります。
比較的新しい技術のため導入・採用をはじめたばかりの企業が多い
Flutterは、JavaScriptやPythonと比べて比較的新しい技術ですので、導入・採用し始めたばかりの企業が多いです。そのため、他のフレームワークと比べて成熟しておらず、ネット上の情報も少ないです。
調べてもほしい情報が見つからない、最適化やパフォーマンス改善案の事例が少なく、商用利用する際に苦戦する可能性があるといえるでしょう。
Flutterで開発できるアプリ例
Flutterは様々なアプリを開発できます。以下は一例です。
-
・ソーシャルメディアアプリ
・音楽プレイヤーアプリ
・ニュースリーダーアプリ
・食品配達アプリ
・トラベルガイドアプリ
これらのアプリはFlutterの特徴である洗練されたUI/UX、高速なパフォーマンスを活かした開発が可能です。また、他の多くの言語と異なり、iOSとAndroidの両方に対応できます。
Flutterの勉強方法
Flutterの学習を始めるなら、充実した公式ドキュメントを活用するといいでしょう。公式ドキュメントは、初心者に配慮された構成で、段階的な学習が可能です。
チュートリアルでは、ウィジェットの基本操作やロジックとUIの切り分け、アプリケーションの実行など、幅広いスキルを体系的に学べます。実際に手を動かして学習することで、Flutterを使った開発スキルを効率的に向上できるでしょう。
関連記事:
アプリケーションエンジニアになるには?必要スキルや学習方法も解説
アプリケーションエンジニアにおすすめの資格10選!難易度も紹介
Flutterの習得が向いている人
Flutterの習得に向いている人には、さまざまなタイプがあります。例えば、フロントエンド側のスキルも身につけたい人は、Flutterを習得するといいでしょう。
また、アプリケーションエンジニアとしてキャリアを積みたい人にも向いています。そして、JavaScriptやJavaの基礎知識がある人にとっても、学習ハードルが低いといえます。本章では、これらの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の活用を検討している方は、Flutterに関する疑問を持つこともあるでしょう。Flutterに関するよくある質問には、Flutterの習得難易度についてやFlutterが人気な理由についてなどが挙げられます。
また、Flutterの弱みについての質問も多くあります。本章では、これらのFlutterに関するよくある質問と回答を紹介します。
Q1. Flutterの習得難易度を教えてください
Flutterはネイティブ開発経験者にとっては比較的容易に習得でき、未経験者からしても難しくはありません。ネストなど他の言語では無い概念に慣れる必要はありますが、コードは比較的短く、JavaScriptの記述に似ているため、比較的容易と言えるでしょう。
Q2. Flutterが人気な理由を教えてください
Flutterが人気を集める最大の理由はクロスプラットフォーム開発が可能であり、iOSとAndroidアプリを同じコードで構築できる点です。また、Flutterはネイティブアプリに匹敵するUI/UXを簡単に構築できます。UI要素やアニメーションのカスタマイズ性が高く、リッチデザインを再現可能です。
Q3. Flutterの弱みを教えてください
Flutterの弱みは、ネット上の情報が少ないことです。特に日本語コンテンツは乏しく、トラブルシューティングや最適化事例の多くが英語のみで提供されています。また、特定の機能実装やプラットフォーム固有のカスタマイズにおいて、Flutter単独では対応できない場合があります。
まとめ
Flutterは、2018年にGoogleがリリースしたアプリケーション開発用フレームワークです。オープンソースソフトウェアであることから、無償で使用することができる点や、1種類のソース(ワンソース)で複数のプラットフォームに対応できる点が特徴です。
ここ2〜3年で世界的に注目を集めており、中でもクロスプラットフォーム対応アプリの開発で重用されています。すでにアプリケーションエンジニアとして働いている方の場合、今後はFlutterに関するスキルを磨くことで、アプリケーションエンジニアとしてのキャリアアップにつながるでしょう。
ITエンジニアの転職ならレバテックキャリア
レバテックキャリアはIT・Web業界のエンジニア職を専門とする転職エージェントです。最新の技術情報や業界動向に精通しており、現状は転職のご意思がない場合でも、ご相談いただければ客観的な市場価値や市場動向をお伝えし、あなたの「選択肢」を広げるお手伝いをいたします。
「将来に向けた漠然とした不安がある」「特定のエンジニア職に興味がある」など、ご自身のキャリアに何らかの悩みを抱えている方は、ぜひ無料のオンライン個別相談会にお申し込みください。業界知識が豊富なキャリアアドバイザーが、一対一でさまざまなご質問に対応させていただきます。
「個別相談会」に申し込む
転職支援サービスに申し込む
※転職活動を強制することはございません。
レバテックキャリアのサービスについて