「Cookpad Tech Conf 2022」に参加してきました。

「Cookpad Tech Conf 2022」に参加してきました。

Category
Author
Yoshiki
Description
Cookpad Tech Conf 2022に参加してきましたのでそのレポートです。
Published
November 25, 2022
Last Updated
Last Updated November 28, 2022
Writings
この記事は約7分で読めます

はじめに

Cookpad Tech Conf 2022に参加してきましたのでそのレポートです。
オンライン開催は2年ぶりらしい!!

少し長いので目次

はじめに少し長いので目次Today’s ScheduleContentsProgram基調講演「失敗を活かす組織」開催に向けて今の期間をどう考えているかMissionエンジニア組織Cookpad Manifestデザイナーの話つまり失敗を活かす組織とはレシピサービスにおける持続的なプロダクト開発プロセスについて組織と開発プロセスのリデザインなぜリデザインが必要なのか?時を同じくして 何かがおかしい。。。わかった問題の3つアクションの制約結果として巨大なレシピサービスのアーキテクチャを最高にしたいレシピサービスの巨大なレシピサービスなんか開発が辛いTakanawa Projectがスタート難しいことは全部バックエンドに寄せるまとめ生鮮食品をユーザーに届ける流通の仕組みと技術流通を作る理由ステーション配送仕組みはなかでJWTTokenで開くシステム大量の商品を正確に選ぶ配送アプリケーション配送オペレーションこれから作っていくものまとめ関連する技術ブログ新規事業クックパッドマートを支える機械学習の技術RecVAEレビューチェッカーを導入したクックパッドが挑戦する「レシピ」と「かいもの」をつなぐ新しいサービス作り ~ 役割にとらわれず新しい価値に向き合い続けるチーム ~1. レシピと買い物をつなぐ2. 新しい機能を使ってもらうための取り組みと学び3. 作ったもので語る最後にGo Global Search 2アーキテクチャを刷新した学習の仕組みNo more shared DB! ABテストの仕組み化まとめ最後に懇親会

Today’s Schedule

Contents

notion image

Program

メインの発表以外にもLive designゃLive codingもされていました。夜は野毛で懇親会みたいです(楽しみ)
notion image

基調講演「失敗を活かす組織」

CTO 成田さん x Designer 米田さん

開催に向けて

最初は2016年開催だった。2年間できていなかった。
CTOとして「カンファレンスは物理開催じゃないと意味がない。」と考えている

今の期間をどう考えているか

2017〜2027年を投資期間として位置付けていた。既存事業を海外事業として立ち上げしたい。海外での有料会員事業の成功を狙っている。

Mission

毎日の料理を楽しみにする
様々なアプリケーションをOpen・Closeしてきた。
  • みんなのお弁当
  • tabeta (SNS)
  • cookpad DO!
  • 美味しいテイスト
💡
サービスには持続可能性が大切

エンジニア組織

プロダクトと横断組織で分けている
notion image

Cookpad Manifest

  • 境界を越える
    • ソフトウェアエンジニア
    • デザインだけでなく境界を超えて仕事をする
    • 専門性だけでない
  • 技術を楽しむことに責任を持つ
    • 楽しんだ分、バージョンアップなど責任を持たなければいけない
    • 楽しまなければ責任を持てていない
  • 作ったもので語る
    • 挑戦を続ける
    • 言葉でなく口にしなければいけない

デザイナーの話

デザイナー陣は2週間に1回LTをしている
デザイナーがプロダクト責任を持とうとしている?
  • なぜLTをしているのか
💡
自分でなんとかするために自分と頼れる人のマッピングをする

つまり失敗を活かす組織とは

🔄
失敗から学ぶ!!成長する未完成であり続けること(=持続可能性に繋がる)
notion image

レシピサービスにおける持続的なプロダクト開発プロセスについて

技術領域担当: 大石さん PD: 島さん

組織と開発プロセスのリデザイン

レシピサービスとは?
  • cookpad
    • 1998年〜
    • ユーザ投稿型サービス

なぜリデザインが必要なのか?

2020年にアプリを大規模リニューアルをした
思うように開発が進まないと感じていた。
想像以上に時間がかかると感じていた。

時を同じくして

#どうしたらいいんだ Slackチャンネルw が発足していた。

何かがおかしい。。。

組織として問題解決しないと不味い
課題と指針を言語化をおこなった(意外とシンプル!)
リアルで時系列で振り返りをした。

わかった問題の3つ

  1. 無理を強いる開発進行
    1. 開発進行の属人か
    2. 期限ドリブン
    3. 情報の透明性のなさ
  1. 技術的なコストを事業として考慮できていない
    1. 運用コスト、技術的負債の認識がない
    2. 大規模プロジェクトによって残された負債
  1. 技術戦略面のミスコミュ
    1. 技術戦略の共有不足
    2. アーキテクチャと組織不一致(逆コンウェイ的な話)

アクションの制約

規模を考慮
開発を止めない
  • 負債解消プロジェクトではない
解決
  • スクラムの導入
  • プロセスの型を作る
  • プロセスの側面からサポート

結果として

定期的な機能・サービスの棚卸。2ヶ月に一回「サービス継続確認会」をしている
スクラムでプロセスが統一されて、コミュ・意思決定がスムーズになった
  1. 定期的な振り返り、バックログで情報の透明化でゴールの解像度が上がった
  1. プロダクトバックログでコストや技術課題を見える化・技術課題の投資判断もした
  1. 物理的に組織を近くすることでコミュコストを下げた・アーキテクチャの選定で広がった
結果。。。。
🔥
あの日の行き詰まりを完全に乗り越えた!!
notion image

巨大なレシピサービスのアーキテクチャを最高にしたい

Engineer: 宮崎さん

レシピサービスの巨大なレシピサービス

Web、Android、iOS
歴史の長いサービス
1,500,000(LoC: Line of Code)
デカすぎて開発不可
うおおおお。時代はマイクロサービスだ!!
BFFを導入をする。FrontendのためのAPIを集約するやつ
notion image
開発保守がしやすくなった
かつて:巨大モノリス
2018年後:マイクロサービス化
現在:マイクロサービスがたくさん、BFFの活躍、開発保守は楽になった、、、?
でも開発が辛い
⇒ /api のレスポンスどうだったけとかコミュニケーションが増えた
マイクロサービス(たくさん)x BFF(難しい)

なんか開発が辛い

  • アプリケーションごとの責務が不明瞭
    • BFFにビジネスロジックが発生する(しんどい)
    • BFFにロジックをもたない方が複雑性は小さい
    • 特にルールがないまま運用されてるので複雑性が多い
  • API仕様がどういったAPIなのかわからない
  • 技術スタックの分散
    • Backend: Ruby, BFF: Java, Web BFF: TypeScript
    • コンテキストスイッチの学習が多い(やりたいことはシンプルなのに)

Takanawa Projectがスタート

レシピサービスへのGateway 開発
  • API Gateway
アプリケーション事の責務の整理(コンテキスト整理が必要!!!)
  • API4-gateway
  • API Gateway パターン
    • クライアントからはリクエストはここを通る
    • GraphQL スキーマを通す
  • GraphQLでスキーム
  • ロジックデータを持たせない

難しいことは全部バックエンドに寄せる

メインとなるバックエンドを決めた
メリット
  • ロジック。データの責任所在が明らか
  • 共通スキーマでみんなわかる
  • 難しいロジックをRubyで書ける
  • アプリ用BFFを捨てて言語を1つ減らせる

まとめ

  • マイクロサービスBFFは導入が難しい
  • 既存のアーキテクチャが抱えている辛さを無くしたい
  • TakanawaでAPI4-gateway で既存の辛みを無くしたい

生鮮食品をユーザーに届ける流通の仕組みと技術

Engineer: 長さん. @s_osa_

流通を作る理由

  • 新鮮な野菜
  • 変わった食材(マグロのテール、製麺所が作っている餃子の皮)がある
魅力的な食材に出会えているか?? ⇒ No
ユーザに届けるためにクックパッドが作る!!

ステーション配送

課題
  • 宅配の受け取りのための在宅は大変
    • 非同期で解決できる!!
  • 毎日送料かかるのは負担が大きい
解決
  • 冷蔵庫のステーションに置いておく
  • まとめて配送することで1品から送料無料にできる

仕組みはなかでJWTTokenで開くシステム

notion image
 

大量の商品を正確に選ぶ

  • バラバラ
  • 大量
  • 多種多様な似たような商品
⇒ ラベルで解決、識別と作業指示、
ラベルは書き換えができない、ハードウェア的な難しさがある、安全かつ高速に生成できる用にしている
 

配送アプリケーション

  • 普遍的な情報提供
  • 元々はAndroid・iOSで作っていたが、チーム体制を抱える面も踏まえて、Web版にしている
  • 技術要素: TS, React, GraphQL, MUI, OAID,,,

配送オペレーション

  • 計画が必要
  • ルート生成
    • 各ステーションに配送するためのルートを組む
    • 様々な制約がある!!
      • 時間、物量、営業時間
    • 制約を満たして、技術的にどう満たしているか
  • 技術要素要素:
    • OSRM
      • 2点間の移動時間
    • OR Tools
      • 数理最適化ライブラリ
      • 配送計画問題の近侍回を求めている
    • 上記の2つの軸に自分たちの制約を入れて出力している

これから作っていくもの

スケーラブルな流通を作っていく
現実世界で倉庫をスケールするのは非常に難しい。
正確・確実に届く流通
  • 人間が作業してるのでミスが出る
  • スキャナ導入する
  • 追跡ログの導入
大きい食材を入れるための枠を作る

まとめ

ソフトウェアとハードウェア開発をしている
現実世界の難しさがある

関連する技術ブログ

新規事業クックパッドマートを支える機械学習の技術

機械学習の分析アーキテクチャはシンプル
notion image

RecVAE

AutoEncoder系の手法でTop-N推薦まとめ - Qiita
こんにちは。 今回は、Deep Learningの手法の中でもAutoEncoder系の手法(Denoising AutoEncoderやVariational AutoEncoderなど)をTop-N推薦タスクに適用した研究をいくつかまとめてみようと思います。 Deep Learningの手法を推薦タスクに適用するといった研究は近年増えています。 従来の推薦タスク用いられる協調フィルタリング系の手法にDeep learningを組み合わせる研究については、次のような記事があります。 特に、三番目の記事はGenerative Adversarial Network (GAN)を推薦タスクに用いた研究をまとめた記事ですが、IRGAN→GraphGAN →CFGANという流れで説明されています。 今回の記事もこれに倣って、 CDAE (2016)→Mult-VAE (2018)→RecVAE (2020) という流れでまとめていきたいと思います。 それ以外の関連する手法については後ろに回していますので、詳しく知りたい方は論文を読まれることをお勧めいたします。 一つ目は、Denoising Auto-Encoder (DAE)を推薦タスクに応用したCollaborative Denoising Auto-Encoders (CDAE)です。 論文リンクはこちらです。 Collaborative Denoising Auto-Encoders for Top-N Recommender Systems 通常のAutoEncoderでは、入力と出力が近くなるようにEncoderとDecoderを学習していきます。 一方、DAEでは、入力にノイズを乗せ、AutoEncoderのようにEncoder、Decoderへと通し変換させ、得られる出力がノイズを乗せる前のデータに近くなるように学習します。 ノイズの乗せ方はいろいろありますが、今回推薦タスクに用いるノイズとして、入力ベクトルの各次元の値をランダムに0にする、という処理を採用しています。 CDAEのモデル全体は次のようになっています。 本論文で提案しているCDAEでは、入力にuser $u$ のinteractionの履歴 $\boldsymbol y_{u}$ (item数の次元を持ったベクトルで、過去にinteractionがあったitemに対応する次元のみ1が立っているようなone-hotベクトルを想像すると良いと思います。)を用いています。図はitemが5つである場合を表しています。 user $u$ のinteractionの履歴 $\boldsymbol y_{u}$
AutoEncoder系の手法でTop-N推薦まとめ - Qiita

レビューチェッカーを導入した

半自動でCSさんの負荷を前よりも減らす
レビューチェッカーで食べ物かどうかチェックをしている、つくれぽの仕組みと一緒

クックパッドが挑戦する「レシピ」と「かいもの」をつなぐ新しいサービス作り ~ 役割にとらわれず新しい価値に向き合い続けるチーム ~

Engineer 谷口さん, Designer: 新妻さん
10名で開発をしている

1. レシピと買い物をつなぐ

クックパッドマートとレシピをつなぐ
「買い物」と「献立決め」は隠れた意思決定がある

2. 新しい機能を使ってもらうための取り組みと学び

買い物機能を知らせるために色々施策をした
  • 機能紹介:x
  • 無料お試し:△(無料だと後から請求されそうで怖い)
  • いちご試食:○
  • 商品の紹介:x
    • 広告のように見えた
  • 食材の一覧をマートで表示する:△
    • 工夫したものの食材と内容に差異がある難しさ
      • ニンニク ⇒ ニンニクチューブ
      • 鳥もも1枚 ⇒ カット済み鳥もも肉

3. 作ったもので語る

コンセプトやデザインモックはユーザ体験を都合のいいように解釈してしまう
プロトタイプをつくって学びを得るまで2時間!!

最後に

毎日のように料理を楽しむ
ユーザと一緒によりよいサービスを作る
デザイナーやエンジニアが役割を超えて、新しい価値に出会える

Go Global Search 2

Engineer: Orgilさん
Cookpad Globalはイギリスで運営している
100人以上の40カ国以上の人たちで関わっている

アーキテクチャを刷新した

notion image
Ruby x ElasticSearchでの検索システムを作っている人たちは少なかった。採用が困難だった。
Python x ElasticSearchでリアーキテクチャして計算もしやすくした

学習の仕組み

kafka event streaming
⬇️
Faust by python
⬇️
DB table Update

No more shared DB!

前はレシピとDBを共有していた

ABテストの仕組み化

Enrichment pipeline by ML API
Yamlファイル + FeatureToggleで簡単にABテスト
検索は何度もデータを取らないと良いものにはならないのでABテストができる仕組みは非常に大事
エンジニアだけでは30言語の改善は難しいので現地の人たちを頼りに改善を重ねていった

まとめ

人員も増え、自分達で検索生を向上させ、検索UIも改善して全て自分たちで改善することができるようになった

最後に

懇親会

野毛で一番大きい居酒屋でワイワイしました。様々な職種の人が集まっていて楽しい会でした。(はなたれは野毛で一番大きいらしい)
notion image
有志で二次会のシーシャバー
有志で二次会のシーシャバー
個人的な感想です!見たい人はどうぞ🫰
初めての参加でしたが、完全招待制で参加できてよかったです。限定的に大事にされてる感じがして参加していて集中して聞けました。無駄にノベルティ配り合戦もないのも良いところ。(結局みんな捨てて無駄になるしね)
みんな技術にイキイキしていて速攻にプロトタイプを実装していたりしていて、チャレンジし易い環境がすごく羨ましく思えました。その代わり責任も大きいので大変そうですが、失敗を受け入れて次に活かす組織を醸成していて、羨ましいなと思いました。
マイクロサービスでの苦労やイケてないと思えるチーム構成を奥せず変更していける組織は強いなと感じました。組織変更が一番大変なイメージだからそれできるんだ!という驚き。(自分の今の環境でやろうと思うと何年かなるんだろう、、、)
あと発見だったのはクックパッドマートってどうせ高いんでしょ?というイメージだったけれどそんなこともなくて、よくよく考えてみるとユーザからしたら非同期的な仕組みで配送も貯めれるし、注文者も家で待たなくて良いし、まさにメッセージング的な仕組みで可用性高いなと感じました🤔
もう少し前から気づいていればもっと使ったのにと思ったので家内で勧めていこうと思う。また使ってみたら感想をTwitterとかに投げてみようと思う(優秀なクックパッドの人が拾ってくれるかもしれない)
後日資料と動画がアップされるらしいので要チェック!!
 
招待ありがとうございました!また来年も参加したいです🫰