Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
実はクックパッドでもFlutter使ってるんですよ〜 - DroidKaigi2022...
Search
Sota Hagiwara
October 27, 2022
Programming
330
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
300
実務未経験の高校生Androiderとクックパッドマート
soprog_
0
220
未踏ジュニア2020「Align」最終発表資料
soprog_
1
550
Other Decks in Programming
See All in Programming
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
210
モデルのリファクタリングが難しいと思ったら、そもそも複雑だったのはビジネス仕様だった ? / is-the-business-domain-the-real-complexity
hatsu38
0
420
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
590
Workers Cache を知る
syumai
0
310
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
240
iOSDCのペンライトを自動制御したい!
akkeylab
0
130
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
4.3k
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
210
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
110
AHC070解法紹介
eijirou
0
140
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
110
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
320
Featured
See All Featured
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
610
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
720
The Mindset for Success: Future Career Progression
greggifford
PRO
0
520
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
410
How to make the Groovebox
asonas
2
2.5k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
680
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Test your architecture with Archunit
thirion
2
2.4k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Everyday Curiosity
cassininazir
0
330
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