現存するほぼすべてのプラットフォームに対応する万能フレームワークの将来性Flutterの将来性は?特徴・メリット・React Nativeとの比較を解説

最終更新日:2022年5月26日

レバテックキャリアは
ITエンジニア・Webクリエイター専門の転職エージェントです

FlutterはGoogle社が開発したクロスプラットフォーム開発向けのフレームワークです。Flutterを使うことで、複数のOSに対応したアプリケーションを効率よく開発できるようになります。また、FlutterはGoogle社が近年、最も注力しているフレームワークでもあります。ここでは、Flutterの概要や特長、将来性などについて解説します。

1. Google社製のフレームワーク「Flutter」

まず、Flutterの概要と特徴について解説します。

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の隆盛とともに再注目されています。

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プログラミングは、画面の状態を意識する必要が無いためコーディングの効率が良くなると言われています。

Kotlinとの違い

Flutterと混同されがちなツール「Kotlin」との違いについても理解しておきましょう。
まず、「Kotlinは言語」であり、「Flutterはフレームワーク」であるという違いがあります。Kotlinはプログラミング言語そのものですが、Flutterは複数のツールの集合体です。また、Flutterで使われるプログラミング言語「Dart」はひとつのコードで複数のOSに対応します。これに対してKotlinは、原則としてAndroidのみに対応する言語です。ちなみにKotlinでも、「Kotlin Multiplatform」というフレームワークを使用することでクロスプラットフォーム対応(Android+iOS)が可能になるものの、あまり使用されていないようです。

2. FlutterとReact Nativeの違い

Flutterと同じようなクロスプラットフォーム対応のフレームワークとして「React Native」があります。ともに近年注目されているプラットフォームですが、設計思想や使用言語、UI仕様などで複数の違いが確認できます。

設計思想

Flutterは「ひとつのコード(=一種類、一回のコーディング)で複数のプラットフォームに対応できること」が強みです。いわゆる「ワンコード」と呼ばれる設計思想で、プラットフォームごとにコーディングを変更する必要が無いという特徴があります。

これに対してReact Nativeは「ひとつの技術で複数のプラットフォームに対応できる」ことが原則となっています。これは、言い換えれば「一度学べば、どのプラットフォームでも動くコーディングができる」という意味です。

また、Flutterはゼロから新しく設計されているのに対し、React Nativeは既存のWeb技術をベースとして作られています。

使用言語の違い

Flutterでは、Googleが生み出した独自言語「Dart」を使用するのに対し、React NativeはJavaScript(もしくはTypeScript)を使用します。

UIの違い

Flutterは、マテリアルデザインに準拠した独自UIを採用しています。また、UI描画にも独自の描画エンジン“skia“が使われており、プラットフォームに依存しない共通のUIを提供することが可能です。

これに対しReact Nativeは、原則としてプラットフォームごとに用意された標準UIを流用する「ネイティブUI」を採用しています。したがって、同じ機能を持ったアプリケーションであっても、プラットフォームによってUIを分けることが基本です。

対応OSの違い

どちらもクロスプラットフォームを想定しているものの、実際に対応しているOSには差があります。
 

  • ・Flutter…iOS, Android, Web, Windows, Mac, Linux

    ・React Native…iOS, Android, Web(Windows)


Flutterのほうが対応できる幅は広く、モバイル・PC間の垣根も超えやすいと言えそうです。

アップデートの容易さ

OTAアップデートとは、「Playストア」や「Appleストア」のような「ストアアプリ」の審査を通さずにアップデートを提供する方式です。FlutterはOTAアップデートができず、必ずプラットフォームのストアアプリの審査を通過させる必要があります。一方、React NativeはOTAアップデートが可能です。更新内容をJavaScriptバンドルとしてインターネット上に公開し、アプリケーションの更新を促すことができます。このようにReact Nativeならばストアアプリの審査を省略できるため、短時間で更新内容の周知が可能です。

パフォーマンス比較

FlutterとReact Nativeでは、パフォーマンスに多少の差が生じます。具体的な実行時間は環境によって異なるため、ここでは大まかな目安を比較してみました。

ビルド実行時間

ビルド実行時間については、初回であればFlutter、2回目以降はReact Nativeが有利です。最も時間を要する初回ビルドについては、Flutter側がReact Nativeの3分の1程度の時間におさまることもあります。React NativeはJavaScriptをバンドルしている関係から、初回ビルドの実行時間が長くなる点に注意してください。

アプリケーションサイズ

アプリケーションサイズについてもFlutter側が小さくなります。FlutterはDartによるネイティブコードが基本であり、非ネイティブコードのJavaScriptを採用するReact Nativeよりも小さなデータ量で機能を実装できるわけです。

起動時間

アプリケーションの起動時間についてはReact Native側が有利かもしれません。これは、Flutter側の描画エンジン「skia」によるレンダリング処理が含まれることが原因のようです。React NativeはネイティブUIを原則としているため、Flutterのskiaが行うような独自処理がなく、簡素な描画処理を行っていると考えられます。

メモリ使用量

メモリ使用量については、FlutterよりもReact Nativeが小さいようです。こちらも独自の描画エンジンであるskiaの処理が関係していると考えられます。

3. 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の経験があれば、非常に学習コストが小さい言語だと言えます。

ちなみに2021年時点で、GitHubによる人気言語ランキングの1位はJavaScript、3位はJavaです。この2つの言語に触れたことのあるユーザーは非常に多いと推測されます。このことから「より小さな学習コストでDartを習得できる潜在ユーザーが多数存在する」とも言えるわけです。

4. Flutterの習得が向いている人

最後に、Flutterの習得が向いている人をタイプ別に紹介します。

フロントエンド側のスキルも身に着けたいエンジニア

すでにサーバーサイドでの開発経験があり、今後はフロントエンド側のスキルも磨きたいというエンジニアであれば、Flutterは有望なスキルのひとつです。Dartはサーバーサイドで使用する言語と似た特性を持つために、学習コストが小さい言語です。JavaやJavaScriptの知識をベースとしてDartを学ぶことで、Webアプリ開発の実践力を高められるでしょう。また、LinuxやWindowsといったサーバー向けプラットフォームにも対応しているため、「AndroidやiOSは扱ったことがない」というエンジニアでも移行しやすいです。

アプリケーションエンジニアとしてキャリアを積みたいエンジニア

アプリケーションエンジニアとしてキャリアを積みたいのであれば、ほぼすべてのプラットフォームに対応するFlutterのスキルが役立つでしょう。今後はスマートフォン・PC・タブレットで同時に利用できるアプリケーションが一般的になるため、クロスプラットフォームに対応できるか否かでキャリアの幅が変わってきます。ほぼすべてのプラットフォームに対応するFlutterを使いこなすことで、参画可能なプロジェクトの幅が拡がるため、キャリアを積み上げやすくなるわけです。

JavaScriptやJavaの基礎知識がある初級エンジニア、学生など

JavaScriptやJavaは、学習ソースが豊富であり、独学に向いている言語です。もし学習時間に余裕があるのならば、こうした言語とともにFlutterも学んでみてはいかがでしょうか。Flutterで使用されているDartは、JavaやJavaScriptに文法が近いだけでなく、用途も似ているからです。

5. まとめ

Flutterは、2018年にGoogleがリリースしたアプリケーション開発用フレームワークです。オープンソースソフトウェアであることから、無償で使用することができる点や、1種類のソース(ワンソース)での複数のプラットフォームに対応できる点が特徴です。ここ2~3年で世界的に注目を集めており、中でもクロスプラットフォーム対応アプリの開発で重用されています。
すでにアプリケーションエンジニアとして働いている方の場合、今後はFlutterに関するスキルを磨くことで、アプリケーションエンジニアとしてのキャリアアップにつながるでしょう。

ITエンジニア・Webクリエイターの転職ならレバテックキャリア

レバテックキャリアはIT・Web業界のエンジニア・クリエイターを専門とする転職エージェントです。最新の技術情報や業界動向に精通したキャリアアドバイザーが、年収・技術志向・今後のキャリアパス・ワークライフバランスなど、一人ひとりの希望に寄り添いながら転職活動をサポートします。一般公開されていない大手企業や優良企業の非公開求人も多数保有していますので、まずは一度カウンセリングにお越しください。

転職支援サービスに申し込む

また、「初めての転職で、何から始めていいかわからない」「まだ転職するかどうか迷っている」など、転職活動に何らかの不安を抱えている方には、無料の個別相談会も実施しています。キャリアアドバイザーが一対一で、これからのあなたのキャリアを一緒に考えます。お気軽にご相談ください。

「個別相談会」に申し込む

プロのアドバイザーがあなたのお悩みや疑問にお答えします

- 転職個別相談会開催中 -

相談内容を選択してください

※転職活動や求人への応募を強制することはありません

人気の求人特集

内定率が高い

関連する記事

人気の記事

スキルアップ記事トップへ

アプリケーションエンジニアの求人・転職一覧