2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
リンクをコピー
記事をブックマーク
川原友希氏(以下、川原):「Kotlinと Flutterを愛であう会 for Android開発」のセッションを始めます。まずは登壇者を紹介します。では、まず山田さんお願いします。
山田淳登氏(以下、山田):はい。山田です。MIXIで今は「TIPSTAR」というアプリをAndroid開発していて、Android側のテックリード、チームのマネジメントなどをやっています。本日はよろしくお願いします。
では次にoidyさん、お願いします。
追田泰宏氏(以下、追田):はい。追田と申します。社内だと「oidy」と呼ばれることが多いです。Androidアプリの開発はだいたい10年ぐらい前からやっていて、その時はKotlinではなくてJavaで開発していたんですが、2018年頃からKotlinで開発し始めて、2023年あたりからFlutterのプロジェクトにジョインして、最近はFlutterでアプリを作っていることが多いので、Flutter歴はだいたい1年未満ぐらいという感じです。よろしくお願いします。
川原:お願いします。最後に久野ちゃんお願いします。
久野文菜氏(以下、久野):はい、久野です。久野は学生の頃にiOSアプリをずっと開発していて、2021年にミクシィ(現MIXI)に入社してからはFlutterを使ってアプリ開発をするようになりました。今でも新規事業でFlutterを使ってアプリを開発しています。なので、Flutter歴は3年ぐらいになります。今日はよろしくお願いします。
川原:では、本日モデレーターを務めます。川原と申します。私は新卒でtoCサービスの開発をしていたのですが、今では新卒採用全般を担当しています。本日はこのメンバーでお話ししていきます。よろしくお願いします。
川原:ではまず、KotlinとFlutterについて簡単にお話しします。MIXIでは、Flutterは新規事業系で利用するケースが多くて、Kotlinは「家族アルバム みてね」や「TIPSTAR」、「minimo」など、さまざまなサービスで利用しています。KotlinもFlutterもAndroidアプリの開発ができますが、Kotlinは言語になっていて、Flutterはフレームワークになっています。
Flutterがクロスプラットフォーム開発ができることは有名かなと思いますが、Kotlinも近年ではクロスプラットフォーム開発ができるようになっています。本日はKotlinやFlutterの良いところとか違い、愛でたいところを、Android開発に焦点を当てて、エンジニアたちの座談会形式でお送りするセッションとなっています。
川原:ではさっそく、「KotlinとFlutterの愛でポイントを探る10の質問」をやっていきます。1つ目、「KotlinによるAndroidアプリ開発で特に重宝している機能は何でしょうか?」。こちらは歴の長い山田さんからお願いします。
山田:よろしくお願いします。先ほどの自己紹介では忘れていたのですが、Android開発は13年ぐらいやっています(笑)。
しばらくやっていて重宝しているところなのですが、Kotlinといえばコルーチンを使えることがかなりいいことかなと思っていて、Android開発はリソースの開放や、ライフサイクルの意識などをしなきゃいけないのですが、そういった管理が簡単にできる点がいいのかなと思います。追田さんは、どうですか?
追田:そうですね。他だと特に最近思ったのは、バージョンカタログという機能が便利で、それを使えるようになったのが2023年ぐらいだと思います。そこから徐々に開発環境側でもサポートが強化されてきて、最近ではどんどん使いやすくなって、今だと導入しやすいのかなと思います。
川原:ありがとうございます。
川原:いろいろあるので次にいきますね。では次、「Kotlinによる開発で感じた強みと課題と、Flutterによる開発での異なる点」について聞けたらと思います。ではここは両方経験しているoidyさんからお願いします。
追田:そうですね。もともとKotlinで開発していたのですが、その時はGoogleが作っている公式のライブラリが充実していて、開発ガイドなども丁寧に作られていて、公式のライブラリを使えばだいたいアプリが作れる感じだったので、それが便利だったかなと思います。
逆にFlutterのほうはサードパーティのライブラリを使いこなす必要があって、いかにうまいことそのサードパーティのライブラリを使うかが重要になるという点が大きく異なるかなと思います。久野さんは何か……。
久野:すみません、Kotlinは実はまだチュートリアルぐらいしか触ったことはないのですが、Flutterもチュートリアルでアプリを作れて。Kotlinもチュートリアルがちゃんと用意されていて、どっちも気軽にアプリを作れるという点では一緒だなと思ったのですが、Flutterのほうで最初に作れるアプリはカウンターアプリで、Kotlinだとテキスト表示だけなのですが、Flutterだとちゃんとボタンがあって。カウントアップされてみたいな感じで、最初から何か動くものが出来上がる点だと、ちょっとだけFlutterのチュートリアルは良いなと思いました。
川原:では次にいきますね。次は「FlutterによるiOS開発からAndroid開発。両方経験してどんな違いを感じましたか?」。これは久野さんにお願いします。
久野:そうですね。実はiOS開発の前に大学1年生ぐらいの時にJavaを使ってAndroid開発をしたことがあったんですが、分厚い本を読みながらじゃんけんアプリを作ろうとした時に、まず「Android Studio」を入れて、カクカクの中、重くて動かないとか、Javaで冗長にめちゃくちゃ書かないといけないのに、出来上がったのはじゃんけんでパーが出せるだけみたいな感じのアプリが出来上がりました。
その時から「Androidアプリ開発は正直めちゃくちゃ難しいのでは?」と思っていたのですが、Flutterを使ってiOSアプリだけじゃなくてAndroidも一緒に動くものが作れるというのになってから、「Android開発も実はiOS開発と一緒で、そんなに難しくないんじゃない?」と心の壁を壊してくれた感じがありました。
山田:でも、なんかアレですね。Android開発に入る時期が悪かった感じがしますね。
久野:いや、マジでそれはそう(笑)。
山田:Javaしか……。
久野:Javaしか知らない時期に入っちゃった。
山田:Kotlinがあって、あとはJetpack Composeがある状態だと、また変わってきたかもしれないですよね。
久野:そうなんですよね。Jetpack Composeは宣言的UIがあって、それで簡単にUIが作れるような感じの時に入っていたら違ったかもしれないですが、もし一緒の感じでJavaで書いて挫折したことがあったら、Flutterから入ると書きやすいかもしれないです。
川原:ありがとうございます。愛でポイントが徐々にちょっとずつ出てくるのはいいですね。趣旨に沿っていると思います。
川原:ここまでは、準備していた質問になるのですが、ここから先は、KotlinとFlutterの違いというところに対してもう少し詳しく聞いていこうかなと思っています。
みなさんがアプリを作る時に開発者として一番気にかけることは、やはりパフォーマンスかなと思います。そのあたりを聞いていこうかなと思います。「アプリのパフォーマンスを比較して、どんな違いがKotlinとFlutterにありますか?」。どうですか?
追田:そうですね。パフォーマンスを気をつけるにあたって、UIが再利用される回数をいかに抑えるのかが大事になるのは、FlutterであってもKotlinであっても共通しているかなと思っていて。それを実現する方法が少し異なっていますね。
Kotlinだと、data classというのを使ってその画面の状態を表現したり、あとはdata classにアノテーションを付けて再描画の回数を減らすようなことがあるのですが、FlutterだとDartはdata classがないので、Freezedというサードパーティのライブラリを使って同じようなことをするとか、あとはウィジェット、UIを作る時にFunctional WidgetじゃなくてClass Widgetを使ったほうがいいとか、そういうやるべきノウハウがちょっと違うというのはあるかなとは思います。
久野:確かに。大前提を話していなかったのですが、Kotlinで開発するとAndroidのViewの上で描画されて、FlutterだとネイティブViewを使わずにFlutterエンジンが描画します。そのパフォーマンスに大きな差があるかなと思って見ていたのですが、実はAndroid開発した上ではそんなに差が気にならない。
逆にブラーエフェクトというすりガラスみたいなiOSだとよく見かけるのですが、そういうのをやろうとすると、パフォーマンスはやはりFlutter側が落ちるのですが、Android開発ではあまりパフォーマンスの差は気にならなかったなという思いがあります。
追田:確かに。普通のアプリを作る上では体感的にどちらが優れているかがわからないぐらいなので、これは好みでいいのかなという感じですね。
川原:そこまで違いはないものなんですね?
久野:Androidは。
川原:Androidは。なるほど(笑)。
川原:もう1個です。開発している時に大事にしているのが、パフォーマンスと、あとはやはり保守性ですよね。サービスだと保守性を大事にしているかなと思うのですが。ここの違いはどうですか? 山田さんから。
山田:はい。ではチームビルディング的なところでの違いみたいな話になってくるのですが、それぞれネイティブで開発していると、各サービスにAndroid開発のチームとiOSの開発のチームを用意しなきゃいけないのですが、Flutterで開発していると、Flutterの開発チーム1つで済むみたいな話があったりします。
ですが、人材的なところで、AndroidとiOSそれぞれだと採用がしやすかったり、Flutterはまだ新しいものになるので、市場に「できるよ!」という人が少なかったりもして、(それぞれ)メリット・デメリットがあるかなと思います。
川原:別角度で保守性のところはあったりします?
久野:バグとかが出た時にすぐに修正できる、新機能を追加しやすいのも保守性だと大事かなと思うのですが、Flutterではホットリロード、ホットリスタートという仕組みがあって、Rを押すとすぐさまコードが反映されるという仕組みがあるので、そういう観点でもすぐに直したり、すぐに機能を足して出すといったサイクルが小さく回せるのはいいのかなと思います。
山田:ただ、最近のAndroidでもホットリロードは実装されていて、普通のAndroid Viewで開発していても一応サポートはあります。Composeを使っていればけっこう強力なサポートがあって、実機でのチェックもホットリロードができるし、あとは、アニメーションを見る時とかはIDE上でアニメーション再生できたりもします。
久野:アニメーションを見ることができるの、すごいですよね。
川原:(先ほど)話した時にも言っていたのですが、保守性は技術的な側面もあれば人間的な側面もあると思うので、やはり両方一長一短な部分があったりするんですかね。ありがとうございます。
川原:では次の質問にいきます。パフォーマンス、保守性ときて、あとやはり生産性ですね。KotlinとFlutterで生産性の違いはありますか?
久野:あります!
(一同笑)
FlutterはiOSも書けるし、なんならWeb、Windows、Macとかも全部書けるので、普通に考えてその2倍の速度になります。
iOSとAndroidを一気に開発できるから生産性はだいぶ上がるのと、Flutterだともともとマテリアルデザインに沿ったウィジェットを用意してくれていたり、「よく使うやろ」みたいなGoogleアイコンを用意してくれていたりするので、MVP(Minimum Viable Product)みたいな感じで、小さくユーザーに何か当てたいみたいなものを作る時に、ガッと生産性高く作ることができるのかなと思います。
川原:お二人はどうですか?
追田:最初にお話があったとおり、Kotlinでも最近だとマルチプラットフォームアプリ、それこそiOSアプリもUIから作れたりします。でも始まったばかりというか、歴史が浅くて、まだライブラリのサポートも薄かったりするので、そのあたりがちょっと課題にはなるかなと思います。
あと、採用的な面でも、Kotlinマルチプラットフォームの経験がある人はおそらくあまりいないと思うので、そこもちょっと苦労するところかなと思いますね。
山田:先ほどチラッと「本当にパッとMVPだけを作るんだったらFlutterのほうがいい」という話は聞いたのですが、途中で例えばAndroidのネイティブ側のViewを挟まなきゃいけなくなった時などは、けっこう苦労するみたいな話も。
久野:そうなんですよ。ネイティブにしか生えていないセンサーを使いたいとか、あとはiOSでたまにあるのが、iOSのマップを表示したいとかで、ネイティブのViewを表示させたいみたいな時は、やはりその分の知識が必要になるのもあるし、そのネイティブのAPIを呼んで、返ってきたものをFlutter Viewで描画する。
もしくはそのネイティブ Viewの仮想Viewの上に、FlutterがAndroidのネイティブ Viewとして表示する、描画するなどをすると、パフォーマンスがめちゃくちゃ落ちるので。知識も必要だしパフォーマンスも悪くなるから、ネイティブにしかないような際どいことをするんだったら、ネイティブをちゃんと最初から作るほうがいいかなと思います。
だけど、MVPなどを作るだけだったら、そこまで触れることないかなと思うのですよね。ユーザーのペインを確かめるぐらいだったら、最初はFlutterでもぜんぜん今はいいのかなという感じです。
川原:いいですね。ありがとうございます。
(次回につづく)
2024.12.20
日本の約10倍がん患者が殺到し、病院はキャパオーバー ジャパンハートが描く医療の未来と、カンボジアに新病院を作る理由
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.17
面接で「後輩を指導できなさそう」と思われる人の伝え方 歳を重ねるほど重視される経験の「ノウハウ化」
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05