Skip to content

Instantly share code, notes, and snippets.

@dtan4
Created June 3, 2015 08:51
Show Gist options
  • Save dtan4/39d1e60d023dd22d45c6 to your computer and use it in GitHub Desktop.
Save dtan4/39d1e60d023dd22d45c6 to your computer and use it in GitHub Desktop.

クックパッドはなぜ開発しやすいのか

  • @mirakui

cookpad

  • 2M recipes
  • 52M UB
  • 1.6M Premium Service Users
  • 1000 EC2
  • 15,000 req/s
  • 7 ops
  • 90+ devs
  • 10+ deploys/day
  • Rails の人柱
    • 1732 models

開発しにくい

  • レガシーコード、技術的負債
  • 放置された Fail テスト
  • 属人的デプロイ、デプロイを恐れる
  • 素早く価値を提供したい
    • x 現場が楽をしたい

開発

  • テストああああみたいなテストデータを流し込む
  • ダミーデータではなく本番のデータを使って開発する
    • 作っているのは機能ではなくサービスである
    • 本番と同期した DB
    • ユーザと同様の体験
    • 予期せぬデータによるバグ、重いクエリ
  • 半年ごとに mysqldump -> master-slave
    • AUTO_INCREMENT に巨大なオフセットを指定することで本番との衝突を回避
    • ステートメントベースレプリでは開発が壊れるので業ベース
    • 本番 -(statement)- binlog変換 -(row)- dev

dogfooding

  • スタッフ限定公開, 10%限定
  • サービスの価値は使わないとわからない
  • 品質とか要らん機能を作ってしまう
  • Chanko
    • ベータ検証
    • エラーが出たら本来の処理にフォールバック
    • 価値が認められたら un-chanko

テスト

  • RSpec
    • 1800+ files
    • 21000+ examples
    • 7 min
  • Test smells
    • 実行時間が長い
    • fail しやすい
  • RRRSpec
    • 複数の Spot instances
  • 業務時間外はインスタンス減らす
  • Spot Instance
    • オンデマンド価格より高くなることある
  • まれにコケる example
    • 開いている worker で自動的に再実行
    • 1度でも success したら success
    • 記録されてる
    • 割れ窓理論
  • fail した example を blame して通知
  • all-night CI
  • 10分以上かかったら alert
  • pending 通知

デプロイ

  • 開発者自身がデプロイ
  • 営業時間内のみデプロイ
  • 13s -> 150 hosts
  • cap
    • スケールしない
    • 1台から全台に ssh
  • mamiya
    • S3 に tar を置く
    • 全台が tar を pull
    • Serf イベントで伝搬
    • デプロイはコードベース切り替えてサーバリロードだけ
    • スケールする

開発のしやすさを保つ

  • 割れ窓を作らないよう、指標を持って改善する
  • 開発デプロイのサイクルが早ければ、本番環境を使った開発ができる
    • ユーザと同じ体験
  • 開発しやすさに投資する価値は十分ある
  • 結果として組織もサービスも健全な状態を保てる
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment