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