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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
4
750
スマート反転とウェブアクセシビリティ
camiha
0
210
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
460
難しいけど、読めた。- OSSの入口に立った話。
sts11142
0
120
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
310
Java 27新機能 / Java 27 new features
kishida
2
160
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
510
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
1
570
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
3
370
Workers Cache を知る
syumai
0
200
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
16
13k
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
260
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
It's Worth the Effort
3n
188
29k
A designer walks into a library…
pauljervisheath
211
25k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
560
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
850
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
720
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
290
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Side Projects
sachag
456
43k
WCS-LA-2024
lcolladotor
0
830
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