「Cookpad TechConf 2018」に参加してきました

毎日の料理を楽しみにする挑戦をし続けた20年

クックパッドとは

  • 毎日の料理を楽しみにする会社
  • クックパッドはテックカンパニー

プロジェクトの進め方

クックパッドの “体系的” サービス開発

  • 新井 康平

サービス開発の難しさ

Build

  • 不必要に大きくしてしまうと検証したいことがぶれてしまう

Measure

  • 複数のA/Bテストが衝突して計測がぶれる
  • 正しく計測できているか

Learn

  • 出てきた数字をどう解釈すれば分からない
  • 数字は出たが学びを得られない

失敗しないために

  • 前から順番にループを考えない
  • 逐次的にすすめると手戻りが起きる
    • 最初にサイクル全体を設計するべき
  • サービスに対する理解(施策結果の予想)と現実のギャップ

フレームワーク

クックパッドクリエイティブワークフロー

  • 辻 朝也

開発チーム構成

  • 1サービス140人
  • 2w~1m
  • 利用シーン別に区切ってその中に複数チーム
    • 投稿
    • 検索
    • 記録

事例

  • ミッションオーナー
    • 目標責任
  • デザイナー兼ディレクター
    • ユーザー体験の責任
  • iosエンジニア
    • 技術的責任
  • androidエンジニア
    • 技術的責任

施策・体験

  • 目的と仮設を明確にする

デザインレビュー

  • なぜそういうデザインにしたか
  • チーム内外でレビュー
  • issueに蓄積

施策の指標とレビュー

  • ログについても全員で話す

テスト

リリース後分析

デザインリリースマネージャー

  • バージョン単位でUI変更ある箇所を把握しデザイン周りを一貫して管理

What/How to design test automation for mobile

  • 松尾 和昭
  • appiumのメインコミッター

テストを自動化したい

SPLIT

Scope

  • テストの範囲

Phase

  • 開発中のテストなのか
  • 本番稼働中のテストなのか

Level

  • どこまでテストを進化させるか
  • 何をテスト?
  • どう実装?
  • どう計測?
  • どこまで自動化?

size

Type

  • どのような目的を持ったテストなのか
    • ロジックが正しく動いているかのテスト
    • パフォーマンスのテスト
    • UIのテスト
  • 縦軸
    • BusinessFacing
    • TechnologyFacing
  • 横軸
    • GuideDevelopment
    • CritiqueTheProduct

Rubyの会社でRustを書くということ

  • 小林 秀和

クックパッドで使ってる言語

クックパッドのpush通知

  • 都度配信
  • 一斉配信

クックパッドのアプリ構成

  • railsのモノリシックだったけど小さいアプリはマイクロサービス化してる
  • push通知基盤貧弱だとダメになってきた

新しいpush通知配信基盤

  • 受信設定クエリ
  • ARNクエリ
  • SNSに通信
  • こうすることでユーザIDとメッセージ放り込めば通史が行く
  • 数百万件通知
  • rubyじゃ向いてない
  • そこでrust
    • データ競合の可能性のあるコードをコンパイルで検出
    • 速度安全性並行性

Rustのいいところ

  • マルチスレッドが安全
  • 安心して高速化に取り込める
  • 汎用ライブラリ化しやすい型システム

cookpad storeTV 〜クックパッド初のハードウェア開発〜

  • 今井 晨介

StoreTV

  • スーパーに置いてある小さいテレビみたいな
  • スーパー
    • 無料で商品販売促進
  • 買い物客
  • 食料品メーカー
    • 購買促進

ハードウェア開発

  • ソフトウェアと同じようにサイクルを回す
    • サイクルは長めになる
  • 第1サイクル
    • 最小価値検証
  • 第2サイクル
    • スケール
  • 第3サイクル
    • 収益化

第1サイクル

  • 最小価値検証
  • ストアに電話調査
  • アプリ利用率
  • 売上

第2サイクル

  • 何をやって何をやらないのか
  • 得意なことは自分たちで、不得意なことはひとりでやらない

第3サイクル

  • 広告の追加
  • アプリのバグ対応
    • 長時間可動によるバグ
    • 今までやってる開発と違う観点
    • 負荷検証
  • 顔認識も入れてどれだけの人に見られたか情報を集める

Challenges for Global Service from a Perspective of SRE

  • 渡辺 喬之

クックパッドのグローバル・サービス

  • 海外向けに日本のとは異なるサービスを提供している
  • 22言語68カ国
  • スタッフは世界中に点在

グローバルサービスの成長

  • 対応言語ここ1年で15 -> 22言語に、58カ国->68カ国
  • 料理は地域と密接

グローバルサービスにおけるSREの課題と挑戦

特定の国のユーザ体験が悪い

  • その国に住んでないので同じ環境でテストできない
    • 68カ国あるから直接いくのは大変
  • 定点観測した
    • Catchpointを使った
  • 米国から遠いとレスポンス悪い
    • サーバは米国と日本
  • Fastlyを導入した

イベントがとにかく多い

  • 祝祭日などのイベントが地域によってある
    • そのタイミングでアクセス増
    • 日本だとバレンタインでアクセス急増
  • 展開国数が増えるとイベントも増えて負荷も増
  • 全てのイベントに都度対応は難しい
    • 時差もあるし国もどんどん増えてるし
  • DBはAurora
  • Dockerアプリ開発環境の提供

デプロイのオペレーションコストが高い

  • 日本で可能なことが海外ではできないこともある
    • 長時間停電とか
  • 世界のどこからでもデプロイできるようにしたい
    • Slackからデプロイできるように
    • 誰がやっても同じようにできる

toilが急増する

  • toilにあてはまる業務
    • 手動対応
    • 自動化余地がある
    • 繰り返し発生
    • 発生してからじゃ遅い
  • toilが急増してやりたいことができない
    • アカウント管理周りの依頼が特に多かった
    • 社員数の増加
    • 開発ツールの増加
      • 世界中でVPNが使える環境にあるわけではない
        • basic認証ツール増える度にいれてらんない
  • nginxとomniauthによる社内ツールアクセス制御

動き出したクックパッドのCtoCビジネス

  • 村本 章憲

C to Cの新サービス

  • komerco
    • モノで毎日の料理を楽しくする
    • 食器

komerco

  • EC
    • product
  • media
    • story
  • cookpad
    • recipe

komercoの技術

firebase

  • 高速
    • APIを作らなくていい
  • セキュリティ
  • オートスケール

OSSとして公開

  • OSSとしてライブラリを公開する
    • 外部からのバグ報告
    • 公開することを意識して疎結合化促進
    • 再利用できる

Solve "unsolved" image recognition problems in service applications

クックパッドのR&D

  • いろいろやってる
  • その中で今日は画像分析

画像分析

  • 機会は人間より優秀になっている
    • ただし理想的な状況下であること
  • ポイント
    • 適切なラベルの付与
    • 適切なカテゴリの設計
    • closed set
  • 実サービスで解くべき問題が何なのか
    • 間違ってることがおおい
    • trial&errorで探っていく
  • 画像分析に限った話ではない

事例

料理きろく

  • ユーザの端末から料理の画像だけを引っ張り出す
  • 解きたい問題がなんだと思ってたか
    • 画像が料理なのかどうか
  • やってみると考える事とても多い

モバイルへの移行

  • 今後対応していく

Beyond the Boundaries

  • 成田 一生

料理とインターネット

  • インターネットがないと本を買うとか親から引き継ぐとか
  • インターネットによって広く共有できるようになった

クックパッド2018の技術スタック

  • rails
  • go
  • rust
    • ハイパフォーマンスを安全に
  • swift
  • kotlin
  • ReactNative
    • プロトタイプ向けにつかってる
  • firebase
  • ECS
  • Docker
  • Hako
    • デプロイツール
  • rubyのコントリビューターもいる
    • 自分たちの使ってる技術が廃れないように自分で育ててく

文化

  • Beyond the Boundaries
  • 境界を認識
    • 自身の役割
    • 自身の技術力
  • 人が増えて役割が特化
    • 役割を飛び越えていろいろやたせたい
    • 社内hackarade

テックリード制度

  • 部門内のミニCTO
    • 技術選定
    • コードレビュー
    • メンタリング
    • エンジニア評価