【肉だ!】クックパッドマートの食材を楽しむエンジニア交流会 -mart meetup #1 で発表したCookpad Martの立ち上げ時における舞台裏の発表です。 https://connpass.com/event/94653/
Building Cookpad MartRyo Katsuma【肉だ!】クックパッドマートの食材を楽しむエンジニア交流会 -Mart Meetup #1
View Slide
自己紹介•勝間 亮 (かつま りょう)•2009~ クックパッド‣サービス開発エンジニア‣検索, 投稿, 新規事業, 会員事業, … etc•2014~ レシピ領域マネージャー•2018~ 買物事業(新規事業)‣エンジニア, テックリード, リベロ
今日の話
今日の話•社内テスト•現在の開発体制•これからの開発
今日の話•どういう風な開発をしてきて•今どうやって開発すすめてて•これからどうしていくの
社内テスト
社内テスト•一般ユーザーへのリリースに向けた課題抽出と改善‣ 1回のテスト(発注〜買い出し〜仕分け〜受け取り)で5~10くらい課題 ☺‣ スケールさせる形で改善方法を考える•1月から延々とテスト
1~2月•スプレッドシートで発注シートを運用‣ 商品マスターと発注書を作成•スポットで月に2度実施 x 2ヶ月•大局的な課題と方向性決め‣ 1-1の買い出しではなく「ルート集荷/ルート配送」の採用‣ 仕分けがかなり大変
3月~•Webアプリのプロトタイプを実装‣ 以降、毎週火曜と木曜に実施•単発テストではなく常に購入できる状態に‣ 習慣化によるユーザーの行動観察‣ 定常化のためのオペレーションテスト•方向性‣ 仕分け、保冷、受け取りの大枠の方向性
先週〜•アプリで運用開始•ユーザーリリースを意識したテスト‣ 例)Slackに頼らずにPush通知でサポート•スタッフが介入しないオペレーションの磨き込み
現在の開発体制
開発メンバーサーバーサイドエンジニアサーバーサイドエンジニア兼デザイナiOSアプリエンジニアアプリデザイナ
アプリ開発•Webアプリのプロトタイプをベース‣ アプリ: 商品一覧、詳細、カート追加、決済、受取‣ 管理画面: 商品登録、注文確認、買物リスト‣ バッチ処置: Push通知, 販売スケジュールデータ作成
タスク管理
クライアントサイド•Swift 4.1•Xcode 9.4•RxSwift / RxCocoa
クライアントサイド•極力Storyboardで管理‣ コード記述量を減らす•1画面 = 1Storyboard‣ StoryboardReferenceで管理•レイアウト‣ 大枠はStackView, 細かな作り込みにAutoLayout‣ IBDesignableを利用してコード記述量を減らす
サーバーサイド•Rails 5.2.0•Ruby 2.5.1•MySQL 5.7
3アプリの統合•Web / API / Admin を1アプリ‣ Web: Pure Rails‣ API: garage‣ Admin: AdminLTE + Vue.js3BJMTBQQMJDBUJPOSPVUFTESBXEPDPOTUSBJOUTIPTUa"NBSUTFSWFSaDPNa;EPTDPQFNPEVMFNBSUEPSPPUUPBCPVUJOEFYFOEFOEDPOTUSBJOUTTVCEPNBJOa" NBSUTFSWFS BQJ TUBHJOH a;EPTDPQFNPEVMFBQJ BTBQJEPTDPQFWEPSFTPVSDFTQSPEVDUT POMZDSFBUF>FOEFOEFOEDPOTUSBJOUTTVCEPNBJOa"NBSUTFSWFSBENJO TUBHJOH a;EPTDPQFNPEVMFBENJO BTBENJOEPSFTPVSDFTQSPEVDUTFOEFOEFOE
DB•開発DB‣ 共用のRDS•エンジニアは普段は共用DBを向いて開発‣ localに開発DBは基本的に利用しない•開発に値するデータを自分で用意するのが大変‣ 店舗、店舗食材、販売食材、配送スケジュール … etc
本番DBを開発DBにレプリ•本番環境の管理画面でデータを用意‣ 行レプリで開発DBに反映‣ 入稿データはリアルタイムに開発環境に反映•開発DBのid offset値を6億‣ レプリとデータ挿入のコンフリクトを防止! techlife レプリ
画像配信•Tofu‣ Cookpad版 Imgixぽいもの (ImageMagick + S3 + CDN)•1リソース = 1画像‣ Product.find_by(id: 1).resizable_image_url(“360x240”, format: “webp”)•フォールバック‣ 開発環境で存在しない画像URLはproxyで本番環境画像を配信‣ 入稿画像はリアルタイムに開発環境に反映! cookpad tofu
CI + デプロイ•CI: Jenkins•Deploy: Rundeck‣ PRマージ➜CI実行➜Dockerイメージ➜stagingデプロイ‣ 動作確認後、Slackからデプロイ
その他のサービス•Firebase: Push通知基盤•Sentry: エラー通知•Stripe: 決済
アプリすり合わせ隊™•開発メンバー + サプライチェーンメンバー•今回のフェーズはどこまで進めるか、UIはどうするか‣ 1ヶ月単位のスプリント計画的なもの‣ それぞれの観点で実現すべきものをすり合わせ
心がけ•変化は受け入れる‣ 新しくTryすべきものがあれば受け入れる• 例) 商品の受け取り番号の採番ロジックは週1~2回変更‣ 柔軟な変更を受け入れられるように単純な実装を•ガチガチな計画は立てない (立てられない)‣ ただし、ゴール目標は立てる‣ 無茶はしないけど全力で!
今後の開発
注文アプリとバックエンド•受取り場所と時間の柔軟な変更‣ ユーザー観点で「できてほしい」ができない• 例)受取り場所の変更、来週受取り分の注文などができない•柔軟な出品管理‣ スーパーで実現できていることが全然できない• 例)月曜は野菜の日、火曜は肉の日、水曜は全品3% Off …•実現を見越したテーブルはあるが、コードはまだ全然書けていない
Androidアプリ•注文、決済、商品受取り‣ APIは揃ってきてるが、、、‣ iOSアプリベースのものだけ•1行も書いてないしレポジトリも無い
店舗向けアプリ•注文調整 / 売上管理•API + iPadアプリ•1行も書いてないしレポジトリも無い
受取り場所オーナー向けアプリ•場所の流通が増えればインセンティブが増える仕組み•Webアプリ•1行も書いてないしレポジトリも無い
やれていないことはかなり多い!!!!!1
まとめ
まとめ•社内テストを半年実施して形がまとまってきた•チームを横断して中長期的な視点を持って開発計画•実現できていることはまだまだ一部•今日はいろいろお話しましょう!