card-image

公開日:2019年5月13日 更新日:2021年8月13日

Flutterとは? エヌ次元が企業としてFlutter開発を採用する理由

シェア

Google社のアプリケーションフレームワーク「Flutter(フラッター)」。
同社が開発した「Dart」を開発言語とし、Android / iOS向けクロスプラットフォームのフレームワークとして公開されました。

そして2018年12月5日、初の正式版「Flutter Version 1.0」を発表、リリースプレビュー時のいくつかの要望や不具合が解消されて、より使いやすいフレームワークへと進化しています。

私たちエヌ次元株式会社(以降、エヌ次元)は、そのすこし前となる2018年3月より業務における開発技術として正式採用しました。

本記事では、企業としてFlutterに注目したポイントはどこにあるのか、実際に業務として使ってみてどうなのかという部分について、Flutterの基本的な知識や情報とあわせて解説していきます。

※本内容は、Flutterのウィジェット詳細や解説、ソースコードの掲載等はおこなっておりません。
それらを確認したい場合は、こちらの わかりやすいFlutterリファレンス をご参照ください。

<追記:2019年5月13日>
Google I/O 2019における「Flutter for Web」の発表により、内容を一部加筆・修正しています。
詳細はFlutter for Webとしての機能追加をご確認ください。

目次:

Flutterとは

Flutter
Flutterより引用

まずはじめに、Flutterとは何かという点についてふれていきます。

Flutter(フラッター)は、Googleによって開発されたフリーかつオープンソースのモバイルアプリケーションフレームワークである。FlutterはAndroidやiOS向けのアプリケーションの開発に利用されている。

引用:Flutter – Wikipedia

Flutterは、オープンソースのモバイル向けアプリケーションフレームワークとして開発されました。開発言語はDart。クロスプラットフォームの開発フレームワークとしてAndroid / iOS向けのアプリケーション開発が可能です。

Flutterの独自のフレームワークでは、すべてのUIコンポーネントをWidget(ウィジェット)というクラスを用いて構築します。すべてがWidgetであることにより、高い拡張性と柔軟性を備えたコンポーネント指向の実装を可能にしています。

Flutter for Webとしての機能追加

<追記:2019年5月13日>

2019年5月8日、Googleは自社が開催するイベント「Google I/O 2019」にて、Flutterの新機能「Flutter for Web」のテクニカルプレビューリリースを発表しました。

Googleは2018年12月、FlutterをAndroidやiOSだけでなく、Mac、Windows、Linux、Webブラウザにもサポートしたマルチプラットフォームフレームワークとして発展すると伝えていましたが、今回の発表によって、より実現性を感じさせるものとなりました。

現在は試用版のみのリリースとなりますが、近いうちにひとつのソースコードでAndroid、iOS、Mac、Windows、Linux、そしてWebブラウザに対応したマルチプラットフォームフレームワークへ進化するでしょう。

参考:
Google Developers Blog: Flutter: a Portable UI Framework for Mobile, Web, Embedded, and Desktop

Flutterのメリット・デメリット

Flutter
Flutterより引用

実際にFlutterをさわって感じた、メリット・デメリットはどこにあるのか。
まずは、Flutterのメリットからみていきましょう。

Flutterのメリット

クロスプラットフォーム開発
・ひとつのソースコードで、クロスプラットフォームでのUI構築ができる
美しいUIと高い生産性の両立
・公式ライブラリのUIコンポーネントが豊富なので、柔軟なデザインに対応できる
・それによりUI実装のリソースを削減、高い生産性を実現できる
高い堅牢性を誇るDart言語
・Dart言語は、JavaやJavaScript、Rubyなどの様々な言語から影響を受けたオブジェクト指向言語
・静的型付け言語として高い堅牢性を持つので、安全性やセキュリティを重視した開発が可能
・高速な動作を可能とするため、モバイルアプリケーションにおいても充分なパフォーマンスを発揮する

冒頭でもふれたように、Flutterは発表されて間もないフレームワークです。
後発としての強みをいかし、既存のフレームワークの良さを取り入れつつ、それまでのフレームワークが抱えていた課題の改善を目指したつくりになっています。

Skiaを用いたレンダリングエンジンによるコードの共通化、公式ライブラリのUIコンポーネントによる自由度の高いUI実装、そしてHot Reloadによるビルド時間短縮の結果、開発リソースを大幅に削減してくれます。

また、静的型付け言語であるDartは、安全性やセキュリティ面を重視した堅牢性の高いアプリケーションを開発することができます
加えて、AOTコンパイラにより高速な動作を可能としているため、モバイルアプリケーションにおいても充分なパフォーマンスを発揮します。

Flutterのデメリット

一方で、デメリットとして挙げられる点はどのようなものがあるのでしょうか。

複雑なUIを実現するオープンソースライブラリが少ない
・後発技術なので情報が少なく、公開されているオープンソースライブラリも多くない。複雑なUIを実現する際に参考にできるライブラリや資料が溜まっていない
OSの機能に依存するコードは個別の実装が必要
・通知機能などOSに大きく依存する機能については、各プラットフォームごとに実装する必要がある
日本語で書かれた資料が少ない
・日本ではまだ採用事例が少なく、開発者の人口も多くないため、日本語で書かれた資料は多くない

Flutterは、公式のライブラリを活用することでUI構築が容易となります。
ですが、ネイティブを模したUIや複雑なUIを求めるのであれば、それぞれが個々で実装しなくてはなりません。

後発技術であるFlutterは、公開されているオープンソースライブラリが少なく、参考にできる資料やデータが溜まりきっていません
そのため、UIによっては構築・実装の大部分を開発者自身でおこなう必要があります

この点はOSの機能に依存した実装をおこなう場合も同様です。より複雑な仕様を求めるのであれば、各プラットフォームごとに適した実装が必要となります。

またFlutterは、日本での採用事例がまだ少ないため、日本語で書かれた資料があまり多くありません。英語での情報インプットに慣れている方なら問題ありませんが、そうでない方は調査に時間を要する場合があります。

しかしこれらのデメリットは、発表されて間もない技術や既存のフレームワーク、その他の開発方法にも当てはまります。オープンソースライブラリや日本語で書かれた資料についても、開発事例が増えると共に充実していくでしょう。

FlutterとReact Nativeを比較

Flutterを既存のフレームワーク「React Native」と比べるとどのような違いがあるのか。開発をおこなう上で比較しておきたいポイントは以下の点ではないでしょうか。

  • 開発言語はなにか
  • 環境構築にどれくらいの手間がかかるか
  • よりネイティブを意識したUI実装が可能か
  • エラー発生時に原因を見つけやすいか
  • 公式サポートや参考資料は充実しているか

こちらでは、開発をスムーズに進めるために事前に確認しておきたい5項目について比較してみました。

1. 開発言語で比較

Flutter React Native
Dart JavaScript

2. 環境構築の方法で比較

Flutter React Native
Flutterと、公式のAndroid Studio, Visual Studio Code用のプラグインをインストールする JavaScriptのパッケージ管理ツールを用いて、複数の依存パッケージをインストールする

3. UI実装の方法で比較

Flutter React Native
Dartのみで実装。Material DesignをベースとしたUI構築。iOSを模したデザイン実装も可能 ネイティブのコンポーネントを使用。ユーザにとって慣れたUIを実装・提供しやすい

4. エラー時の解決のしやすさで比較

Flutter React Native
Dartで完結するため、Dartのソースコードを修正することでほぼ解決する ネイティブコンポーネントを呼び出しているため、JavaScriptまたは各プラットフォーム上でのエラーの対処が必要

5. 公式サポート・日本語資料の充実度で比較

Flutter React Native
公式ドキュメントは正確で、よく整理されており、充実している。
日本語資料はほとんどない
最新情報は多いが、正確ではない場合がある。
日本語資料は豊富に用意されている

実際のところ、Flutter、React Nativeそれぞれに特徴・特色があり、一概に「ここが優れてるからこの技術の方が良い」と言い切れるものではありません。

  • 開発担当となるプログラマの技量
  • かけられる開発リソースや学習コスト
  • 開発予定のモバイルアプリケーションの実装難易度

上記の違いにより “どちらの技術を採用する方が良いか” の答えは変わります。
その時々の開発スタイルにはまる技術はどちらなのか、しっかりと見極める必要があるでしょう。

企業としてFlutterを採用した理由

2018年3月2日、多くの開発会社がFlutterの採用を検討している中、エヌ次元はFlutterの正式採用に踏み切りました。

  • ひとつのソースコードでおこなうクロスプラットフォーム開発
  • Hot Reloadによるビルド時間の短縮
  • 柔軟なデザインに対応できる豊富なUIコンポーネント
  • 堅牢性が高く安全性・セキュリティを重視したDart言語

Flutterのメリットは多く、当時は「デメリットはない、採用しない理由はない」とさえ感じたほどです。しかし、これらの理由以上にエヌ次元が重視したメリットがもうひとつあります。

それは「スキルレベルの異なるエンジニア間での共同作業が容易である」という点にあります。

Flutterは、Widgetの組み合わせを覚えることで、初心者プログラマでも比較的簡単に開発に参加しやすく、開発フローをうまく切り分けることができます。
また、Widgetの拡張性は非常に高く、複雑な構築が必要な場合でも、そう高くないコストでの実装が可能です。

そのため、スキルレベルの異なるエンジニアによる共同開発が可能となり、結果として熟練プログラマのリソースの分散、初心者プログラマの技術向上へと繋がります。

Flutterが持つポテンシャル、それを支えるDart言語、そのどちらもがエヌ次元の掲げる「人類の次元を高め、教え合う世の中づくり」の理念とうまくかみ合った形となりました。

以来、エヌ次元は、実際の業務を通しながらFlutterを扱える人材を育てていくようにシフトしていきました。

実際に業務(案件)に使ってみて

当時、請けていたReact Native案件のひとつをFlutter開発へ切り替えました。
クライアントへの提案、実装、納品…一連の流れを通して感じたことがいくつかあります。

  • Flutterでも業務(案件)は問題なくおこなえる
  • Flutterなど、新しい技術へ注目しているクライアントはわりと多い
  • プログラミング初心者でも、実務レベルでの経験値を積みやすい

結果として、Flutterでのアプリ制作はクライアントからご好評をいただくこととなりました。

クロスプラットフォームであるFlutterは、React Nativeと同様に開発にかかる負担が少ないことが魅力的です。また、「iOSはビルドできるのにAndroidはビルドできない」といった不具合がかなり少なく、プロジェクトマネジメントの観点でも安心を得ることができました。

それでも一部、それぞれのOSで生じた問題はありましたが、そのほとんどがネイティブ開発でも起こり得るようなもので、“Flutterだから”というような問題は見受けられませんでした

このような流れを通して、Flutterは非常に完成度の高い技術であると判断しました。

まとめ:エヌ次元とFlutter

まとめ:エヌ次元とFlutter

Flutterは、歴史の浅いクロスプラットフォーム開発のフレームワークです。
すでにReact Nativeでの深い開発技能をお持ちの方、ネイティブアプリ開発を求める方には、あまり縁のない技術なのかもしれません。

あくまでエヌ次元としての回答ですが、Flutterは非常に完成度が高く、それでいて安定しており、個々のスキルアップに繋げやすいフレームワークといえます。

技術の会得は、ただ勉強するだけではなく業務を通してさわることが一番の近道です。当然ながら制作物の品質を下げないことが必須条件となりますが、Flutterはそれを同時に得ることのできる技術であると考えています。

クオリティの高い制作を可能とし、業務を通しながら個々のスキルアップを狙うことができるFlutterは、モバイルアプリ制作をおこなう企業にとって、とてもおすすめのフレームワークといえます。

そして2019年5月、「Google I/O 2019」にて「Flutter for Web」のテクニカルプレビューリリースが発表されました。AndroidやiOSといったモバイルアプリケーション制作だけでなく、マルチプラットフォームフレームワークへと発展するFlutterは、これまで以上に多くの場面で活躍する技術となるでしょう。

今後もエヌ次元は、Flutterを中心とした新たな技術による開発・技術検証を積極的に実施して、あわせて技術者育成に力を入れていくことを方針に、企業活動をおこなってまいります。

Flutterに興味のある方を募集しています

エヌ次元は、新しい言語や技術であっても「間違いなく使えるものである」と判断した場合、積極的に実務に取り入れて社会へ発信、企業として挑戦し続けていくことを心がけています。

私たちと一緒に、新たな技術へ挑戦したい企業の皆様、実務を通して勉強し、自らのスキルアップに繋げたいエンジニア・プログラマーの皆様をいつでも募集しています。

  • Flutterなどの新たな言語や技術に興味がある方
  • Flutterを取り入れたアプリ制作を検討している企業様
  • Flutterをさわってみたいエンジニア・プログラマーの皆様

これらに当てはまる方は、以下のフォームよりお気軽にお問い合わせください。

お問い合わせはこちら

エヌ次元のFlutter案件

こちらでは、エヌ次元が手がけたFlutter案件をご紹介いたします。
また、こちらには掲載しておりませんが、受託開発案件として、BtoC(EC系)、CtoC(シェアリングエコノミー系)の制作実績があります。

・キャラクターコレクションアプリ「キャラコネクト」
「キャラコネクト」は、アニメやゲームなどのキャラクターが登場し、オリジナルのセリフを話しかけてくれる iOS / Android対応のアプリです。※2020年6月30日をもってサービスを終了しました
キャラクターコレクションアプリ「キャラコネクト」

キャラクターコレクションアプリ「キャラコネクト」

・わかりやすいFlutterリファレンス
プログラミング初心者にもわかりやすい、Flutterの日本語リファレンスを作成しました。
Flutter開発に役立つように、トピック毎にまとめて解説しています。
わかりやすいFlutterリファレンス

わかりやすいFlutterリファレンス