Smell in Rails Apps (in Sapporo RubyKaigi03)
Upcoming SlideShare
Loading in...5
×
 

Smell in Rails Apps (in Sapporo RubyKaigi03)

on

  • 5,066 views

Slides of my talk in Sapporo RubyKaigi03, on December 4th, 2010.

Slides of my talk in Sapporo RubyKaigi03, on December 4th, 2010.

Statistics

Views

Total Views
5,066
Views on SlideShare
5,062
Embed Views
4

Actions

Likes
9
Downloads
43
Comments
0

2 Embeds 4

http://paper.li 2
https://twitter.com 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Smell in Rails Apps (in Sapporo RubyKaigi03) Smell in Rails Apps (in Sapporo RubyKaigi03) Presentation Transcript

  • Sapporo RubyKaigi 03 Smell in Rails Apps Railsアプリ 野生のカン 2010.12.4 Yasuko Ohba Everyleaf Corp. 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 祝・第三回 Sappro RubyKaigi 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Yasuko Ohba 大場寧子 @nay3 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 JRuby on Rails 実践開発ガイド 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Ruby on Rails 逆引きクイックリファレンス 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 •http://www.kozuchi.net/ •https://github.com/nay • 株式会社万葉 (Everyleaf Corp.) 株式会社 万葉2010年12月6日月曜日
  • 提供 株式会社 万葉 Everyleaf Corp.2010年12月6日月曜日
  • Sapporo RubyKaigi 03 http://leafy.in/ 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 It’s My Birthday 今日が誕生日です 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Today’s Talk 今日のお話 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Requested topic is Rails 「Railsの話」 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 I have not tried much new things this year... 新しいこと あんまり やってないorz 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Still using Rails 2 まだRails2 メインだし...orz 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 What are the points I improved this year? 自分の うまくなった (気がする)こと 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Code Reviews コードレビュー 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Refactoring リファクタリング 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 find good (might not be best) designs / solutions in early stage 良さそうな設計に はやめに到達 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Avoid traps 罠を回避 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 I’ll talk about points of those activities そういうことを (須藤さんを目指して) 話していきます 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Where to start your code review ? コードレビューは 何から始める? 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Design documents 設計資料 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 • Wiki • ノート • cucumber • rspec 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Written goals ゴールが 書かれているか 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 GOOD “A user can find his or her articles by words in title or body” 「ユーザーがタイトル と本文から自分の日記 を検索できる」 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 BAD “Articles Search (there would be another feature for dates)” 「日記検索 (日付は別で)」 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 • User • 詳細に少し触れる With Some Details • ほかの話題を加えない Without Other Topics 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Diagrams for complexity 複雑なところに 図を書いているか 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 • Class, Objects • Modules, mix-in • 状態遷移、状態の分類 About status 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Venn diagram is good ベン図意外といい draft Shared deleted 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 URL design in DOCUMENT URL設計が コードの外で されているか 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 We use wiki for URLs Wiki に書きます コント URL メソッド アクション 説明 ローラ 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Write URLs look like real URLは具体例で 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 /admin/users/3 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 /admin/users/:id 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 /admin/users/:id 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 /admin/users/:id /admin/:controller/:id ? 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Look real URLs and feel nice or not 具体的なURLを 目で見て 美しさを評価 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 RESTful I/F 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Use only 4 verbs 4つの動詞しか 使わない 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 (美内すずえ 「ガラスの仮面」より 四つの言葉のエチュードの場面を引用) 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 ○○を取得する Get WHAT ○○を作成する Create WHAT ○○を更新する Update WHAT ○○を削除する Delete WHAT 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Use whatever nouns 名詞で調整する 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Example 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 borrow a book 本を借りる 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 borrow_book 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Book 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 borrow Book User 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 borrow Book User /books/189 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 borrow Book User /books/189/borrow 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 borrow Book User Well, we change it after all... まあ、変更するし。。 POST /books/189/borrow 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 borrow Book User Well, we change it after all... まあ、変更するし。。 POST /books/189/borrow 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Book 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 of borrowing Book 借りること 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 of borrowing User Book 借りること create 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 of borrowing User Book 借りること create 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 of borrowing User Book 借りること create /books/189/ 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 of borrowing User Book 借りること create /books/189/borrowings 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 of borrowing User Book 借りること create Create 作る POST /books/189/borrowings 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Think in REST lang. REST語で考える 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Model ≠ Resource 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Different Resources & Features from one model 1モデル : 多リソース Resources A model class /a /a/b /a/c 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Controller 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Controller Filters フィルター 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 filters too less too much 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 filters Not DRY too less too much 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 filters Not DRY Complex too less too much 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 before-filters as conditions, not just pre-tasks before_filter には前提条件を 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 :only :except 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 before_filter :find_book :only => [:show, :edit, :update] 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 choose simpler one ? 記述量で選ぶ? 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 choose simpler one ? 記述量で選ぶ? 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Use :only always ! :only を 使いましょう! 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 You can easily check which filter for which action どのアクションが どのフィルターを 通るかの可読性 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 It’s hard to understand those do not appear 指定されてないもの は把握しづらい 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 A except :show, :edit B only :show, :delete C except :index What filters for :show ? 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Think about future 未来のこと 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 :except is effective on future actions :except は 未来を含む 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 A except :show, :edit B only :show, :delete C except :index add :confirm 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Do you like adding filters or removing filters ? 実装を足したい? 引きたい? 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 All or :only 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 private protected public 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 rescue errors 例外処理 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 rescues in actions are rare アクション内の 独自例外処理が 必要なことは稀 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 People from Java often rescue errors too much 特にJavaから 来るとやりすぎる 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 checks and modifications of parameters パラメータの チェックや加工 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 There might be better ways もっと練れる ケースがある 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 into Models if params[:skip_preview] == 1 ... 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 into Models if params[:skip_preview] == 1 ... 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 into Models if params[:skip_preview] == 1 ... params[:book][:skip_preview] 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 into Models if params[:skip_preview] == 1 ... params[:book][:skip_preview] attr_accessor :skip_preview ... if skip_preview? ... 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 transactions 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Most transaction blocks in controllers are not really necessary コントローラでの トランザクションは 不要なことが多い 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 • それコールバックで(r Use AR callbacks • モデルの専用メソッド Move it into an original method in the model 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Abstraction 抽象化 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Good ApplicationController filters, utilities Admin::BaseController filters, utilities Admin::UsersController actions filters, utilities 株式会社万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Bad ApplicationController actions filters, utilities Admin::BaseController actions filters, utilities Admin::UsersController actions filters, utilities 株式会社万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Why bad ? Controller A B C Controller Controller A B C A B D 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Why bad ? Controller A B C Controller Controller A B C A B ? D 株式会社万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Why bad ? Controller A B C view ? Controller Controller A B C A B ? view D view 株式会社万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Why bad ? Controller A B C view ? Controller Controller A B C A B ? view D view 株式会社万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Sharing actions is tough アクション共有は 難易度が高い 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Be prudent to share actions 慎重になるべき 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Use mix-in for action sharing アクション共有には 継承よりMix-in 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Share views using partials, not via abstraction ビューは継承でなく パーシャルで 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Possible Module Module C A B Controller Controller A B C A B D 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Possible Module Module C A B Controller Controller A B C A B view D view partial views 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Model (ActiveRecord) 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 attr_protected attr_accessible 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Protect model from evil params 不正なパラメータから モデルを守る # {:book => {:user_id => 10, ...}} Book.create(params[:book]) 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Example attr_protected :hashed_password, :salt, :activated attr_accessible :name, :email 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Choose simpler one? 記述がシンプルに なるほうを選ぶ? 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Use attr_protected always ! attr_protected を使いましょう! 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 More readable? Yes. And.. 可読性も さることながら 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Awful accidents happen if you use attr_accessible ! attr_accessible は事故のもと! 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Trouble with NEW attributes 新しい属性を 追加するときに つまづく 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 attr_accessible :name, :email :address :kana_name :phone_number Rejecting future attributes 未来に追加される 属性も拒絶指定 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Especially it’s dangerous for beginners ! 特に新人が! 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 “Well, I added a column but it’s not saved...” 「カラムを追加した んですがセーブされ ません...」 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 time will be lost 時間が失われる 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Really hard if it’s used in super class, modules or plug-ins ! 継承元や モジュールや プラグインで 使われていたら なお大変! ?1 new attribute 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Really hard if it’s used in super class, modules or plug-ins ! 継承元や attr_accessible モジュールや プラグインで 使われていたら なお大変! ?1 new attribute 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Really hard if it’s used in super class, modules or plug-ins ! 継承元や attr_accessible モジュールや プラグインで 使われていたら なお大変! ?1 new attribute 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 attr_accessible 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 attr_accessible 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 ! 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Use ! if you believe it can be saved 保存されることを 確信してるなら ! 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 This might fail 失敗する可能性 def some_action @obj.save end 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 • save • save! • create • update_attribute 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Callbacks 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 I don’t know why this won’t be saved... 「なぜか保存されな いんですけど...」 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 set and cry before_validation :set_sweet_flag private def set_sweet_flag @my_sweet_flag = happy? end 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 before_validation :set_sweet_flag private def set_sweet_flag @my_sweet_flag = happy? true end 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Validation 検証まわり 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 need another 30min. また今度 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Use associations 関連をつかう 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 finding by a foreign key ? FKでの検索はあやしい @books = Book.where(:user_id => current_user.id) 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 finding by a foreign key ? FKでの検索はあやしい @books = Book.where(:user_id => current_user.id) @books = current_user.books 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 However, sometimes FK is better than object 逆に 関連オブジェクト よりFKがいいことも 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 avoid unnecessary SQL 不要な検索を避ける if book.publisher.id 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 avoid unnecessary SQL 不要な検索を避ける if book.publisher.id if book.publisher_id 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 raise errors 例外をなげよう 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 App’s original error classes are expected 独自例外クラスは あるのが普通 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 routes.rb 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 routes should be organized by controllers, not resources コントローラ別に 整理 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Comments 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Reason is required where the code is not natural コードが不自然なと ころに理由を書く 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Things unnatural 「不自然」の例 • Leaving code commented out コードのコメントアウトを残してる • not using common helper method ヘルパーメソッドを使っていない • checking it’s really nil falseとnilを区別してる2010年12月6日月曜日 • etc... 株式会社 万葉
  • Sapporo RubyKaigi 03 comments should be checked in code reviews あるべきコメントが ないのも指摘する 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 The last topic 最後にひとつ 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Why I have English on my slides スライドに 英語を入れる理由 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Not because it’s cool かっこいい からじゃないです 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 To get more readers after my talk is over 後から読める人が 増えるから 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 future 未来 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Somebody else 自分でない誰か 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 I think imaging future and somebody else is efficient 意識すると いい気がする 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Write code feeling the mass 集合体の一部として コードを書く 株式会社 万葉2010年12月6日月曜日
  • Sapporo RubyKaigi 03 Thank you! 株式会社 万葉2010年12月6日月曜日