カテゴリ:Ruby

2008-11-21 Fri


Ruby セミナーに行って来た [Ruby]


524万人が利用する食のインフラ「クックパッド」のものづくり(橋本さん)を聞いて来ました。以下メモ。書いてみると、盛り沢山でしたねぇ。もちろん誤っている箇所もあるかと思うので、参考までに。



■規模
  • 月間ユーザ 524万人 Railsサイト中世界 8位
  • 月間PV 2.8億PV Railsサイト中世界 3位
  • レシピ 45件
  • 16時から18時にピーク
  • 秋からバレンタインにかけてトラフィック増
  • 1.6倍/year の成長


■ サーバ構成
  • apache x 8台
  • app(mongle) x 44台
  • DB slave x 13台
  • master server x ?台
  • log_master server x ?台
  • log_slave server x ?台

mongle/mongle_clusterを利用

■ 中身

  • capistrano (デプロイ用)
  • god(mongle の再起動(メモリを食い潰すので時々再起動)
  • nagios(監視)
  • munin(サーバリソース監視)
  • FiveRunsManager(Rails用モニタリングソフト)


■ パフォーマンス
  • キャッシュの利用
  • クエリチューニング
  • DB分割

Railsは重いと言われるが、Railsのパフォーマンスより I/O が重いことが多い

  • キャッシュ
    • mongle を通すと、それだけで10〜12sec かかるので、ページキャッシュをメインに。


  • キャッシュできないもの
    • ユーザ毎に異なる表示
    • アクセスログ
    • 広告
      • AJAXのリクエストで埋め込んでいる


  • DB分割
    • むしろ統合化


app2G
app2G
slave DB8GB
検索DB4GB

という仮想マシンを

app2G
app2G
slave DB12GB

に統合し、10GBのデータがすべてOSのキャッシュに載るようにした(I/O負荷の低減)
アクセス数よりデータ量がパフォーマンスを左右する。

■ 開発基盤

  • プログラマは全員Mac
  • エディタ
    • Emacs(rails.el)
  • SCM
    • Subversion + trac
  • コードレビューシステム
    • Shinjiko(バグを修正して利用)
      • mondorian のクローン


■ DBのレプリケーション
  • マスター・レプリケーションの切替え
    • act_as_readonly_table を利用
      • データ更新後の select は master からするように改造


■ 全文検索
  • Tritttonを使用(未来検索ブラジル)
    • テーブルをjoin できる
    • 2インデックス使える
      • 絞り込検索OK
    • スレーブで、インデックスを張ったテーブルをそのまま利用可能


■ 専用URL

一部のユーザは自分用のURLを持つ

cookpad.com/ken

どうする?
=> route.rb で全てのコントローラを検索。一致しなかった場合は、専用コントローラに渡す。

■ 全ページのプレビュー機能
  • 新しい広告がきちんと表示されるか
  • 時限公開などがうまく動作するか


すべてのページで任意の日付でプレビューできる(Time.now を上書き)

?current_time=2008-11-01


もちろんアクセス制限あり。他所からのアクセスは無効

■ クックパッドのもの作り

  • つくるものを決める
  • 計画する
  • 設計する
  • 開発する
  • 質を高める


■ つくるものを決める
  • Bestなことに集中する。
    • 無限のリソースはない
    • 逆にいえば、Betterなこと、やった方がいいことはやらない
  • ユーザの要求に基づいたゴール設定


■ Bestなことに集中する
3つの輪が重なるところに注力
  • やりたいこと?
    • 情熱を持って取り組めること
  • できること?
    • 世界で一番になれること
  • やるべき?
    • 儲かること(言い替えれば、継続できるということ)


■ EOGS
EOGS (Emotion Oriented Goal Setting)

  • そのサービスに係わるキャストを立てる
  • キャスト毎の疑いのない欲求を理解する


※)専用シートで、目標がぶれないようにここで開発のコンセンサンスを取る

キャスト毎に

  • 疑いようのない欲求
  • 何をすれば手に入るか
  • How to do?
  • 成功のイメージ
  • 指針


を考える

■ 計画する
  • スケジュール三分割の法則
  • クックパッドものづくり 3原則


■ スケジュール三分割の法則
サービスまでにやること

  • 設計
  • 開発
  • 質を高める


にそれぞれ同じだけの時間を取る。もし 3週間後にリリースなら、それぞれに 1週間を使う。不要な機能は削り、Bestに集中

■ 無言実行 - ものづくり 3原則 -
公開前にサービスについての説明をしない
  • サービスを言葉で説明することはできない
  • ユーザに不安を抱かせない


告知のメリットも低い

■ 無言語化- ものづくり 3原則 -
  • 機能を言葉で説明しない
    • 一瞬で理解できるインタフェースでないと使われない
    • 最大2秒
  • ヘルプやFAQはユーザへの負担
    • そもそも読まれない
    • )
    • (
  • 無料だから大丈夫では巻ける
    • 無料だというのだけでは使われない
    • お金を払ってまで使いたいサービスが無料だと使われる


cookpad もかつては有料だった。

■ 設計する
サイト設計の順序
  • 設計に最低限必要なもの
    • 要件
    • サイトマップ
    • 遷移
    • ページ詳細
    • DB構造


詳細から設計すると、機能に囚われる。ユーザに届けるべきは、機能ではなく価値

※ アジャイル宣言の一節

包括的なドキュメントよりも動くソフトウェア


ドキュメントが無い方がよいと言っているわけではない。必要最低限のものは必要

■ 最低限必要な設計

  • 遷移
    • おかしな遷移だとユーザは目的の行動ができない
  • ページ詳細
    • 手書きでOK。A4を横に使う。図は縦長。両再度を空白にしておくと書き込めて良い
  • DB
  • サイトマップ(規模が大きな場合)


■ 開発する
開発の 3原則
  • Rail に乗る
  • リファクタリングをしつづけられる状態を維持する
  • DRYを意識する


■ Rail に乗る
  • 明日の自分は他人、コードを読みにくくしない
  • 改造してしまうと、Rails のバージョンアップへの対応が困難になる


Rail を外れそうになったら、他の機能でなんとかならないか検討

=> Rails自体をHACKしない!

アジャイルの最も大切な概念

- テスト駆動

現在クックパッドはここが課題。2006年リニューアルは、2年で拡張不可能に......テスト駆動の徹底!

■ DRY
  • YANGNI(You Are Not Going Need It) にも注意
    • いずれ必要にならない


■ 質を高める
  • ユーザテスト
  • 顔マーケティング


■ ユーザテスト
  • バグの発見よりも大切なことがある
  • ユーザに狙った価値を提供できているか?


  • ユーザにゴールを伝えて行動してもらう
    • 質問には答えない。
      • 質問がでる遷移、インタフェースは失敗
  • ユーザに何を考えているかを話ながら操作してもらう


■ 顔マーケティング
「かうき」の法則

  • ウリを伝える「顔」
  • ライバルに勝てる「ウリ」
  • ウリが実感できる「動き」


■ エンジニア紹介
須藤さん、高田さん、山田さん、森田さんなどなど

■ Q&A
Q. 45万件といいながら、どれぐらいのレシピが見られているのか
A. 45万レシピのほとんどが、1週間以内に閲覧されている

Q. Rails を選んだ動機は?
A. 元はColdFusion. PHP も使ってみた。Rails が出て来た時アジャイル開発ができる!と思った。しかし100万人が捌けるか?と思い、一旦あきらめた。しかしRailsが流行。ぼやぼやしてられない!で Railsへ。

追記: 2008/11/27
肝心ななこと忘れてました。エンジニア絶賛募集中だそうです。
Ruby on Railsセミナーのお知らせ



2008-03-08 Sat


Rails + rcov でテストカバレッジを調べる [Ruby]


そのコードはテストされているか?
http://d.hatena.ne.jp/zariganitosh/20080306/1204791789

これはおもしろい!と思ったら、Perl にも

Devel::Cover
http://d.hatena.ne.jp/tomi-ru/20080212/1202775578

実際やってみると、各項目にはリンクがされていて、どこがダメかも色分けしてくれて非常によさげ :-)

Catalyst で Devel::Cover
http://d.hatena.ne.jp/Bayside/20070704/p1

その他、Perl のテストツール各種
http://catalyst.g.hatena.ne.jp/dann/20080308/1205033126


2005-11-30 Wed


Ruby Tutorial [Ruby]


http://tryruby.hobix.com/

via <http://d.hatena.ne.jp/kinneko/20051130/p5>

ブラウザ上で、Ruby のチュートリアルが受けられます。面白い :-)