「クックパッド」のものづくりセミナーに行ってきたまとめ
昨日、ウェブキャリアさんが主催する月間524万人が利用する食のインフラ、「クックパッド」のものづくりセミナーに行ってきました。
クックパッドと言えばRails での大規模リニューアルがニュースになりました。また、大規模開発には向かないと言われたこともあるRails でこれほど大規模なサイトを開発するノウハウに興味があり、参加しました。
めちゃくちゃ良い情報を得ることができました。これはすごいセミナーでした。以下、まとめです。メモ不足だったので、一部他のサイトの情報を元にまとめています。
構成
- Rails 2.0(現在2.1 に移行中)
- Mongrel 1.1.5
- mongrel_cluster 1.0.5
- MySQL 5.0.45
- Apache(2.2.3) 8台
- mod_proxy_balancer
- App サーバ44台
- DB Slave サーバ22台
- 仮想サーバを使って、1つのハードにApp 2台、DB Slave1台
- ログ DB サーバ 16台
- ログもMySQL で管理
- レシピ全文検索用
サーバの台数が走り書きで怪しいです
運用ツール
パフォーマンス改善
- 1. キャッシュ
- 2. クエリチューニング
- 3. DB 分割
1. キャッシュ
2. クエリチューニング
3. DB 分割
- 08年7月にリニューアルした時には、1台のサーバに2台のApp サーバ、1台のSlave、1台の検索用DB を仮想サーバとしてのせていた
- パフォーマンスが全然でなかった
- 検索用DB をSlave に統合
- 検索用DB サーバがない分、Slave に当てられるメモリが増えてパフォーマンス改善
- DB サーバは「メモリ容量 > DB テーブルのファイルの容量」が大切
- メモリ(ページキャッシュ)にのりきらないと、Swap が発生し、その分重くなる
- DB 起動後はDB のファイルをcat して/dev/null に投げてやるっていうアレね
開発ノウハウ
- レシピ全文検索
- 広告のためのプレビュー
- 未来の日付に配信される広告のプレビュー機能
- その広告をいれてページが崩れたりしないか前もって確認するため
- 全てのページで使える機能
- http://..../?2008-11-12 とやると、そのページの指定した日の状態が表示
- 誰でも使えないようにアクセス制限をかけている
- Time.now の上書きで実現
ものづくりノウハウ
- 1. つくるものを決める
- 2. 計画する
- 3. ものづくり3原則
- 4. 設計する
- 5. 開発する(開発3原則)
- 6. 質を高める
1. つくるものを決める
- A. Best に集中する
- 「Better なこと、やったほうがいいこと」はやらない
- Best なこととは、以下の3つの条件を満たす
- 情熱をもってやりたい!って思えること
- 得意なこと。そこに関しては世界一になれるほど得意
- やるべきこと = 収益化につながるということ
- B. ユーザの欲求にもとづく
- EOGS という分析方法を使う
- そのサービスに関わるユーザを設定
- そのユーザの欲求を分析
- 各欲求をどうやったら満たせるかを考える
- その全てを解決できる方法を探す
- それが成功しているイメージを行う
- そのイメージに対して数字での分析を行い、本当に欲求を満たせているか、検算を行う
- EOGS という分析方法を使う
2. 計画する
- スケジュールの決め方
- スケジュールの3分割の法則
- サービスを作る上で行うことになる、以下「3つ全てに同じ時間をかける」用にスケジューリングする
- 設計
- 開発
- 質を高める
- ポイントは、開発期間が3週間だとすると、1週間以内に設計できる機能しか開発しようとしないこと。Best に集中する
3. ものづくり3原則
- A. 無言実行
- 公開前にサービスに関して一切公言しない
- ユーザの不安をあおることになる
- 告知するメリットがない
- B. 無言語化
- 機能を言葉で説明しない。説明しなくても分かるようにする
- 「このボタンを押すと○○できますよ!」とか説明しないとわからないUI は使われない
- 基準として「2秒以内」で理解できないUI は使われず、ユーザは他の部分をクリックしてしまうと考える(2秒だと言葉での説明は無理なので、無言語化する)
- ヘルプやFAQ を読ませるのはユーザに負担をかける。というか読まれない
- 機能を言葉で説明しない。説明しなくても分かるようにする
- C. サービスに値をつける
- 常に、「このサービスはいくらだろう」と考える
- 「無料だからこのくらいの機能でも使われるよね」はダメ
- お金を払ってもいいって思われるものが無料で提供されて初めて使われる
4. 設計する
- A. 設計の順番
- 広域な設計から始め、詳細な設計へと落とす
- 要件定義>サイトマップ>ページ遷移>ページ詳細>DB構造
- エンジニアが好きな詳細設計から始めると、機能にとらわれる
- ユーザに提供するのは機能ではなく、価値
- B. 設計に最低限必要なもの
5. 開発する(開発3原則)
6. 質を高める
- ユーザテストを行う
- その際、一切の質問に答えない
- 次の点を見る
- 正しい価値を提供できているか
- こちらが想定した通りに機能が使われているか
- 想定と違ったら作り直す
感想
まず、しっかりした哲学を持って開発されていると感じました。ここまで考えているからこそ、あれほどのサイトができるんですね。その哲学は広告にも及び、「サイトにのせる広告も料理をが楽しくなる広告でないといけない」とおっしゃっていました。この辺り、Apple のにおいを感じます。
メンバーもバリエーションに富んでいて、「古きUNIX の技術を最新のRails に応用するできないか」とかを考えている人もいるとか。とても面白そうですね!(*´艸`)
CookPad だけに、満腹なセミナーでした。素晴らしかったです。1時間という短い時間にこれだけの内容をお話して下さった、CTO の橋本さん、そして、素晴らしいセミナーを提供しつづけて下さるウェブキャリアさんにお礼申し上げます。