「Flutter」によって、アプリ開発が爆速に?~エンジニアが語る技術愛 #8~

「Flutter」によって、アプリ開発が爆速に?~エンジニアが語る技術愛 #8~

ミクシィには、探究心溢れるエンジニアがたくさん在籍しています。

その探究心は業務で扱う技術に留まらず、趣味で書いているプログラムだったり、個人的に研究している言語だったりと、自身の気になった技術への追求も留まることを知りません。

そこで、社内のエンジニアに“好きな技術”について、思う存分に語ってもらうシリーズを始めました。

ルールはこの通り。

・業務で使っている技術でも、使われていない技術でもOK
・あくまでも個人的な見解で
・その技術のどこが面白いの
・愛を込めて語り尽くしてもらう

第8回目は、新規事業開発に携わるアプリエンジニアの久野に「Flutter」の魅力を語り尽くしてもらいました!

久野 文菜(くの あやな) 新規事業 フロントエンド開発チーム
2021年4月,株式会社ミクシィに新卒入社。学生時代にアルバイトとしてサロンスタッフ予約アプリ『minimo』のiOSアプリ開発を経験し、入社後は新規プロダクト開発を行う部署でクライアントアプリを開発を務める

 

特徴は“速さ”にある

━━まず、「Flutter」はどのような技術なのでしょうか?
Googleが開発しているオープンソースのアプリケーションフレームワークです。Dartという言語で書かれていて、マルチプラットフォーム開発に便利な機能が数多く搭載されています。ちょうど最近「ver.3.0」がリリースされたところで、今さらに人気を集め始めている技術の一つだと思います!

━━なるほど。実際それで何が出来るようになったのでしょうか?
マルチプラットフォームに対応しているので、iOSのアプリとAndoroidのアプリを並行して開発できることでしょうか。自前のレンダリングエンジンを使っているので描画も速く、ネイティブに近いパフォーマンスが出せるんです!

さらに、Flutter上でGoogleが推奨しているマテリアルデザインのデザインコンポーネントをウィジェットに実装してくれているので、プロトタイプがすぐに作れる点も特徴です。分かりやすく言えば、Googleの提唱するマテリアルデザインのアイコンがビルドインされているので,開発中にiconを設けたい際に自前で用意する必要がありません。

━━他にも特徴はありますか?

GoogleがOSSとして主導して開発しているのでアップデートが盛んなところでしょうか。毎年のGoogle I/OでFlutterに関するセッションが入っていたり,コミュニティ主導でFlutter Kaigiなどのカンファレンスが行われたりしていて、盛り上がってます

また、Googleが開発していることによってドキュメントも豊富で、GitHub上のコミュニティも盛り上がっているので、技術的に分からないことがあればすぐに解決できる点もいいですね。何より、Googleがアプリ開発に使っているという安心感もあります(笑)。

━━近年登場した技術なのでしょうか?
人気になってきたのは、近年でしょうか。でも、Flutterの開発言語であるDartは2011年くらいにはあって、もともとはJavaScriptに取って代わるものとして開発されていました。ですが、あまりエンジニアに注目されている印象はなくて…。

実践的に広く使われるようになったのは、Flutterが登場してからではないでしょうか。Dart自体のアップデートも進んでいますし、たった今良くなりつつある途中だから、注目されているのではと思いますね。

━━なるほど。iOS/Android 同時に開発できるとなると、習得も難しい…?
そんなことはないと思います!しかしXcode の Signing 部分とかリリース作業とか,ネイティブでしか提供されていないSDKを利用したい時はどうしてもネイティブの知識が必要になる側面はあります。

逆に言えば、iOSエンジニア、Androidエンジニアとしてキャリアを積んできた人こそFlutterで開発すれば足りない機能は自分で補えて、まだ発展途上のFlutterにおいてより自由な開発が行えるのではないでしょうか。

━━Flutterを覚えるのが難しくないのはなぜですか?
Flutter側が必要なAPIをラップしてくれているので、1から書かなければいけない部分が少ないからですね。公式で提供されてるライブラリが豊富なので,楽に実装できますし、ライブラリがAndroid/iOSの差分をうまく吸収してくれているので、個別に書く必要がないんです。

 

ラピッドに楽しく開発できる?
━━もっと教えて下さい。
魅力でいうと、HotReloadの存在も大きいです。従来だと、コードを書く→ビルドする→コードを書き直す→ビルドし直す…といったサイクルで開発していくのですが、このビルドにすごく時間がかかってました。

ですが、HotReloadという機能が搭載されていることで、書いたコードをすぐに反映できます。実装したいコードを書いたら、キーボード上でr(reload)さえ押せばすぐにアプリ上にすぐに反映される。つまりビルドに要していた時間が短縮されるんですね。Rさえ押し続ければほぼリアルタイムでプレビューしながら開発が進められるので、アプリ開発の工数を大きく減らしてくれるものでもあるんです!すぐに反映されるので、開発自体もより楽しいものになりますね。

━━ということは開発の工数も減る?
すごく減ると思います。手元の開発作業は先に話した通りですが、極論でいうと、iOS/Android両方のアプリを開発するためにチームを分けて、それぞれにエンジニアを割り振る必要もなくなる可能性があります。Flutterで書けるエンジニアと、iOS/Androidの開発の知識があるエンジニアさえいれば両方のアプリを作れるので、大きく言えば半減できますよね。これほどリソースをコンパクトにできるので、アプリの個人開発もすごくしやすくなると思います。

━━すごい…。
ですよね。さらに、デザイナーとのやりとりもスムーズになる部分があるんです。話した通り、コンポーネントがマテリアルデザインに沿って作られているので、デザイン上の過度な間違いが起きにくいんです。マテリアルデザインでは、ボタンは「○pixel × ○pixel」以上であることが望ましい、といったガイドラインが決められているのですが、コンポーネントがそれに則っているので、妙に小さい/大きい、見づらい、といったことが少なくなるんですね。それに、デザイナーとのコミュニケーションの上でも「ここマテリアルデザインからすると少し○○ですよ」と提案しやすくなるので、そういった意味でも開発がスムーズになります。

━━では逆にデザイン上では制約を受けるのでしょうか?
いえ、あくまでもWidgetの標準デザインがマテリアルデザインに準拠している、というだけで、自由にデザインを変えられないという意味ではありません。ガイドラインの中での自由は担保されていますし、1から自前のデザインシステムを実装することもできます。

━━でもアップデートが盛んということは、現時点では使いにくい部分もありますか?
OSに追加されたばかりの機能などは公式ライブラリを待つことになったりはしますが、ただコミュニティが活発なのでわりと早い段階で対応してくれる印象ですね。

開発においてはFlutterで詰まる、というより、iOS/Androidのライフサイクルの違いや、ネイティヴの機能との連携の部分で詰まることの方が多いですね。アップデートされ続けているので、今気になっているような部分はどんどん解消されていくでしょうし。

 

コントリビュートで恩返ししたい
━━iOS/Androidエンジニアの他にも、親和性のある言語はありますか?
オブジェクト指向なのでJavaを書いていた人は書きやすいでしょうし、宣言的UIで記述するのでReactやSwift UIに慣れている人は書きやすいと思います。命令的UIと宣言的UIでは難易度にも差が出てくるので、非エンジニアの方でアプリ開発をしてみたい!と思う方にも、今ならFlutterから覚えはじめるのをおすすめしますね。

良いことづくめなFlutterですが、例えば「動画に文字を重ねて出力する」、といったテロップなどをメイン機能においたアプリであれば、まだネイティヴで書く方が優勢かもしれません。逆に言ってしまえば、先に話した以外のサービスのアプリ開発は9割くらいFlutterでの開発が可能なのではないでしょうか。

━━久野さんはFlutterでの開発歴は長いのでしょうか?
友人とアプリを開発していた大学院生の頃から存在は知っていたのですが、実際に学び始めたのは1年前ですね。私が大学院生の頃はまだ今よりも発展途上で、Flutterがそこまで魅力的に見えてなかったんです。特に、ネイティヴでiOSやAndroidを書いていた人ほど眉唾というか…(笑)。斜めに見ていた部分はありますね。

始めたきっかけは、2021年の7月なのでちょうど1年ほど前でしょうか。新規事業開発にアサインされて、最初はWebフロントのチームに配属されたんです(笑)。でもそこからアプリも書く必要が出てきて…と、詳しくはこちらのインタビューでも語っていますが、一切触ったことのない状態から覚えていきましたね。

━━触ってみてハマったと。
ハマりましたね。大学生の頃からiOSの開発をやっていて、Androidの開発は全くだったので、Flutterが使えるようになってAndroidアプリも使えるようになれば、使ってくれる人が倍になるのでは!?と思って(笑)。

新卒研修で「Flutter研修」を担当しましたし、今では社内SlackでFlutterコミュニティを作って、さらにFlutterに興味を持ってもらえる人を増やしていこうと画策しています!

━━仕事以外の個人開発でも使っているんでしょうか?
まだまだ開発の途中ですが、友人と「WebSocketとFlutterを使ってアプリを作ろう!」と企ててます。新規事業の方も個人開発の方もまだ詳しくは話せないのが惜しいですが…。

━━ではまた詳しく聞かせてください。最後に、Flutterを通しての目標などありますか?
何度も繰り返しになってしまいますが、Flutterは本当にパッケージが豊富で、そのおかげで爆速でアプリが作れます。このパッケージはGoogleから出ているものもあれば、有志の人によって公開されているものもあります。
業務上でも、個人開発でもお世話になっている分、いずれは私自身何か機能をパッケージしたものを公開して、恩返しとしてコントリビュートしていきたいなと思っています!

PAGE TOP