公開日:2024.05.15
Share Twitter Facebook LINE URL Copy Copied!

Flutter革命―いま再びのマルチプラットフォーム

Flutter革命―いま再びのマルチプラットフォーム

いまアプリ開発において、Flutterが 注目されています。Flutterとは、Googleが開発したオープンソースのUIソフトウェア開発キット。一つのコードベースからiOS、Android、Web、およびデスクトップアプリケーションを構築することができるクロスプラットフォーム技術です。その魅力は、高いパフォーマンスと効率的な開発フローにあり、開発者にとっての生産性の向上と、ユーザーにとっての滑らかな体験を実現できることにあります。ゆめみもまた、Flutterを技術標準の一つとして取り入れています。

今回の座談会では、Flutterに関する書籍を最近出版したばかりの渡部、そしてFlutter開発の最前線で活躍する岡山に、なぜゆめみがFlutterでの開発に力を入れているのか、話を聞きました。(聞き手:工藤元気)

渡部陽太(よーたん)

新卒でSIerに入社しアプリケーション開発の経験を積む。その後,事業会社への転職を機にモバイルアプリ開発に軸足を移す。新規サービス立ち上げを複数経験。2020年にiOS/Androidテックリードとして株式会社ゆめみに入社。複数のプロジェクトを支援する傍ら,新人研修の作成や新技術推進を行う。2022年より技術担当取締役に就任。2024年3月7日に技術評論社より『Flutter実践開発── iPhone/Android両対応アプリ開発のテクニック』を上梓。

X(旧Twitter):@yohta_watanave

GitHub:watanavex 

岡山 達哉(おかやまん)

3年間スタートアップでインフラ・サーバーサイド・フロントエンド・モバイルアプリという全般的な経験を積み、2019年ゆめみに入社。現在は Flutter テックリードとして、育成・採用・案件サポート・グループ運営に携わっている。趣味はプログラミングで遊ぶこと。X(旧Twitter):@blendthink

なぜFlutterを使うのか?

——いま、アプリ界隈ではFlutterの名前を聞く事が増えてきています。ゆめみでも、アプリ開発においてFlutterを採用するケースが増えていますよね。顧客企業からも、はじめからFlutterを想定した相談をいただくケースもあり、注目度が高まっているのを肌で感じます。とはいえ、アプリをつくるときに「このパターンの案件であれば、ネイティブの方がいい」というケースもあるでしょうし、逆に積極的にFlutterを使っていくということもありうると思います。そのあたりはどう使い分けていますか?

おかやまん:プラットフォームごとに最適化された見た目や操作感にしたいという場合はネイティブを選択しますね。それ以外の場合は、基本的にFlutterを選択することが多くなると思います。いま自分は2つのアプリ開発にテックリードポジションで携わっているのですが、どちらもFlutterを選択しています。

Flutterを選択した場合、プログラミング言語は基本的にはDartを使うのですが、Flutterを使ったプロジェクトでも、ネイティブの機能との繋ぎ込みが必要になることもあるので、そのときはKotlinやSwiftも使いますね。

よーたん:よく質問されるのはBluetoothやGPS、カメラといったデバイスの機能を利用出来るか?という点です。

いま挙げられたような(Bluetoothやカメラ等)メジャーな機能に関しては、Flutter公式もしくはコミュニティによってライブラリが公開されています。それらを利用すれば問題なくデバイスの機能を利用できるケースがほとんどです。

一方でニッチなOSの機能、例えばCarPlayなどはライブラリもなく純粋にFlutterだけで対応することはできません。ただし、その場合もネイティブコードを実装し、Flutterとブリッジする技術を採用することで実現可能です。

総じて、「Flutterアプリだから○○はできない」という欠点はほとんど存在しないんじゃないかと思います。

——UIのパーツだったり、アプリ内の一定のロジックだったりは、全部Dartで実装できて、ビルドしたら Android用のapkとiPhone用のipaの両方が出来上がる。要は最小限の書き分けで、ほぼ同じUIが出せるということですね。これはすごいですし、Flutterを使うメリットは大きいことがわかりました。

Flutterのデメリットはもはやほとんどないといえる

——逆にFlutterのデメリットはあるのでしょうか。たとえば、操作感が変わってしまうとか、ネイティブの体験と変わってしまうとか。

おかやまん:若干ネイティブの体験と変わるケースはありますね。 ただ最近ではもう改善されてきていて、いまではもうほとんど気にならないレベルまで進化してきていると思います。

よーたん:もう存在自体が、はじめからちょっと違うんですよね。Flutterって徐々に良くなったっていうよりも、登場してきた時点ですでに良かったんですよ。

デメリットでいうと、昔よくあったのが動作差異です。例えば、iOSでは思ったように動作するのに、Andoridではそうならない、なんてことはよく起こりました。これもFlutterではまったくと言っていいほど起こりません。

これまでのマルチプラットフォームの仕組みは、例えばボタンを表現するUIであればiOSもAndroidもネイティブの本物のボタンが描画されていました。ただし、プラットフォームが異なるので呼び出し命令はまったく異なります。

その差分をマルチプラットフォーム内で頑張って埋めるような仕組みのものが多かったです。この頑張って埋める過程で想定しない結果を生むことが多かったんだと思います。

一方、Flutterでは見た目もインタラクションもFlutter内で完結したボタンが実装されていて、ネイティブの機能をほとんど使わずに済むように設計されています。従来の方法とは根本的に異なる仕組みのため、とてもトラブルが少ないんです。

——1人のエンジニアから見て、プロジェクトでFlutterを使っていて大変なことはありますか?

おかやまん:今のところ、ほとんどないかもしれないです。ただ、Flutterは柔軟に組めるのですが、基本的には以前にGoogleが提唱した「マテリアルデザイン」をベースにUIを設計開発することが多いです。なのでマテリアルデザインへの理解度があまり高くないと、ちょっと大変かもしれません。

というのも、「簡単に作れる」っていう認識でも、AppleのiOS特有のUIの挙動を表現したい場合、Flutterベースで作る想定よりコストがかかるケースがあるんです。その場合は、独自に作る必要が出てきます。

とはいえ、実際のプロジェクトでコンフリクトすることはほとんどありませんでした。ゆめみではこういった制限事項は予めご説明した上で、UIの案についても、実際に見えるものをベースに「こちらでどうですか」と事前に提案して、ちゃんとすり合わせてから始めるからです。

よーたん:私はデザインのコミュニケーションコストなら、むしろFlutterの方が低いと思っています。たとえば、デザイナーさんがiOSベースでUI設計を行った後で、Androidエンジニアから「AndroidだとこういうのがスタンダードUIなので、こっちに変えていいですか」と修正する事が一般的に結構あると思うんですよ。でもFlutterを使ったプロジェクトでは、そういうコミュニケーションが起きてるイメージがあまりなくて。

「Flutterのデメリットってなんなの?」とよく聞かれるんですけど、上記の制限を押さえておけば、大きいデメリットはあまりないと感じています。

——進め方や方針を固めて、作りたいサービスでどれだけネイティブAPIを触るかというところを事前に把握さえしておけば、Flutterのいい恩恵を得られそうですね。

Flutterに足りていないのは「シニア」エンジニアだ

――いまはアプリを作ろうとするとき、いろいろな手段がありますよね。たとえばLINEミニアプリでやった方がいいとか、Webサイトだけで完結するとか。いまアプリを開発したいクライアントには、どういうプロダクトが多いのでしょうか。

おかやまん:よく聞くのは、やはりEC・コマース系です。どうしてもウェブだけだと、ユーザーの購入率や遷移率っていうのが低いらしくて。アプリを導入したことで、売り上げが増えたというクライアントが多いです。あとは医療系の企業から、「アプリを作りたい」という声も最近よくありますね。「カルテと連携したモバイルアプリが欲しい」というケースです。

――そういったアプリを開発するにあたって、別々の言語で作るのと、Flutterで開発するのとで、総予算的にどれぐらい違うものなのですか? たとえば、「5割ほど楽に開発できます、なので既存の5割安く作れます」と言えるのか。あるいは、「2割しか変わらないけど、先々のメンテが楽になるので、結果的にすごく安くなります」となるのか。

おかやまん:それでいうと、後者の方が近いと思います。ただ、その開発者がどれだけいるかっていうのも重要なんじゃないかなとは考えていて。やっぱりネイティブのコードを書ける人と、Flutterで書ける人で比べると、どうしてもまだFlutterを書ける人が少ないんです。

Flutter自体は個人的に簡単というか、開発体験がいいので参画しやすいです。ただ、シニアのFlutterエンジニアはとても少ないんですよね。ちょっと動くものは、ある程度頑張ったら誰でも作れるんですが、長期保守できて、しっかり設計できるFlutterエンジニアっていうのはとても貴重です。そういう意味では、ゆめみのFlutterギルドはなかなか精鋭が揃ってると思います。

——なるほど、そのチームにいるメンバーのFlutter習熟度によっても開発の難易度や予算感も変わってきそうですね。どちらかのネイティブ開発から始めるのはどう思われますか。

おかやまん:ネイティブのiOSアプリ開発って、個人的にけっこうやりづらいなと思っていて。たとえば、Xcodeのエラーメッセージを見ても原因は何なのかどのように修正すればいいか分からなかったり、不適切な修正方法が提示されたりすることが以前からあるんですけど、それが初心者にはかなり難しい。以前よりはだいぶ改善されてきていますが、まだまだハードルが高いです。

それと比べると、Flutterの仕組みはよくできているので、そういうところでつまずくことがほとんどないという気がします。

よーたん:iOSエンジニアからすると、Androidの開発も「なんだこれ」っていう不満があって(笑)。Flutterは明らかにスタートの時点で開発体験をとても意識した設計思想を持っている感じがあるんですよ。始めやすいし。それはすごい大きいと感じています。

実際にストアに配信するとなると、ビルドシステム周りでネイティブの知識が結局必要にはなるので、 そこが初めのハードルかなというぐらいですかね。

ただ、始めやすい一方で、中長期的に運用できる堅牢な設計・実装には、それ相応の知識や経験が必要な点は、他のフレームワークと相違ありません。そういう意味では、シニアなFlutterエンジニアが市場に不足している感覚があります。

Flutterは今後主流になる?ならない?

――TitaniumやXamarinなど、これまでもさまざまなマルチプラットフォームが出てきた歴史があります。 いまFlutter以外に有力なものはありますか?今後、Flutterが何かに置き換わることってあるのでしょうか?

おかやまん:個人的にはJetpack Composeのマルチプラットフォーム版が、 ある意味ちょっと似たような仕組みを使ってるので、気になっています。ただ、もしかしたら流行るかもっていうレベルで考えていて、まだまだ対抗馬に上がるのは早いかなという感覚です。

――万が一対抗馬が出てきたとして、そこから乗り換えるのって簡単なのでしょうか?それとも大規模なやり直しになりますか?

よーたん:基本は再開発ですね。例えば現在ネイティブで開発していて、それをCompose Multiplatformに移行するケースでしたら、iOSは作り直しになってしまいますが、Androidは非常にスムーズに移行できます。Flutterの場合は、部分的に少しずつ作り直していく手段が用意されています。

今後トレンドは置き換わるかもしれませんが、Flutterの開発コミュニティは盛んなので、1、2年で誰もまったくメンテしなくなるみたいな未来は、すごく可能性は低いんじゃないでしょうか。

おかやまん:そうですね。Universal Studiosさんのような大手も採用していますし。

繰り返しにはなりますが、Flutterはこれまで現れては消えていったものたちとはまったく違う仕組みなので、「昔の共同プラットフォームはこうだった」と言われても、「そこは安心してください」と言えます。

同じ体験を提供したいのに、プラットフォームごとに別々のチームで作るってなると、解釈の違いが生まれがちです。だけど、Flutterならそれもないです。すごく安定しているので、Flutterは選択肢の1つとしてありだと思いますね。

よーたん:その代わり、先ほどお話ししたように、Flutterのシニアエンジニアが市場にはすごく少ないのが課題です。手前味噌で恐縮ですが、そういうときに頼るところとして「ゆめみがある」と言えるのではないでしょうか。

——シニアエンジニアの持っているような技術力が欲しいときは、やはり実績ある会社に頼ったほうがいいですよね。

Flutterは新しく、かつ完成度の高い、これまでのネイティブ体験とほぼ遜色ないクオリティを出せるプラットホームです。 「これから内製化をしていきたい」、「社内エンジニアチームでアプリの事業を立ち上げたい」というときに、ネイティブ開発にするよりも、Flutterでチャレンジすることは、今後かなり有力になってくるのではないでしょうか。

▼おすすめ書籍

Flutter実践開発── iPhone/Android両対応アプリ開発のテクニック

2024年3月7日紙版発売
渡部陽太 著
A5判/360ページ
定価3,740円(本体3,400円+税10%)

▼Flutterの開発については、ぜひゆめみにお声がけください

株式会社ゆめみ Flutter開発実績

コミューン|Flutter開発によるアプリの大幅アップデートを支援 | ゆめみ

お問い合わせ

文:石渡 翔