Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
実はクックパッドでもFlutter使ってるんですよ〜 - DroidKaigi2022...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Sota Hagiwara
October 27, 2022
Programming
320
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
実はクックパッドでもFlutter使ってるんですよ〜 - DroidKaigi2022 AfterParty
Sota Hagiwara
October 27, 2022
More Decks by Sota Hagiwara
See All by Sota Hagiwara
Flutterから プラットフォーム固有のAPIを扱う
soprog_
0
290
実務未経験の高校生Androiderとクックパッドマート
soprog_
0
220
未踏ジュニア2020「Align」最終発表資料
soprog_
1
550
Other Decks in Programming
See All in Programming
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
330
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
590
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.3k
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
230
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
170
170k Jobs a Day on GKE: Scaling Mercari's CI Platform - and What's Next for AI-Native Development
junyaokabe
0
110
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
500
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
180
数百円から始めるRuby電子工作
tarosay
0
140
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
400
Building a Meta Ray-Ban display app
akkeylab
0
130
Foundation Models frameworkで画像分析
ryodeveloper
1
610
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
How to train your dragon (web standard)
notwaldorf
97
6.7k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
470
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.4k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
200
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
430
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
430
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
470
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
690
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
What's in a price? How to price your products and services
michaelherold
247
13k
Transcript
© 2022 Cookpad Inc. 2022/10/19 実はクックパッドでもFlutter使ってるんです よ〜 @hagi (これで呼んで) またの名を
@soprog_ (Twitter) またの名を @souta0104 (GitHub)
© 2022 Cookpad Inc. 2 ハギー @hagi, (Twitter)@soprog_, (GitHub)@souta0104
22卒 買物プロダクト開発部 エンジニア Android, Flutterを触ります。 コーヒーが好き
© 2022 Cookpad Inc. 3 • クックパッドでのFlutter採用事例の紹介 • どのような意図があり採用したのか
• 実際の開発中の所感 • 今、Flutterの採用を振り返ると 触れること
© 2022 Cookpad Inc. 4 Flutter ご存知ですか!
© 2022 Cookpad Inc. 5 Flutter 単一のコードベースからモバイル, デスクトップ, ウェブ, 組み込みアプリケーションを構築できるフ
レームワーク • Googleが開発していて、Dartで記述する • 宣言的UI • https://flutter.dev/
© 2022 Cookpad Inc. 6 Flutter 触ったことありますか!
© 2022 Cookpad Inc. 7 Flutter プロダクトで使ってますか!
© 2022 Cookpad Inc. 8 Flutter とクックパッド
© 2022 Cookpad Inc. 9 Flutter とクックパッド
© 2022 Cookpad Inc. 2022/10/19 実はクックパッドでもFlutter使ってるんです よ〜 @hagi (これで呼んで) またの名を
@soprog_ (Twitter) またの名を @souta0104 (GitHub)
© 2022 Cookpad Inc. 11 クックパッドではどのようなユースケースでFlutterを 使っているの?
© 2022 Cookpad Inc. 12 クックパッドではどのようなユースケースでFlutterを使っているの?
None
© 2022 Cookpad Inc. 14 クックパッドマート 生鮮食品を中心として扱っているECプラット フォーム • コンビニエンスストア・ドラッグストア・駅・マ
ンションなどの様々な場所にユーザーの受 け取り場所として専用の冷蔵庫が設置さ れており、ユーザーはアプリから注文を行 い、専用の冷蔵庫から商品を受け取ること ができる (自宅への配送も可能)
© 2022 Cookpad Inc. 15 クックパッドマート
© 2022 Cookpad Inc. 16 クックパッドマート
© 2022 Cookpad Inc. 17 クックパッドマート
© 2022 Cookpad Inc. 18 Flutterを用いる意思決定
© 2022 Cookpad Inc. 19 アプリの前提 • 事業者向けのアプリ
◦ ラベルのデータをAPIを介してfetchする ◦ iOS, Androidに提供されてるSDKを介して Bluetoothでプリンターと接続し、ラベル データを送信する • 特徴 ◦ iOS, Androidで展開したい ◦ プラットフォーム固有のらしさのあるUIを 必ず実現する必要はない ◦ 複雑なロジックは存在しない
• ネイティブで実装 or Flutter ◦ 当初はネイティブでAndroid先行実装の予定 • 複雑な仕様はなく、特にUI上の表現がシンプルなためFlutterを用いるアイデアが出てきた
◦ APIとの通信、DBへの保存というシンプルなアプリ構成 • Flutterの描画するUIの挙動が実用段階レベルなのを感じていた • Flutter自体の開発も活発で頻繁にアップデートなども行われていて、Googleがフォーカスしてい るのを感じた © 2022 Cookpad Inc. 20 Flutterという選択肢
• Flutterで開発することを決めた • 求める仕様とFlutterの旨味が重なった ◦ 複雑ではないロジック ◦ iOS,
Androidで共通のUI ◦ モバイルエンジニアのリソースが少なくて済む(ECアプリなどもやることが無限) • 個人で得た技術を業務で活かせればと思った • (実は複雑なアプリじゃないし最悪ネイティブで書き直してもいいという話もしていた) © 2022 Cookpad Inc. 21 Flutterを用いる意思決定
• Flutterで開発することを決めた • 求める仕様とFlutterの旨味が重なった ◦ 複雑ではないロジック ◦ iOS,
Androidで共通のUI ◦ モバイルエンジニアのリソースが少なくて済む(ECアプリなどもやることが無限) • 個人で得た技術を業務で活かせればと思った • (実は複雑なアプリじゃないし最悪ネイティブで書き直してもいいという話もしていた) [宣伝]積極的に新しい技術への取り組みが行えるいい環境[宣伝] © 2022 Cookpad Inc. 22 Flutterを用いる意思決定
© 2022 Cookpad Inc. 23 ラベルプリンターアプリ 開発の様子
• iOS, Androidで提供されているプリンターSDKとのつなぎ込み • CI/CD © 2022 Cookpad Inc.
24 ラベルプリンターアプリ 開発の様子
• AndroidでSDKの動作を確認するサンプル実装をし、その実装を流用してFlutterと繋げる戦略を 取った • 後にiOSでも実装 © 2022 Cookpad Inc. 25
iOS, Androidで提供されているプリンターSDKとのつなぎ込み
MethodChannelという仕組みで実現(Flutter側) class BatteryState { // クライアント側とホスト側は、 MethodChannelのコンストラクタで渡されるチャネル名で接続される static const
_platform = MethodChannel('samples.flutter.dev/battery'); Future<void> _getBatteryLevel() async { try { // methodを呼び出す。method名をStringで指定してあげる。 final result = await _platform.invokeMethod<int>('getBatteryLevel'); } on PlatformException catch (e) { // Stringで指定したメソッドが未定義などを場合エラーが throwされる } } } © 2022 Cookpad Inc. 26 iOS, Androidで提供されているプリンターSDKとのつなぎ込み
MethodChannelという仕組みで実現(Android側) when (call.method) { // call.methodにFlutter側で引数に渡したメソッド名が入っている "getBatteryLevel" -> {
try { val batteryLevel = getBatteryLevel() result.success(batteryLevel) // 成功時は result.success } catch (throwable: Throwable) { result.error("1000", "Failed", null) // 失敗時は result.error } } else -> { result.notImplemented() // 未定義のメソッド名が入っていたときは result.notImplemented() } } © 2022 Cookpad Inc. 27 iOS, Androidで提供されているプリンターSDKとのつなぎ込み
© 2022 Cookpad Inc. 28 iOS, Androidで提供されているプリンターSDKとのつなぎ込み
基本的にはiOS, Androidともにネイティブと変わらない • flutterコマンドがipa, apk(aab)を吐いてくれる ◦ 中で通常のiOS, Androidアプリケーションがビルドされている
• これをfastlaneなども用いてアップロードしてあげたり.. 環境 • Flutterコマンドを導入できる場所であればどこでも動く • クックパッドでは... © 2022 Cookpad Inc. 29 アプリリリース周り
オフレコ © 2022 Cookpad Inc. 30 あと微妙に渋かった話
© 2022 Cookpad Inc. 31 Flutterの採用を今振り返ると
「いい選択だったのでは」 • アプリエンジニアは一人で実装を行えた • iOS版もAndroidのリリース後少ない工数で開発を行えた • 実際に問題なく今日も運用されている
• 挙動などに不満や問題も上がっていない →事業者向けアプリに採用したのはよかった 現状の課題点 (Flutterというよりはプロダクトの優先度の話ではある) • Flutterが書けてこのアプリに知見のある人が自分しかいないので危うさはある。 ◦ ドキュメントの整備など • 十分なメンテナンスの時間を割けていない。 © 2022 Cookpad Inc. 32 Flutterの採用を今振り返ると
© 2022 Cookpad Inc. 33 今後のFlutterへの向き合い方(@hagiの所感)
特に有効なユースケースを考えて、ネイティブ/Web/Flutter etc..を選択する • 全解決の神ではもちろんない ◦ ネイティブ開発は滅ぶ!! とは私は思っていません •
Flutter向きそう ◦ 事業者向けのアプリ ◦ 高速なパフォーマンスを意識しないアプリ ◦ ツール系の簡単なアプリ ◦ 新規事業とか新機能のプロトタイピング、MVPのアプリ • ネイティブで書くのがいいかも ◦ プラットフォームそれぞれに準拠したUIやなめらかな操作感を求められるアプリ ◦ 端末機能をフル活用したアプリ © 2022 Cookpad Inc. 34 今後のFlutterへの向き合い方(@hagiの所感)
• アプリを作る際はFlutterをぜひ選択肢に入れてみて ◦ マルチプラットフォームには夢がある。 ◦ 特性を生かしていい感じにネイティブ・Flutter etc..を使い分ける ◦
「B向け ハードウェアと通信するが複雑なデザインはないアプリを高速に展開する」ユース ケースにクックパッドマートではFlutterを選択したが、現時点ではいい選択だったと思って いる。 ◦ プラットフォーム固有APIもシンプルなものなので大きな障壁にはならない • クックパッドでは課題解決へ向けて囚われず・縛られず技術を活用していける環境がある。そし てFlutterを利用しているアプリもある。 ◦ 物事を運ぶために適した技術はどれか?というような本質を考えた囚われない思想や、ま だない技術への取り組みを積極的に行える縛られない環境がある ◦ 強みを存分に活かせる環境とも言える ◦ (個人的にはFlutterを用いた開発ももっと増えてほしい © 2022 Cookpad Inc. 35 まとめ/今日覚えて・感じてほしいこと
Flutterを活用 © 2022 Cookpad Inc. 36
© 2022 Cookpad Inc. 37