SlideShare a Scribd company logo
1 of 157
Download to read offline
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日月曜日

More Related Content

Similar to Smell in Rails Apps (in Sapporo RubyKaigi03)

20081220 Rubybonenkai2008 Sapporo
20081220 Rubybonenkai2008 Sapporo20081220 Rubybonenkai2008 Sapporo
20081220 Rubybonenkai2008 SapporoKoji SHIMADA
 
私のプロフィール(札幌Ruby会議03発表資料)
私のプロフィール(札幌Ruby会議03発表資料)私のプロフィール(札幌Ruby会議03発表資料)
私のプロフィール(札幌Ruby会議03発表資料)masayoshi takahashi
 
The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012
The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012
The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012tatsuo sakurai
 
Good Names in Right Places on Rails
Good Names in Right Places on RailsGood Names in Right Places on Rails
Good Names in Right Places on RailsYasuko Ohba
 
Ruby/PureImage: 第2回岡山Ruby会議LT
Ruby/PureImage: 第2回岡山Ruby会議LTRuby/PureImage: 第2回岡山Ruby会議LT
Ruby/PureImage: 第2回岡山Ruby会議LTNISHIMOTO Keisuke
 
Ruby kajaはじめてます
Ruby kajaはじめてますRuby kajaはじめてます
Ruby kajaはじめてますTakeshi Yabe
 
Josug advent calender20121219
Josug advent calender20121219Josug advent calender20121219
Josug advent calender20121219Ayumi Oka
 
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02Yasuko Ohba
 
JAWS-UG アップデート (2012-09-14 JAWS-UG 第13回 勉強会 )
JAWS-UG アップデート (2012-09-14 JAWS-UG 第13回 勉強会 )JAWS-UG アップデート (2012-09-14 JAWS-UG 第13回 勉強会 )
JAWS-UG アップデート (2012-09-14 JAWS-UG 第13回 勉強会 )Ryuichi Tokugami
 

Similar to Smell in Rails Apps (in Sapporo RubyKaigi03) (10)

20081220 Rubybonenkai2008 Sapporo
20081220 Rubybonenkai2008 Sapporo20081220 Rubybonenkai2008 Sapporo
20081220 Rubybonenkai2008 Sapporo
 
私のプロフィール(札幌Ruby会議03発表資料)
私のプロフィール(札幌Ruby会議03発表資料)私のプロフィール(札幌Ruby会議03発表資料)
私のプロフィール(札幌Ruby会議03発表資料)
 
The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012
The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012
The Way of Fun Development - たのしい開発への道 / Sapporo RubyKaigi2012
 
Good Names in Right Places on Rails
Good Names in Right Places on RailsGood Names in Right Places on Rails
Good Names in Right Places on Rails
 
Ruby/PureImage: 第2回岡山Ruby会議LT
Ruby/PureImage: 第2回岡山Ruby会議LTRuby/PureImage: 第2回岡山Ruby会議LT
Ruby/PureImage: 第2回岡山Ruby会議LT
 
Ruby kajaはじめてます
Ruby kajaはじめてますRuby kajaはじめてます
Ruby kajaはじめてます
 
Josug advent calender20121219
Josug advent calender20121219Josug advent calender20121219
Josug advent calender20121219
 
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
More Pragmatic Patterns of Ruby on Rails at Kansai Ruby Kaigi #02
 
JAWS-UG アップデート (2012-09-14 JAWS-UG 第13回 勉強会 )
JAWS-UG アップデート (2012-09-14 JAWS-UG 第13回 勉強会 )JAWS-UG アップデート (2012-09-14 JAWS-UG 第13回 勉強会 )
JAWS-UG アップデート (2012-09-14 JAWS-UG 第13回 勉強会 )
 
Namba.pm #0 LT資料
Namba.pm #0 LT資料Namba.pm #0 LT資料
Namba.pm #0 LT資料
 

More from Yasuko Ohba

Rubyによる開発プロジェクトをうまく回すには(2)
Rubyによる開発プロジェクトをうまく回すには(2)Rubyによる開発プロジェクトをうまく回すには(2)
Rubyによる開発プロジェクトをうまく回すには(2)Yasuko Ohba
 
Rubyによる開発プロジェクトをうまく回すには(1)
Rubyによる開発プロジェクトをうまく回すには(1)Rubyによる開発プロジェクトをうまく回すには(1)
Rubyによる開発プロジェクトをうまく回すには(1)Yasuko Ohba
 
TECH LAB PAAK 2015/06/24 Team Development
TECH LAB PAAK 2015/06/24 Team DevelopmentTECH LAB PAAK 2015/06/24 Team Development
TECH LAB PAAK 2015/06/24 Team DevelopmentYasuko Ohba
 
女性IT技術者と働き方 情報処理学会77
女性IT技術者と働き方 情報処理学会77女性IT技術者と働き方 情報処理学会77
女性IT技術者と働き方 情報処理学会77Yasuko Ohba
 
Girl, Geek and Company - Tokyo Girl Geek Dinners #5 2013/7/5
Girl, Geek and Company - Tokyo Girl Geek Dinners #5 2013/7/5Girl, Geek and Company - Tokyo Girl Geek Dinners #5 2013/7/5
Girl, Geek and Company - Tokyo Girl Geek Dinners #5 2013/7/5Yasuko Ohba
 
ごきげんRails
ごきげんRailsごきげんRails
ごきげんRailsYasuko Ohba
 
名前のつけ方
名前のつけ方名前のつけ方
名前のつけ方Yasuko Ohba
 
The Basis of Making DSL with Ruby
The Basis of Making DSL with RubyThe Basis of Making DSL with Ruby
The Basis of Making DSL with RubyYasuko Ohba
 
Sub Resources Rails Plug-in
Sub Resources Rails Plug-inSub Resources Rails Plug-in
Sub Resources Rails Plug-inYasuko Ohba
 
Pragmatic Patterns of Ruby on Rails - Ruby Kaigi2009
Pragmatic Patterns of Ruby on Rails - Ruby Kaigi2009Pragmatic Patterns of Ruby on Rails - Ruby Kaigi2009
Pragmatic Patterns of Ruby on Rails - Ruby Kaigi2009Yasuko Ohba
 
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場Yasuko Ohba
 
テスト大嫌いっ娘のRSpec
テスト大嫌いっ娘のRSpecテスト大嫌いっ娘のRSpec
テスト大嫌いっ娘のRSpecYasuko Ohba
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門Yasuko Ohba
 
image_upload Plugin 2007/12/7
image_upload Plugin 2007/12/7image_upload Plugin 2007/12/7
image_upload Plugin 2007/12/7Yasuko Ohba
 
Ruby on Rails ステップアップ講座 - 大場寧子
Ruby on Rails ステップアップ講座 - 大場寧子Ruby on Rails ステップアップ講座 - 大場寧子
Ruby on Rails ステップアップ講座 - 大場寧子Yasuko Ohba
 
Ruby on Rails 中級者を目指して - 大場寧子
Ruby on Rails 中級者を目指して - 大場寧子Ruby on Rails 中級者を目指して - 大場寧子
Ruby on Rails 中級者を目指して - 大場寧子Yasuko Ohba
 

More from Yasuko Ohba (20)

Rubyによる開発プロジェクトをうまく回すには(2)
Rubyによる開発プロジェクトをうまく回すには(2)Rubyによる開発プロジェクトをうまく回すには(2)
Rubyによる開発プロジェクトをうまく回すには(2)
 
Rubyによる開発プロジェクトをうまく回すには(1)
Rubyによる開発プロジェクトをうまく回すには(1)Rubyによる開発プロジェクトをうまく回すには(1)
Rubyによる開発プロジェクトをうまく回すには(1)
 
TECH LAB PAAK 2015/06/24 Team Development
TECH LAB PAAK 2015/06/24 Team DevelopmentTECH LAB PAAK 2015/06/24 Team Development
TECH LAB PAAK 2015/06/24 Team Development
 
女性IT技術者と働き方 情報処理学会77
女性IT技術者と働き方 情報処理学会77女性IT技術者と働き方 情報処理学会77
女性IT技術者と働き方 情報処理学会77
 
Girl, Geek and Company - Tokyo Girl Geek Dinners #5 2013/7/5
Girl, Geek and Company - Tokyo Girl Geek Dinners #5 2013/7/5Girl, Geek and Company - Tokyo Girl Geek Dinners #5 2013/7/5
Girl, Geek and Company - Tokyo Girl Geek Dinners #5 2013/7/5
 
Sendai ruby-02
Sendai ruby-02Sendai ruby-02
Sendai ruby-02
 
ごきげんRails
ごきげんRailsごきげんRails
ごきげんRails
 
名前のつけ方
名前のつけ方名前のつけ方
名前のつけ方
 
Shimane2010
Shimane2010Shimane2010
Shimane2010
 
The Basis of Making DSL with Ruby
The Basis of Making DSL with RubyThe Basis of Making DSL with Ruby
The Basis of Making DSL with Ruby
 
Sub Resources Rails Plug-in
Sub Resources Rails Plug-inSub Resources Rails Plug-in
Sub Resources Rails Plug-in
 
Pragmatic Patterns of Ruby on Rails - Ruby Kaigi2009
Pragmatic Patterns of Ruby on Rails - Ruby Kaigi2009Pragmatic Patterns of Ruby on Rails - Ruby Kaigi2009
Pragmatic Patterns of Ruby on Rails - Ruby Kaigi2009
 
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
QCon2009 Tokyo - Ruby on Railsで変わるエンタープライズ開発の現場
 
Raspbilly
RaspbillyRaspbilly
Raspbilly
 
テスト大嫌いっ娘のRSpec
テスト大嫌いっ娘のRSpecテスト大嫌いっ娘のRSpec
テスト大嫌いっ娘のRSpec
 
Shimane2008
Shimane2008Shimane2008
Shimane2008
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門
 
image_upload Plugin 2007/12/7
image_upload Plugin 2007/12/7image_upload Plugin 2007/12/7
image_upload Plugin 2007/12/7
 
Ruby on Rails ステップアップ講座 - 大場寧子
Ruby on Rails ステップアップ講座 - 大場寧子Ruby on Rails ステップアップ講座 - 大場寧子
Ruby on Rails ステップアップ講座 - 大場寧子
 
Ruby on Rails 中級者を目指して - 大場寧子
Ruby on Rails 中級者を目指して - 大場寧子Ruby on Rails 中級者を目指して - 大場寧子
Ruby on Rails 中級者を目指して - 大場寧子
 

Smell in Rails Apps (in Sapporo RubyKaigi03)

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