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
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
3
450
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
5.2k
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
180
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.6k
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
290
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.2k
golang-bob.pdf
iwatsukayura
0
130
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
760
[Dev Group Paris Octobre 26] Agentforce, SIforce, Claudeforce, Slackbot… on s'y retrouve ?
nabondance
0
110
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
28
33k
ChromeでローカルLLM
ryu1013
0
140
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
380
Featured
See All Featured
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
460
Raft: Consensus for Rubyists
vanstee
142
7.8k
Rails Girls Zürich Keynote
gr2m
96
14k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Facilitating Awesome Meetings
lara
57
7.2k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
How STYLIGHT went responsive
nonsquared
100
6.3k
Why Our Code Smells
bkeepers
PRO
340
58k
My Coaching Mixtape
mlcsv
0
360
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