FlutterとDartとは?押さえておきたい基礎知識を紹介
はじめまして、エンジニアスタイル編集部です!
コラムページでは、ITフリーランスに向けてお役立ち情報を発信します。Twitterではホットな案件を紹介してまいりますので、ぜひフォローをお願いいたします!
本記事が、皆様の参考になれば幸いです。
経験がまだ少ない方にもわかりやすく説明するために、初歩的な内容も記載しております。記事も長いので、実務経験豊富な方は、ぜひ目次から関心のある項目を選択してください。Flutter、Dartの案件一覧をご覧いただけますのであわせてご確認ください。
目次
そもそもFlutterとはどのような言語か
1つのコードでさまざまなプラットフォームでアプリ開発ができると話題のFlutterですが、一体どのような言語なのでしょうか。トヨタやアリババなどの大企業もFlutterを導入するなど、注目のプログラミングツールです。今回はFlutterの基本知識やメリット・デメリットなどをまとめて解説します。
Flutterの概要
Flutterは、Googleが開発したオープンソースのフレームワークで、主にAndroidやiOSのクロスプラットフォームでのアプリケーション開発に利用されています。単一のコードベースからモバイルアプリ・Webアプリ・デスクトップアプリの開発が可能で、それぞれに共通したUIを一度に作れるフレームワークです。FlutterはDartというJavaやJavaScriptのような言語の特徴を組み合わせたプログラミング言語で開発されており、直感的で使いやすい特徴を持っています。Flutterを使った開発にはこのDartの知識が必要です。
Flutterの特徴
Flutterの人気の理由として、次に紹介する4つの特徴が挙げられます。汎用性・柔軟性・俊敏性に優れたFlutterの特徴を解説しますので、参考にしてください。
多様なプラットフォームに対応可能
Android・iOS・Web・Windows・macOS・Linuxなど多くのプラットフォーム向け実装に対応しています。クロスプラットフォームの特性により、同じコードベースで異なるプラットフォーム向けのアプリが開発可能です。開発効率を向上させ、コストや時間を節約ができます。また、Flutterのレンダリングエンジンがネイティブのコントロールと見た目に近いUIを提供するため、Webアプリがネイティブアプリのように感じられるのも美点です。
ウィジェットツリー構造
ウィジェットツリーは、ウィジェット(Widget)と呼ばれるUIコンポーネントの階層的な構造を表します。ウィジェットはボタン・テキスト・イメージなどのUI要素を表すもので、ウィジェット同士を組み合わせて画面全体のUIを構築することが可能です。ウィジェットツリーは、ルート(Root)ウィジェットから始まり、子ウィジェットが親ウィジェットの中に入れ子になって配置されます。つまり、親ウィジェットの中に子ウィジェットがあり、子ウィジェットの中にさらに孫ウィジェットがあるといった具合です。このような階層的な構造を持つことで、複雑なUIを柔軟に作成できます。
ホットリロード
Flutterのホットリロード(Hot Reload)は、開発者がアプリのコードを変更後、即座に内容を確認できる機能です。本来アプリ開発では、コードを変更した後はアプリを再ビルドし、再起動する必要があります。しかし、Flutterのホットリロード機能を使うと、再ビルドや再起動の手間を省くことが可能です。この機能は開発者がアプリの見た目や動作を素早くテストしたいときに役立ちます。例えば、ボタンの色を変更したい場合、コードを変更して保存するだけでアプリが自動で再描画され、変更内容の確認が瞬時に可能です。これにより、アプリのデザインやユーザーエクスペリエンスを迅速に改善できます。
宣言型UIプログラミングが用いられている
Flutterの宣言型UIプログラミングとは、UIの宣言に焦点を当てたプログラミングスタイルです。従来の命令型プログラミングでは、UIの構築や更新に対して手動で指示を出す必要がありました。しかし、宣言型UIプログラミングでは、UIの外観や動作を指定するための手順や命令を書く代わりに、UIの構造や振る舞いを記述するだけで目的のUIを作成できます。UIの外観や動作を直接指定するのではなくUIの意図を明確に宣言することで、より直感的にUIを作成することが可能です。
Flutterで何ができるのか
Flutterではどのようなことができるのでしょうか。ここからはFlutterで開発可能なアプリの種類と、実際にFlutterを使って作成されたアプリやサービスの例を紹介します。
多様な環境でアプリケーション開発が可能
Webアプリケーション
Webブラウザ上で動作するアプリを作成することができます。モバイルアプリ開発のイメージが強いFlutterですが、パソコンでもFlutterアプリを実行可能です。例えば、ブラウザ上で動作するオンラインゲームやSNSなども作成できます。 Flutterの豊富なUIコンポーネントを活用し、ユーザー登録・プロフィール作成・投稿・コメントなど、一般的なSNS機能を実装可能です。
Android
Androidスマートフォンやタブレットなどのデバイスで動作するアプリを開発することができます。Flutterはクロスプラットフォーム開発をサポートしているので、同じコードベースを使用してAndroidとiOSの両方に対応したアプリを作成することも可能です。Androidアプリを作成するのと同時に、iOS向けのアプリも作成することができます。
iOS
iPhoneやiPadなどのAppleのデバイスで動作するアプリを開発可能です。Flutterは、iOSデバイスの機能を活用するための多くのパッケージやプラグインを提供しています。カメラ・位置情報・ネットワーク通信・ストレージへのアクセスなど、様々なデバイス機能を利用してアプリを開発することが可能です。
デスクトップ
Windows・Mac・Linuxなどのデスクトップ環境で動作するアプリを作成可能で、パソコン上で独立したアプリケーションを実行できます。Flutterはアニメーションエンジンを備えており、デスクトップアプリに動きのあるUIやトランジションを実装でき、独自のビジュアルエフェクトやカスタムアニメーションも作成できるのも特徴的です。
Flutterで作られたアプリやサービスにはどんなものがあるのか
Google広告
Googleが提供するオンライン広告プラットフォームであるGoogle広告はFlutterで作られています。企業や広告主がGoogleの検索エンジンや関連ウェブサイトで広告を配信し、ターゲットユーザーに対して効果的な広告キャンペーンを実施するためのサービスです。
TOYOTA
トヨタ自動車は、コックピットのUX/UI設計・開発フローの一部で、Flutterを採用しています。現時点では開発段階ですが、次世代カーナビなどの車載器でFlutterを使用する予定です。
閑魚(Xianyu)
閑魚(Xianyu)は、中国で非常に人気のあるオンラインショッピングプラットフォームで、日本のメルカリのような存在です。アリババグループが運営しており、個人や小売業者が自身の商品を出品し、中国国内外のユーザーが商品を購入することができます。
じゃらん
じゃらんは日本の宿・ホテル予約アプリで、Flutterを使用して開発されました。これにより、iOSとAndroidの両方で同じように動作します。リッチな温泉旅館から便利なビジネスホテルまで、目的に合わせて簡単に検索できるのが特色です。
これらは一部の例であり、Flutterを使用して作られたアプリやサービスはさらに多岐にわたっており、今後に期待です。Flutterの柔軟性とパフォーマンスにより、クロスプラットフォームのアプリ開発において幅広い可能性が開かれています。
Flutterで使用される「Dart」とは何か
Dart(ダート)は、Flutterの開発に使用されるプログラミング言語です。FlutterのコードはほとんどがDartで書かれています。Flutterを学ぶにはDartの構文や機能について理解しておきましょう。そんなDartについて基本的な知識を紹介します。
そもそもDartとは?
Dart(ダート)は、Googleが開発したプログラミング言語です。オブジェクト指向で、クライアントサイドとサーバーサイドのアプリケーション開発をサポートするために設計されています。高いパフォーマンスとスケーラビリティを持ち、コンパイルや実行が高速でクロスプラットフォーム対応です。Flutterは、このDartを使ってアプリケーションのロジックやUIを記述します。Googleのプロジェクトにおいて主要な言語として利用されているプログラミング言語です。
Dartの特徴
Dartは静的型付け言語であり、変数や関数の型を明示的に宣言できるのが便利です。静的型付けにより、コンパイル時の型チェックが行われ、タイプミスや予期せぬエラーを早期に検出できます。またJIT(Just-in-Time)コンパイラとAOT(Ahead-of-Time)コンパイラの両方をサポートしているのも特徴です。JITコンパイラは開発時の効率的なデバッグやホットリロードを可能にし、AOTコンパイラはパフォーマンスの向上と高速な起動を実現します。Dartの学習リソースは公式ドキュメントやオンラインのチュートリアルなどで入手できるので、まずはDartの基礎を学んでからFlutterの開発に取り組むのがおすすめです。
Flutterで開発を進めるメリット
費用を抑えたスピード感のある開発がFlutterを採用する大きなメリットです。では具体的にどのような部分に価値があるのか、4つのメリットを紹介します。
スピーディーな開発を実現できる
上述したホットリロード機能が開発のスピードを大幅に向上させます。コードの変更を即座に反映させることができ、リアルタイムで変更を確認しながら開発を進めることが可能です。これによりUIの調整や動作の確認など迅速な反復作業ができます。さらにFlutterは再利用可能なコンポーネントで構築されているのもポイントです。一度作成したコンポーネントを再利用して開発時間を節約し、一貫性のあるUIを維持するのに適しています。
iOS / Android向けネイティブアプリの開発両方を実行できる
Flutterの大きなメリットの1つはクロスプラットフォーム開発です。これにより、開発者はiOSとAndroidの両方向けに魅力的なアプリを同時に開発することができます。1つのコードベースでiOSとAndroidの両方に対応したアプリを開発することで、開発コストや時間の節約に繋がり有益です。また、バグの修正や機能の追加などのメンテナンスも1度の作業で済むため、効率的な開発が期待できます。さらには、両方向けにアプリを提供することで、ユーザー層を広げて収益の最大化を目指せるのも利点です。
Flutterの公式サイトにアプリ開発に必要なドキュメントが多数ある
Flutterの公式サイトには、様々なチュートリアルがあります。例えば、Building layoutsでは、Flutterのレイアウトメカニズムを使用してレイアウトを構築する方法を知ることが可能です。Animations in Flutterでは、Flutterのアニメーションパッケージの基本クラスである、コントローラー・Animatable・カーブ・リスナー・ビルダーなどが説明されています。また、Flutterの公式YouTubeチャンネルやTwitterでも最新情報を得られるので、併せてチェックすることでさらに理解を深めることが可能です。
保守コストを削減できる
Flutter はクロスプラットフォームフレームワークであるため、単一のコードで iOS と Android の両方のアプリを開発できるのが魅力です。コードを再利用すれば、必要なエンジニアの人数が少なくなり保守コストを節約できます。またDartとFlutterの両方が高速で効率的に設計されているため、スムーズで応答性の高いアプリを作成できるのも理由の1つです。応答性の高さは、バグやクラッシュの発生を減らせるので保守コスト削減に繋がります。
Flutterで開発を進めるデメリット
Flutterはリリースしてから日が浅いということもあり、情報や機能が不十分と感じることも少なくありません。Flutterの4つのデメリットについて詳しく解説します。
日本語のマニュアル・情報が少ない
Flutterは比較的新しい技術であり、日本語の情報やドキュメントは他の言語に比べて少ない傾向があります。特に最新のアップデートや新機能に関する日本語の情報は、英語や他の言語に比べて遅れがちです。ただし、Flutterの公式ドキュメントやコミュニティの英語情報は非常に充実しており、解決策やサンプルコードを見つけることができます。また、英語ができる場合は、オンラインのコミュニティやフォーラムでの情報収集も有効です。今後Flutterの人気が増え、日本語情報の充実に期待しましょう。
ライブラリが少ない
Flutterは他の成熟したフレームワークと比較すると、利用可能なライブラリやパッケージの数は少ないと言えます。特に特定のドメインや機能に特化したライブラリは限られているのが懸念点です。ただし、Flutterのコミュニティは非常に活発であり、新しいライブラリやパッケージが頻繁に開発されており、PubやGitHubなどのオープンソースプラットフォームで、ライブラリが公開されています。FlutterはカスタムUIや機能を作成することも可能なので、必要な機能を自身で実装することでライブラリの少なさをカバーしましょう。
Flutter人材がまだ多くない
2018年にリリースしたFlutterの歴史は浅く、他のモバイルアプリ開発フレームワークに比べて人材の供給は限られています。そのため、Flutterのエキスパートや経験豊富な開発者を見つけることは、他のより一般的な技術よりも簡単とは言えません。ただし、近年Flutterの人気は急速に増加しており、コミュニティや開発者の数も増えています。それに伴い、Flutterの人材の供給も増えるはずです。Dartの知識や経験を持つ開発者もFlutterの開発に参加できるため、将来的にはより多くの開発者がFlutterのスキルを持つようになると予想されます。
Flutterの仕事自体が限定的
Flutterは主にモバイルアプリ開発に使用されるフレームワークであり、特にiOSとAndroidのクロスプラットフォーム開発が強みです。そのためFlutterエンジニアが他の領域やプラットフォームでの開発のチャンスを逃す可能性があります。とはいえFlutterは、ウェブ開発やデスクトップアプリ開発にも利用できるので、仕事の幅が狭いわけではありません。また、FlutterのスキルはUI/UXデザインやフロントエンド開発にも役立つことがあるので、他のフロントエンドフレームワークにも応用することができます。
まとめ
Flutterは多様なプラットフォームに対応しており、単一コードで複数のOS向けにアプリを開発できるのが最大の魅力です。それに伴い、開発やメンテナンスにかかる時間の短縮、人件費の節約につながるといった点も大きなメリットと言えます。日本での浸透は少し遅れがちですが世界ではすでにトレンドです。国内でも大企業がFlutterを採用するなどの動きもあり、今後Flutterで作るクロスプラットフォームという選択肢が普及すると予想されます。Flutter開発を行うには開発言語であるDartを学ぶことが重要です。これからのFlutterの人気上昇に向けて、情報収集や学習に注力しておくことをおすすめします。
- CATEGORY
- 学習
- TAGS
-
【クラウドエンジニア(AWS)】Dart/Flutter/フルリモート/AIのSaaSプロダクトにおけるアプリエンジニア募集!の 求人・案件
- 800,000 円/月〜
-
その他
- Dart
-
【データマイニング】電気小売会社におけるデータアナリスト案件の 求人・案件
- 950,000 円/月〜
-
その他
- Python SQL PHP Dart その他
-
【Flutter/フルリモート/副業】SaaSモバイルオーダーシステム機能拡張における要件定義~開発の 求人・案件
- 600,000 円/月〜
-
その他
- JavaScript Dart SQL その他 TypeScript
-
【フルリモ / AWS / HR Tech】クラウド人材管理ツールのセキュリティエンジニア業務の 求人・案件
- 800,000 円/月〜
-
渋谷
- Python Go言語 PHP Dart SQL JavaScript その他 TypeScript
-
Saasアプリ開発エンジニア Python、PostgreSQL、GoogleCloudの 求人・案件
- 650,000 円/月〜
-
その他
- Python SQL Java Dart
-
クラウドエンジニア GoogleCloudの 求人・案件
- 650,000 円/月〜
-
その他
- Python Dart SQL
-
【Flutter/フルリモート可能】自社サービスのアプリ開発の案件・求人の 求人・案件
- 700,000 円/月〜
-
その他
- Dart JavaScript ECMAScript
-
【フルリモ / Go/PHP / フレックス】タレントマネジメントシステムおよび関連ツールの開発業務の 求人・案件
- 880,000 円/月〜
-
その他
- PHP Go言語 Dart SQL JavaScript その他 TypeScript
-
【クラウドエンジニア(AWS)】【業務委託(準委任)】エネルギー系アジャイル開発の 求人・案件
- 1,000,000 円/月〜
-
新宿
- Dart TypeScript
-
【AWS】BFF検討構築の開発メンバー|製造小売業のエンジニア求人・案件の 求人・案件
- 1,100,000 円/月〜
-
その他
- Dart Java PHP TypeScript
-
【フルリモ / Go / DX支援】新プロダクトおよび新機能開発などの 求人・案件
- 720,000 円/月〜
-
六本木・広尾・麻布十番
- Go言語 PHP Dart SQL JavaScript その他 TypeScript
-
【フルリモ / インフラ / 週4日】ペットテック業界で活躍するインフラエンジニアの 求人・案件
- 820,000 円/月〜
-
その他
- PHP Python Go言語 Dart SQL JavaScript その他
-
【フルリモ / Go / HRTech】自社プラットフォームのサーバーサイドエンジニアの 求人・案件
- 850,000 円/月〜
-
渋谷
- Go言語 PHP Dart SQL JavaScript その他 TypeScript
-
【フルリモ / TypeScript / 週4日】プロダクトの可用性を高める為の各種対応(リファクタリング/テスト/導入等)人材募集の 求人・案件
- 880,000 円/月〜
-
六本木・広尾・麻布十番
- TypeScript Dart JavaScript Nodejs Python その他
-
【フルリモ / Python / 週4日】AWS×アプリポジション(社内システムDXプロジェクト)の 求人・案件
- 760,000 円/月〜
-
その他
- Python Java TypeScript PHP Go言語 Dart SQL JavaScript その他
-
【フルリモ / PHP / 週4日】クラウド人材管理ツールの新規機能の開発や改善・修正業務の 求人・案件
- 770,000 円/月〜
-
渋谷
- PHP Go言語 Dart SQL JavaScript その他 TypeScript
-
【Java(Spring)】【業務委託(準委任)】国内不動産管理会社向けAPP開発の 求人・案件
- 800,000 円/月〜
-
その他
- Java Dart JavaScript
-
【Java】特許取得アプリ機能開発の 求人・案件
- 510,000 円/月〜
-
その他
- Java C# Python Go言語 Rust Dart SQL その他 TypeScript
-
【PHP】電子契約SaaSにおけるフロントエンド開発要員募集の 求人・案件
- 800,000 円/月〜
-
その他
- PHP JavaScript SQL その他
-
【React_フルリモート相談可】】Senior Frontend Engineer(シニアフロントエンジニア)の 求人・案件
- 1,100,000 円/月〜
-
その他
- Sass JavaScript TypeScript Nodejs
-
【C++】マイコン、及びWinアプリ開発の案件・求人の 求人・案件
- 450,000 円/月〜
-
その他
- C++ C# SQL
-
【AS/400】駐車場管理システム新規構築の 求人・案件
- 550,000 円/月〜
-
五反田・大崎・目黒
- その他
-
【Android】証券向けスマホアプリ開発案件の 求人・案件
- 750,000 円/月〜
-
その他
- Swift Kotlin
-
【Java】メガバンク系証券会社向け社内ポータル刷新案件の 求人・案件
- 700,000 円/月〜
-
その他
- Java Perl SQL
-
【PowerCOBOL/C言語/C++】放送局向け顧客管理システムマイグレーション開発案件の 求人・案件
- 700,000 円/月〜
-
その他
- C++ COBOL C言語
-
次期会員管理システム構築PJのユーザ教育と受入テスト支援|サービス業のエンジニア求人・案件の 求人・案件
- 700,000 円/月〜
-
大阪府
-
【C言語/C++】外貨預金パッケージ導入PJ開発支援|金融のエンジニア求人・案件の 求人・案件
- 700,000 円/月〜
-
その他
- C++ C言語 SQL
-
【クラウドエンジニア(AWS)】売上集計処理や在庫管理などを行う小売業基幹システムの刷新プロジェクトにおける詳細設計以降の開発の 求人・案件
- 900,000 円/月〜
-
その他
-
【PHP(Laravel)】Webアプリケーションの新規開発ネットワーク機器の設定を行うアプリケーションの 求人・案件
- 500,000 円/月〜
-
恵比寿・代官山
- PHP SQL TypeScript
-
【クラウドエンジニア(AWS)】MSPサービス提供、運用業務の 求人・案件
- 500,000 円/月〜
-
その他
-
【Linux/C++/リモート併用】4G仮想化無線基地局装置_5G仮想化無線基地局装置_通信制御ソフトウェアの開発業務の案件・求人の 求人・案件
- 550,000 円/月〜
-
神奈川県
- C++
-
【PM】既存ID認証システム運用推進案件の 求人・案件
- 1,200,000 円/月〜
-
その他
-
【PMO】スマートフォンアプリ開発案件の 求人・案件
- 1,850,000 円/月〜
-
その他
-
【Unix/Windows】教育関係サーバ構築のリーダー業務支援のエンジニア求人・案件の 求人・案件
- 750,000 円/月〜
-
その他
-
【HULFT/EDI】新規システム構築の妥当性確認および移行対応支援|生協のエンジニア求人・案件の 求人・案件
- 950,000 円/月〜
-
新宿
-
【Python】CRM導入支援の 求人・案件
- 670,000 円/月〜
-
その他
- Python C# SQL JavaScript