Your SlideShare is downloading. ×
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02

2,200

Published on

The presentation document of a speech at Kansai Ruby Kaigi #02.

The presentation document of a speech at Kansai Ruby Kaigi #02.

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,200
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
22
Comments
0
Likes
6
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 関西Ruby会議02 続・現場で役立つ Ruby on Rails パターン (株)万葉 大場寧子 株式会社万葉2009年11月7日土曜日
  • 2. 関西Ruby会議02 続 •Ruby会議2009 •Pragmatic Patterns of Ruby on Rails - 現場で役立 つRuby on Railsパターン 株式会社万葉2009年11月7日土曜日
  • 3. 関西Ruby会議02 自己紹介 •プログラマ •Rails アプリケーションを開発 • Akasaka.rb •株式会社万葉 株式会社万葉2009年11月7日土曜日
  • 4. 提供 株式会社 万葉 Everyleaf Corp.2009年11月7日土曜日
  • 5. 関西Ruby会議02 Ruby on Rails 逆引きクイックリファレンス 株式会社万葉2009年11月7日土曜日
  • 6. 関西Ruby会議02 サイン会 やります 株式会社万葉2009年11月7日土曜日
  • 7. 関西Ruby会議02 作ってるもの •Web家計簿「小槌」 •iPhoneアプリ「iCarta」 • プラグイン類 • ナレジオン (株)ユーフィット 株式会社万葉2009年11月7日土曜日
  • 8. 関西Ruby会議02 Web家計簿「小槌」 • http://www.kozuchi.net • http://github.com/everyleaf/kozuchi 株式会社万葉2009年11月7日土曜日
  • 9. 関西Ruby会議02 iCarta 株式会社万葉2009年11月7日土曜日
  • 10. 関西Ruby会議02 プラグイン http://github.com/nay •html5jp_graphs •sub_resources •record_with_operator •i18n_ext •image_upload (RubyForge) 株式会社万葉2009年11月7日土曜日
  • 11. 関西Ruby会議02 ナレジオン http://knowledgeon.com/ (株)ユーフィット グループウェア 10/15 にリリース 株式会社万葉2009年11月7日土曜日
  • 12. 関西Ruby会議02 ナレジオンの特徴 • ひととおりの機能の揃ったグ ループウェア • 気軽な情報公開ができる • しっかりした開示制限と横断的 な検索 • ワークフロー 株式会社万葉2009年11月7日土曜日
  • 13. 関西Ruby会議02 Railsにしては 人数の多い 開発体制 (10人強) 株式会社万葉2009年11月7日土曜日
  • 14. 関西Ruby会議02 Rubyでの開発 •少人数が「勝ち」と言われる 株式会社万葉2009年11月7日土曜日
  • 15. 関西Ruby会議02 必要なら仕方ない • 短期間に多くの機能 • 並行開発 株式会社万葉2009年11月7日土曜日
  • 16. 関西Ruby会議02 開発体制を工夫 •アジャイルっぽく • ペアプログラミング • 分担を固定しない •朝会 •合意作り 株式会社万葉2009年11月7日土曜日
  • 17. 関西Ruby会議02 合意作りが大事 •大事なことは合意を作る •書いておく • 合意≠遵守 • 合意≠既成事実 株式会社万葉2009年11月7日土曜日
  • 18. 関西Ruby会議02 そうした現場で 気づいた技術ネタを 今日喋ります 株式会社万葉2009年11月7日土曜日
  • 19. 関西Ruby会議02 Ruby会議2009 で話したことの おさらい 株式会社万葉2009年11月7日土曜日
  • 20. 関西Ruby会議02 アプリケーションが 大きく複雑に なると 株式会社万葉2009年11月7日土曜日
  • 21. 関西Ruby会議02 メンテナンスが 大変になる 株式会社万葉2009年11月7日土曜日
  • 22. 関西Ruby会議02 色々な人間が コードを触る 株式会社万葉2009年11月7日土曜日
  • 23. 関西Ruby会議02 人によって 書き方が違ったり 株式会社万葉2009年11月7日土曜日
  • 24. 関西Ruby会議02 変更しづらくなる 株式会社万葉2009年11月7日土曜日
  • 25. 関西Ruby会議02 変更できることは大事 •小さくはじめられる •素早いサービスの開始 • 後から育てられる • ビジネスの変化についていく 株式会社万葉2009年11月7日土曜日
  • 26. 関西Ruby会議02 さらに 株式会社万葉2009年11月7日土曜日
  • 27. 関西Ruby会議02 Rails案件 Rails技術者の 増加 株式会社万葉2009年11月7日土曜日
  • 28. 関西Ruby会議02 メンテナンスすべき Railsプロジェクト の増加 株式会社万葉2009年11月7日土曜日
  • 29. 関西Ruby会議02 変更しやすさを 維持する 仕組みが必要! 株式会社万葉2009年11月7日土曜日
  • 30. 関西Ruby会議02 それには? 株式会社万葉2009年11月7日土曜日
  • 31. 関西Ruby会議02 コードを良い状態に 保つことが重要 株式会社万葉2009年11月7日土曜日
  • 32. 関西Ruby会議02 良い状態 •いい設計 •読みやすい、わかりやすい •間違いにすぐ気づく 株式会社万葉2009年11月7日土曜日
  • 33. 関西Ruby会議02 そこで実装パターン •Rails における実装パターンを 見つけ出し、共有する • 効率がよい • 一貫性がある 株式会社万葉2009年11月7日土曜日
  • 34. 関西Ruby会議02 具体的には •ARオブジェクトから検索を始める •ARオブジェクトをフィルターで得る •ビジネスロジックをモデルに移動す る方法 • コールバックの活用 株式会社万葉2009年11月7日土曜日
  • 35. 関西Ruby会議02 ということを Ruby会議2009で 話しました :) 株式会社万葉2009年11月7日土曜日
  • 36. 関西Ruby会議02 本題 株式会社万葉2009年11月7日土曜日
  • 37. 関西Ruby会議02 今日の話 1.本当は奥が深い検証の話 2.RESTfulとの付き合い方 株式会社万葉2009年11月7日土曜日
  • 38. 関西Ruby会議02 その前に • Rubyをよく使っている 人? • Railsをよく使っている 人? 株式会社万葉2009年11月7日土曜日
  • 39. 関西Ruby会議02 1. 本当は奥が深い 検証 の話 株式会社万葉2009年11月7日土曜日
  • 40. 関西Ruby会議02 Rails の検証は 良くできている save 入力 検証 保存 画面 エラー情報 株式会社万葉2009年11月7日土曜日
  • 41. 関西Ruby会議02 コード例:モデル class Book < ActiveRecord::Base validates_presence_of :title end 株式会社万葉2009年11月7日土曜日
  • 42. 関西Ruby会議02 コード例:画面 <%= error_messages_for :book %> 株式会社万葉2009年11月7日土曜日
  • 43. 関西Ruby会議02 任意の検証が書ける validate :check_title private def check_title errors.add(:title, Rubyがないよ!) unless title.to_s =~ /Ruby/2009年11月7日土曜日 end 株式会社万葉
  • 44. 関西Ruby会議02 とても便利 •豊富な検証メソッド •自由に追加できる • エラーメッセージを扱える • 不正状態で保存するのを防止 株式会社万葉2009年11月7日土曜日
  • 45. 関西Ruby会議02 しかし 株式会社万葉2009年11月7日土曜日
  • 46. 関西Ruby会議02 最初の印象よりも 奥が深い 株式会社万葉2009年11月7日土曜日
  • 47. 関西Ruby会議02 私の遭遇した課題 •乱用されることがある • 検証ニーズが場面によって違う 場合に困っている人を見かける 株式会社万葉2009年11月7日土曜日
  • 48. 関西Ruby会議02 検証についての 課題 1)何を「検証」すればいいのか 2)場面によって検証ニーズが違う とき 株式会社万葉2009年11月7日土曜日
  • 49. 関西Ruby会議02 1)何を 「検証」すれば いいのか 株式会社万葉2009年11月7日土曜日
  • 50. 関西Ruby会議02 Rails の ActiveRecord の 「検証」とは? 株式会社万葉2009年11月7日土曜日
  • 51. 関西Ruby会議02 一般的な定義 ActiveRecord オブジェクトが 不正な状態で 永続化されないように するための仕組み 株式会社万葉2009年11月7日土曜日
  • 52. 関西Ruby会議02 いいえ 株式会社万葉2009年11月7日土曜日
  • 53. 関西Ruby会議02 私の定義 ActiveRecord オブジェクトが ユーザーに許可された 操作によって 不正な状態で 永続化されないように するための仕組み 株式会社万葉2009年11月7日土曜日
  • 54. 関西Ruby会議02 ユーザーに 許可された 操作によって 株式会社万葉2009年11月7日土曜日
  • 55. 関西Ruby会議02 Railsの検証の失敗は、 予期された、 ユーザーに対して丁寧に対 応すべき出来事としてデザ インされている 株式会社万葉2009年11月7日土曜日
  • 56. 関西Ruby会議02 検証失敗は正規ルート •saveでfalseが返る •美しいメッセージを用意 •表示用ヘルパー 株式会社万葉2009年11月7日土曜日
  • 57. 関西Ruby会議02 従って 株式会社万葉2009年11月7日土曜日
  • 58. 関西Ruby会議02 これは対象外 • ユーザーによる不正な操作 で生じる不正な状態の検出 • バグや故障によって生じる 不正な状態の検出 株式会社万葉2009年11月7日土曜日
  • 59. 関西Ruby会議02 つまり モデルの検証 validate 株式会社万葉2009年11月7日土曜日
  • 60. 関西Ruby会議02 乱用されがち (過度の期待) 株式会社万葉2009年11月7日土曜日
  • 61. 関西Ruby会議02 乱用の例1 モデルの検証 = Validate 株式会社万葉2009年11月7日土曜日
  • 62. 関西Ruby会議02 弊害1 ユーザーが 解決できない エラーメッセージ 株式会社万葉2009年11月7日土曜日
  • 63. 関西Ruby会議02 弊害2 開発者が不具合に 気づきにくい 株式会社万葉2009年11月7日土曜日
  • 64. 関西Ruby会議02 弊害3 無駄な労力 •無駄にきれいなメッセージ •無駄に丁寧な例外処理 株式会社万葉2009年11月7日土曜日
  • 65. 関西Ruby会議02 改善策 モデルの検証 validate コールバックで例外 株式会社万葉2009年11月7日土曜日
  • 66. 関西Ruby会議02 コールバック •before_validation •after_validation •before_save •after_save •etc... 株式会社万葉2009年11月7日土曜日
  • 67. 関西Ruby会議02 コード例 before_save :check_parent_id private def check_parent_id return true unless parent raise “bad parent_id!” unless parent.user_id != user_id end 株式会社万葉2009年11月7日土曜日
  • 68. 関西Ruby会議02 専用の例外クラス before_save :check_parent_id private def check_parent_id return true unless parent raise IllegalOperationError, “bad parent_id!” unless parent.user_id != user_id end 株式会社万葉2009年11月7日土曜日
  • 69. 関西Ruby会議02 そのほか •initializeや代入時に不正状態 をはじくことも 株式会社万葉2009年11月7日土曜日
  • 70. 関西Ruby会議02 乱用の例2 株式会社万葉2009年11月7日土曜日
  • 71. 関西Ruby会議02 乱用の例2 validate モデルの Controller層の 検証 エラー処理 株式会社万葉2009年11月7日土曜日
  • 72. 関西Ruby会議02 検証を エラー処理全般に 利用する? 検証≠エラー処理 株式会社万葉2009年11月7日土曜日
  • 73. 関西Ruby会議02 まとめ 何を「検証」するか • モデルの状態 • ユーザーに許可した操作に よって起こりえる状態不正 株式会社万葉2009年11月7日土曜日
  • 74. 関西Ruby会議02 2)場面によって 検証ニーズが 違うとき 株式会社万葉2009年11月7日土曜日
  • 75. 関西Ruby会議02 例 •コマンドラインツール •管理者と一般人 •ウィザード形式での検証 •機能による違い •etc... 株式会社万葉2009年11月7日土曜日
  • 76. 関西Ruby会議02 あるモデルの 「検証」は 1パターン ではない 株式会社万葉2009年11月7日土曜日
  • 77. 関西Ruby会議02 でも ActiveRecordの 検証の通り道は 1パターン 株式会社万葉2009年11月7日土曜日
  • 78. 関西Ruby会議02 そんなときは 株式会社万葉2009年11月7日土曜日
  • 79. 関西Ruby会議02 分岐させる Object 機能A 機能B コンソール 検証 検証 検証 save save save 株式会社万葉2009年11月7日土曜日
  • 80. 関西Ruby会議02 モデルの用語で表現 Object 状態A 状態B 状態C 検証 検証 検証 save save save 株式会社万葉2009年11月7日土曜日
  • 81. 関西Ruby会議02 「状態」を設計する Object デフォルト loose? by_admin? 検証 検証 検証 save save save 株式会社万葉2009年11月7日土曜日
  • 82. 関西Ruby会議02 各検証で分岐 validates_presence_of :description, :if => Proc.new {|o| !o.loose?} 株式会社万葉2009年11月7日土曜日
  • 83. 関西Ruby会議02 意外と面倒くさい 株式会社万葉2009年11月7日土曜日
  • 84. 関西Ruby会議02 自明だと 思っていると 痛い目にあう 株式会社万葉2009年11月7日土曜日
  • 85. 関西Ruby会議02 モデルの様々な 「使われ方」 を意識するとよい 株式会社万葉2009年11月7日土曜日
  • 86. 関西Ruby会議02 典型的な局面 •そのモデルの作成/編集画面 •関連モデルの作成/編集画面 •単体テスト •バッチ、ツール類 •コンソールでの訂正 株式会社万葉2009年11月7日土曜日
  • 87. 関西Ruby会議02 2. 本当は奥が深い 完 検証 の話 株式会社万葉2009年11月7日土曜日
  • 88. 関西Ruby会議02 ちなみに 株式会社万葉2009年11月7日土曜日
  • 89. 関西Ruby会議02 コールバック全般 についても同じ 株式会社万葉2009年11月7日土曜日
  • 90. 関西Ruby会議02 Railsで選べる コールバックの選択肢 •create/update/両方/なし •検証の有無 •destroyコールバックの有無 株式会社万葉2009年11月7日土曜日
  • 91. 関西Ruby会議02 アプリケーションの 要件は もっと複雑 株式会社万葉2009年11月7日土曜日
  • 92. 関西Ruby会議02 起こりがちな問題 • 削除していいかどうかのチェッ ク条件が論理削除と物理削除で 違う • 画面では子モデルを自動で作り たいがツールでは単体で作りた い 株式会社万葉2009年11月7日土曜日
  • 93. 関西Ruby会議02 ここでも Object 状態A 状態B 状態C callback callback callback callback callback callback callback 株式会社万葉2009年11月7日土曜日
  • 94. 関西Ruby会議02 二段構え 要件を単純にする うまく複雑化する 株式会社万葉2009年11月7日土曜日
  • 95. 関西Ruby会議02 2.RESTfulとの 付き合い方 株式会社万葉2009年11月7日土曜日
  • 96. 関西Ruby会議02 日頃、RESTと おつきあい してますか? 株式会社万葉2009年11月7日土曜日
  • 97. 関西Ruby会議02 RESTとは? •URLはリソース(名詞) • groups/3/notes/1 •HTTPメソッドは操作(動詞) • GET → 取得したい • DELETE → 削除してください •シンプルで統一された、人間も 読むことのできるI/F 株式会社万葉2009年11月7日土曜日
  • 98. 関西Ruby会議02 私のポジショニング •REST厨ではない(多分) •きれいなI/Fは気持ちいい •現実主義者 株式会社万葉2009年11月7日土曜日
  • 99. 関西Ruby会議02 RailsでのRESTful • とっつきにくい • 実用的 • ちょっと足りない • routes.rbが鬼 株式会社万葉2009年11月7日土曜日
  • 100. 関西Ruby会議02 大事なこと • 逃げちゃだめだ • 逃げちゃだめだ • (ry 株式会社万葉2009年11月7日土曜日
  • 101. 関西Ruby会議02 RESTfulにすると なにが嬉しいか? 株式会社万葉2009年11月7日土曜日
  • 102. 関西Ruby会議02 Railsに ついていく 株式会社万葉2009年11月7日土曜日
  • 103. 関西Ruby会議02 きれいなI/Fは 気持ちいい 株式会社万葉2009年11月7日土曜日
  • 104. 関西Ruby会議02 予測できる 統一される 株式会社万葉2009年11月7日土曜日
  • 105. 関西Ruby会議02 メンテナンス しやすい 株式会社万葉2009年11月7日土曜日
  • 106. 関西Ruby会議02 でも 難しい 株式会社万葉2009年11月7日土曜日
  • 107. 関西Ruby会議02 うまくつき合う方法 1) Rails的なツボ 2) RESTの基本 3) URLから考える 4) routes.rbの整理 株式会社万葉2009年11月7日土曜日
  • 108. 関西Ruby会議02 1) Railsの RESTfulの ツボ 株式会社万葉2009年11月7日土曜日
  • 109. 関西Ruby会議02 前提知識 マッピング 株式会社万葉2009年11月7日土曜日
  • 110. 関西Ruby会議02 マッピング (ルーティング) コントローラ コントローラ アクション アクション URL 株式会社万葉2009年11月7日土曜日
  • 111. 関西Ruby会議02 Railsの RESTfulの ツボは 株式会社万葉2009年11月7日土曜日
  • 112. 関西Ruby会議02 よくあるアクションの よくある アクション アクション全体 株式会社万葉2009年11月7日土曜日
  • 113. 関西Ruby会議02 マッピングを楽に map.resources aaaao a +option map.resource map.xxx map.connect 株式会社万葉2009年11月7日土曜日
  • 114. 関西Ruby会議02 よくあるアクションの URL メソッド アクション /groups GET index /groups POST create /groups/3 GET show /groups/3 PUT update /groups/3 DELETE destroy /groups/new GET new /groups/3/edit GET edit 株式会社万葉2009年11月7日土曜日
  • 115. 関西Ruby会議02 マッピングを楽に map.resources :groups 株式会社万葉2009年11月7日土曜日
  • 116. 関西Ruby会議02 その他のことは •なんとかしてください • map.resourcesのオプション • 名前付きルート • connet •最悪、何ともしなくても • /:controller/:action/:id 株式会社万葉2009年11月7日土曜日
  • 117. 関西Ruby会議02 もう1点 株式会社万葉2009年11月7日土曜日
  • 118. 関西Ruby会議02 マッピング (ルート)に 名前をつけよう 株式会社万葉2009年11月7日土曜日
  • 119. 関西Ruby会議02 それをURLの 名前にしよう 株式会社万葉2009年11月7日土曜日
  • 120. 関西Ruby会議02 名前に対応する メソッドがあれば 便利じゃね? 株式会社万葉2009年11月7日土曜日
  • 121. 関西Ruby会議02 例 groupsという名前をつけ たURLへリンクする <%= link_to "グループ一覧", groups_path %> 株式会社万葉2009年11月7日土曜日
  • 122. 関西Ruby会議02 そこで URL URL名 メソッド アクション /groups GET index groups /groups POST create /groups/3 GET show /groups/3 group PUT update /groups/3 DELETE destroy /groups/new new_group GET new /groups/3/edit edit_group GET edit 株式会社万葉2009年11月7日土曜日
  • 123. 関西Ruby会議02 だから map.resourcesすると 自動的にメソッドが使える <%= link_to "グループ一覧", groups_path %> 株式会社万葉2009年11月7日土曜日
  • 124. 関西Ruby会議02 2) RESTの基本 株式会社万葉2009年11月7日土曜日
  • 125. 関西Ruby会議02 リクエスト= 名詞 + 動詞 株式会社万葉2009年11月7日土曜日
  • 126. 関西Ruby会議02 名詞 動詞 リソース + HTTP URL メソッド 株式会社万葉2009年11月7日土曜日
  • 127. 関西Ruby会議02 名詞(リソース) •相手は複数か、単数か? • 名前は? • 識別するための情報は? 株式会社万葉2009年11月7日土曜日
  • 128. 関西Ruby会議02 名詞に注目 URL URL名 メソッド アクション /groups GET index groups /groups POST create /groups/3 GET show /groups/3 group PUT update /groups/3 DELETE destroy /groups/new new_group GET new /groups/3/edit edit_group GET edit 株式会社万葉2009年11月7日土曜日
  • 129. 関西Ruby会議02 動詞 種類 意味 特徴 GET 取得 リソースの状態を変更しない PUT 更新/作成 URLの示すリソースが DELETE 削除 処理後も同じリソース POST なんか変更 上記以外 株式会社万葉2009年11月7日土曜日
  • 130. 関西Ruby会議02 動詞に注目 URL URL名 メソッド アクション /groups GET index groups /groups POST create /groups/3 GET show /groups/3 group PUT update /groups/3 DELETE destroy /groups/new new_group GET new /groups/3/edit edit_group GET edit 株式会社万葉2009年11月7日土曜日
  • 131. 関西Ruby会議02 つまり •4つの動詞だけで機能を説明す ることを考える • 適切な動詞 • 適切な名詞 株式会社万葉2009年11月7日土曜日
  • 132. 関西Ruby会議02 3) URLから 考える 株式会社万葉2009年11月7日土曜日
  • 133. 関西Ruby会議02 URLを設計して その後で コントローラクラス を設計する 株式会社万葉2009年11月7日土曜日
  • 134. 関西Ruby会議02 いつものやり方 •Wikiに URL、HTTPメソッ ド、アクション、機能の対応表 を書く •レビューする 株式会社万葉2009年11月7日土曜日
  • 135. 関西Ruby会議02 すると •きれいなURLになる •うまくコントローラを分割でき る • リソースという概念を意識 株式会社万葉2009年11月7日土曜日
  • 136. 関西Ruby会議02 4) routes.rbの 整理 株式会社万葉2009年11月7日土曜日
  • 137. 関西Ruby会議02 routes.rb は 散らかりやすい 株式会社万葉2009年11月7日土曜日
  • 138. 関西Ruby会議02 楽になってない部分 map.resources aaaao a +option map.resource map.xxx map.connect 株式会社万葉2009年11月7日土曜日
  • 139. 関西Ruby会議02 様々な要件 • 管理機能には /admin • /books/3/notes/2 のよう な深い構造 • dairy/2009/4 のような特殊 なURL 株式会社万葉2009年11月7日土曜日
  • 140. 関西Ruby会議02 難しいから間違える •変なルート名 (delete_xxx_path ?) • 二重の定義 • 同じコントローラで同じ対象リ ソースが:idできたり :xxx_id できたりする 株式会社万葉2009年11月7日土曜日
  • 141. 関西Ruby会議02 おすすめの方策 •with_optionsの活用 • コントローラ別に記述する • sub_resources 株式会社万葉2009年11月7日土曜日
  • 142. 関西Ruby会議02 with_optionsの活用 map.with_options :path_prefix => books, :controller => books’ do |books| books.monthly_books :year/:month, :action => monthly books.daily_books :year/:month/:date :action => daily end 株式会社万葉2009年11月7日土曜日
  • 143. 関西Ruby会議02 コントローラ別に記述 map.with_options :controller => books do |books| // BooksControllerのマッピング end map.with_options :controller => authors do |authors| // AuthorsControllerのマッピング end 株式会社万葉2009年11月7日土曜日
  • 144. 関西Ruby会議02 resourcesのネスト map.resources :diaries do |d| d.resources :comments end diaries/3/comments/2 株式会社万葉2009年11月7日土曜日
  • 145. 関西Ruby会議02 resourcesのネスト •コントローラが分かれていてネ スト構造ならとても便利 • 複雑になると「コントローラ 別」に記述できない 株式会社万葉2009年11月7日土曜日
  • 146. 関西Ruby会議02 ネストで散り散りの例 map.resources :diaries do |d| d.resources :comments end map.all_comments diaries/comments’, :controller => diary_comments’, :action => all_comments 株式会社万葉2009年11月7日土曜日
  • 147. 関西Ruby会議02 どちらで階層化するか URL構造 VS コントローラ 株式会社万葉2009年11月7日土曜日
  • 148. 関西Ruby会議02 私の意見 コントローラ構造 優先 株式会社万葉2009年11月7日土曜日
  • 149. 関西Ruby会議02 なぜなら • routes.rbをメンテナンスする 動機はアクション • 自然とコントローラを探す • コントローラ構造はみんなに把握 されている • URL構造は一部の人だけ 株式会社万葉2009年11月7日土曜日
  • 150. 関西Ruby会議02 なので • routes.rbでのネスト表記は、 コントローラ別の構造を損なわ ないなら使う • 損なうならネストを使わず自前 で書く 株式会社万葉2009年11月7日土曜日
  • 151. 関西Ruby会議02 ネストを自前で map.resources :diaries map.with_options :controller => diary_comments do |dc| dc.resources :comments, :path_prefix => diary/:diary_id, :name_prefix => diary_’ dc.all_comments diaries/comments’, :action => all_comments end 株式会社万葉2009年11月7日土曜日
  • 152. 関西Ruby会議02 sub_resources プラグイン 株式会社万葉2009年11月7日土曜日
  • 153. 関西Ruby会議02 コントローラ設計 •リソースごとに1コントローラ • Railsではこれが作りやすい (map.resources、フィルター) • 状況によってリソースに対して 複数コントローラ • 一般用とadmin用など 株式会社万葉2009年11月7日土曜日
  • 154. 関西Ruby会議02 複数リソースを 1コントローラに •通常はしない • new_comment • delete_comment • ... • → XxxCommentsControllerへ 株式会社万葉2009年11月7日土曜日
  • 155. 関西Ruby会議02 でも 本当は 株式会社万葉2009年11月7日土曜日
  • 156. 関西Ruby会議02 必要な時もあります • 複数のコントローラに共通のサ ブリソースCRUDをつけたい • CRUD全部じゃなくて1つアク ションつけたいだけだから許し てほしい 株式会社万葉2009年11月7日土曜日
  • 157. 関西Ruby会議02 汎用サブリソースの例 • タグ • 画像 • 通知設定 株式会社万葉2009年11月7日土曜日
  • 158. 関西Ruby会議02 モデルを 汎用化しているのに.. 本 著者 Tag Tagging レビュー 株式会社万葉2009年11月7日土曜日
  • 159. 関西Ruby会議02 これはいやだ •BooksTagsController •AuthorsTagsController • ReviewsTagsController • etc... 株式会社万葉2009年11月7日土曜日
  • 160. 関西Ruby会議02 こうしたい BooksController TagService AuthorsController ReviewsController 株式会社万葉2009年11月7日土曜日
  • 161. 関西Ruby会議02 Railsでのやり方 • routes.rbをゴリゴリ書く map.book_tags /books/:id/tags, :controller => books, :action => tags, :conditions => {:method => :get} 株式会社万葉2009年11月7日土曜日
  • 162. 関西Ruby会議02 ほかに方法は ないの? 株式会社万葉2009年11月7日土曜日
  • 163. 関西Ruby会議02 map.resourcesの オプションの限界 map.resources :books, :member => {:tags => :get} •ルート名が tags_book になる •動詞のアクションをそのままURLに 含める妥協案向き (lock など) 株式会社万葉2009年11月7日土曜日
  • 164. 関西Ruby会議02 map.resourcesの オプションの限界(2) map.resources :books, :member => {:destroy_tag => :delete} • ルート名が destroy_tag_bookに • URLが /books/destroy_tag?tag_id = 3 に 株式会社万葉2009年11月7日土曜日
  • 165. 関西Ruby会議02 map.resourcesは サブリソース同居の コントローラを 助けてくれない 株式会社万葉2009年11月7日土曜日
  • 166. 関西Ruby会議02 仕方なくゴリゴリ • たくさんのコントローラで同じ ような定義 • DRYじゃない • さわりたくないroutes.rb • ゴミの山 株式会社万葉2009年11月7日土曜日
  • 167. 関西Ruby会議02 大変 株式会社万葉2009年11月7日土曜日
  • 168. 関西Ruby会議02 そこで プラグイン 作りました 株式会社万葉2009年11月7日土曜日
  • 169. 関西Ruby会議02 sub_resources http:// github.com/nay/ sub_resources 株式会社万葉2009年11月7日土曜日
  • 170. 関西Ruby会議02 こう書けます map.resources :books, :sub_resources => :tags 株式会社万葉2009年11月7日土曜日
  • 171. 関西Ruby会議02 オプションつき map.resources :books, :sub_resources => { :tags => { :only => [:index, :delete] } } 株式会社万葉2009年11月7日土曜日
  • 172. 関西Ruby会議02 複数リソースの update等も スマートにマッピング URL HTTPメソッド アクション /books/edit GET edit_all /books PUT update_all /books DELETE destroy_all 株式会社万葉2009年11月7日土曜日
  • 173. 関西Ruby会議02 サブリソースにも URL HTTPメソッド アクション /books/tags/edit GET edit_tags /books/tags PUT update_tags /books/tags DELETE destroy_tags 株式会社万葉2009年11月7日土曜日
  • 174. 関西Ruby会議02 使ってみてね! http://github.com/nay/ sub_resources 株式会社万葉2009年11月7日土曜日
  • 175. 関西Ruby会議02 まとめ 株式会社万葉2009年11月7日土曜日
  • 176. 関西Ruby会議02 メンテナンス しやすい Railsコードを 書くために 株式会社万葉2009年11月7日土曜日
  • 177. 関西Ruby会議02 今日の話 1.本当は奥が深い検証の話 2.RESTfulとの付き合い方 株式会社万葉2009年11月7日土曜日
  • 178. 関西Ruby会議02 サイン会 ジュンク堂 Ruby会議支店 株式会社万葉2009年11月7日土曜日
  • 179. 関西Ruby会議02 Railsによる アジャイルWebア プリケーション開発 第三版 株式会社万葉2009年11月7日土曜日
  • 180. 関西Ruby会議02 ご清聴 ありがとう ございました y.ohba@everyleaf.com nay3 株式会社万葉2009年11月7日土曜日

×