SlideShare a Scribd company logo
みなとRuby会議01




               ごきげんRails
                   2012.6.2
                 大場寧子 @nay3




                                  株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                みなとRuby会議01
               開催おめでとうございます



                            株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               Yokohama
                              株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               Ruby on Rails


                              株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                   Railsって?

               •
               RubyでWebアプリを作
               れるフレームワーク
               •
               簡単に作れる!
               •
               でも本当に簡単?
                                  株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               ちょっと難しい
                 かも...


                         株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               環境作りが
                 大変


                           株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               でも動きはじめたら
                勢いよく出来る


                          株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               ...慣れればね!


                          株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                   今日の話題

               •
               RubyやRailsでごきげん
               になった話
               •
               Railsの魅力
               •
               Railsの勉強法
                               株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               自己紹介

                      株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               株式会社万葉
               Everyleaf Corp.
           女性メンバーいっぱいいますよ! :)


                                 株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               実装大好き

                       株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               実装やめないために
                会社作りました
                  (^^;

                          株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               RubyとRailsの
                 おかげです


                            株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                本が出ます
               (そのはずです)

                            株式会社万葉
2012年6月4日月曜日
みなとRuby会議01



                 たのしい開発
               スタートアップRuby




                            株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               Railsの魅力

                         株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               生産性
                     株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               とても高い!

                       株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               プログラマにとって
                気持ちイイ方向に
               「生産性が高い」

                          株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               「時間をかけるべき
                  こと」に
                時間をかけられる

                          株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               時間をかけるべきこと

          •    設計
          •    コミュニケーション・情報共有
          •    スペック/自動テストの充実

                              株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               時間を節約したいこと

               •定型的な作業
               •作業ミスとリカバリー
               •変更時の動作確認
               •コード内容の把握
                             株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                   定型的な作業
           •   新しいモデルの作成
           •   新しいコントローラの作成
           •   データベーススキーマの更新
               → generator、マイグレーション


                                      株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                   generator
               > rails g model User
               name:string email:string


               > rails g controller Users
               index show
                                        株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                   generator

               •
               ひな形が簡単に得られる
               •
               あくまでもひな形で、邪魔
               にならないのがいいとこ
               ろ!
                                   株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               足り        やり
                    適切
               ない        すぎ


                             株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                   マイグレーション
               •
               DBのスキーマ更新を、変更
               ごとにRubyコードとして
               保存
               •
               開発者間で変更をクールに
               シェアできる
                              株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                           change
               class CreateUsers < ActiveRecord::Migration
                def change
                 create_table :users do ¦t¦
                  t.string :name, :null => false
                  t.string :name_kana, :null => false
                  t.string :email, :null => false
                  t.string :password_hash
                  t.string :password_salt
                  t.timestamps
                 end
                end
               end                                    株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                  up & down
           class RemoveNameKanaInUsers <
           ActiveRecord::Migration
            def up
             remove_column :users, :name_kana
            end
            def down
             add_column :users, :name_kana, :string
            end
           end
                                                株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                マイグレーション
               •generatorで作成して
               •記述追加したりして
               •ローカル環境に当てて確認
                •> rake db:migrate
               •レポジトリにコミット
                                  株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                 某Rails似
               フレームワークで
                migration
               大変だった;;
                           株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                指差し確認
                 しないと
               マイグレート
               できない...orz
                           株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               コマンド成功しても
                  生成物に
                 問題が...orz

                            株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               足り        やり
                    適切
               ない        すぎ


                             株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                   某migration
                   Bad Points
               •コード複雑、自動生成頼み
               •モデルクラスのコードとつよく依存
               •中央集権型なので、複数開発者の同
               時更新に弱い
               •
               操作体系が複雑でミスしやすい
                                 株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               Railsのmigration
                 Good Points
               •手書きできるレベルのコード
               • モデルクラスのコードと分離さ
               れている
               •
               複数開発者の同時更新に強い
               •
               操作体系がシンプル
                                株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               時間を節約したいこと

               •定型的な作業
               •作業ミスとリカバリー
               •変更時の動作確認
               •コード内容の把握
                             株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               作業ミスとリカバリー
               •
               比較的ミスしづらい
               •
               rails destroy で
               generateしたものを簡単
               に消せる
               •
               一貫性があって覚えやすい
                               株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               時間を節約したいこと

               •定型的な作業
               •作業ミスとリカバリー
               •変更時の動作確認
               •コード内容の把握
                             株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                   変更時の動作確認


               •   スペック/テスト
               •   RSpec おすすめです!


                                 株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               RSpecの話

                        株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               自動テスト
               嫌いでした
                       株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               JUnitの頃...
                ※10年前?もっと?




                                 株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               テストが嫌いだった理由
               •
               プロダクトコードを変更したく
               なくなる(大量に落ちるから)
               •
               データ作りがハード
               •
               テストコード楽しくない
               •
               書いたテストは読む気がしない
               •
               テスト修正作業は最悪だ!
                              株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               プロダクトコードを
               変更したくなくなる

               •
               大量に落ちる→修正苦痛
               •
               変更に耐えるテスト/ス
               ペックが重要!!
                            株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                変更に耐える
               テスト/スペック
                 のコツ

                         株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                「関心事」に
               フォーカスする

                        株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               すべてを確認しない

               レイヤーを揃える

                          株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               •保存できる
               • 既存レコードなんか調べない!
               • 全カラムを調べたりしない!
               •返り値が20になる
               • 内部の変数の値とか調べない!
               •ステータスコード200を期待
               • セッション状態とか見ない!
               • インスタンス変数の値なんか調べない!
                                      株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                   全部調べると

               •
               内部の変更に弱い
               •
               つまり、リファクタリングに弱
               くなる
               •
               コード読んでも意図不明
               •
               心配なら別のケースにする
                                株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                DRYにする
               (特にオブジェ
                クト生成)
                        株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               FactoryGirl

                            株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               Factory.create(:project)




                                       株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               テストが嫌いだった理由
               •
               プロダクトコードを変更したく
               なくなる(大量に落ちるから)
               •
               データ作りがハード
               •
               テストコード楽しくない
               •
               書いたテストは読む気がしない
               •
               テスト修正作業は最悪だ!
                              株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               FactoryGirl

                            株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               FactoryGirlは
               ActiveRecord
                の理解が必要

                             株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               テストが嫌いだった理由
               •
               プロダクトコードを変更したく
               なくなる(大量に落ちるから)
               •
               データ作りがハード
               •
               テストコード楽しくない
               •
               書いたテストは読む気がしない
               •
               テスト修正作業は最悪だ!
                              株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               assert_equal 20, obj.result

                検査してね、20のはずなん
               で、えーとそのobj.resultね
                                         株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               obj.result.should == 20

                  obj.result はー、
                   20になりまーす
                                     株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               RSpec
               楽しい
                       株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               結果を確認してるん
                じゃないんだ
               仕様を書いている
                  んだぜ
                          株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




          やる気が
           出る!

                     株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                いろいろ
               強力で快適!
                       株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               テストが嫌いだった理由
               •
               プロダクトコードを変更したく
               なくなる(大量に落ちるから)
               •
               データ作りがハード
               •
               テストコード楽しくない
               •
               書いたテストは読む気がしない
               •
               テスト修正作業は最悪だ!
                              株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                うまく書かれた
                RSpecコードは
               ドキュメントとして
                   読める
                           株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




          describe Project do


               describe "#close" do
                let(:proj) {Factory.create(:project, :closed => true)}


                context "when closed" do
                 it {expect{proj.close}.to raise_error}
                end


           end
          end




                                                              株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               テストが嫌いだった理由
               •
               プロダクトコードを変更したく
               なくなる(大量に落ちるから)
               •
               データ作りがハード
               •
               テストコード楽しくない
               •
               書いたテストは読む気がしない
               •
               テスト修正作業は最悪だ!
                              株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                テスト修正は
                 やっぱり
               楽しくない('w'
                          株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                修正箇所が減って
               意図がわかりやすい
                  のでマシ...

                           株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               時間を節約したいこと

               •定型的な作業
               •作業ミスとリカバリー
               •変更時の動作確認
               •コード内容の把握
                             株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                   コード内容の把握

               •
               何がどこに書かれるべきか
               決まっている→探しやすい
               •
               Rubyはコード量が少ない
               ので読みやすい
                              株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                ...うまく
               書ければね!
                        株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               把握しやすい
               コードを書く
                 コツ
                       株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               Rubyらしい
               コードを書く
                        株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               each や for を多
               用していますか?


                             株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               map/collect
               使っていますか?


                            株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               user_names = []
               users.each do ¦u¦
                user_names << u.name
               end



               users.map(&:name)

                                           株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               良い名前をつける


                         株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               値をもらうことが目
                的のメソッドには
                  処理ではなく
                 返す値の名前を
                    つける
                          株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               calc_salary
                   より
                 salary
                            株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                 Q) 変数名と
               見分けがつかないの
                が心配なんですが

                          株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               A)変数のように見
               えるメソッド名こそ
                 Rubyらしい
               (変数なんて無いほ
                 うがいい!)
                          株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               railsのコードを
                ちょっと見て
               雰囲気つかむのも
                   おすすめ
                           株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               正しい場所に書く


                         株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               MVC?
                      株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               オブジェクト指向!


                          株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               誰の仕事にするか
                  考える

                         株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               適切なオブジェクト
                がなければ作る
               class NiceObject

               end
                                      株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                   こういうのは
                    悪いサイン
               obj.name = params....
               obj.age = params...
               v = obj.prepare_some
               obj.prepare2(v)
               ...
               同じオブジェクトについての処理が続いている
                                           株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               オブジェクト側に
                移動しよう
               コントローラ                  モデル
               obj.name = params....   obj
               obj.age = params...
               v = obj.prepare_some
               obj.prepare2(v)
               ...

                                             株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                    移動すると
               コントローラ
               obj.do_some(params)
                  モデル
                   def do_some(attributes)
                    self.name = attributes...
                    self.age = attributes...
                    v = prepare_some
                    prepare2(v)
                    ...                       万葉
                                             株式会社
2012年6月4日月曜日
みなとRuby会議01




               objがモデルなら
                コールバックに
                 移動できる
                          株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                   コールバック
               •before_validation
               •before_save
               •after_save
               •before_destroy
               •after_destroy
               •etc....
                                        株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               コントローラコードは
                こんなかんじに保つ
                                     一括代入
               @project = Project.new(params[:project])
               if @project.save
                 ...
               else
                 ...
               end


                                                    株式会社  万葉
2012年6月4日月曜日
みなとRuby会議01




                   params関係が
                     溢れたら
               •一括代入に乗るように、
                paramsの中身を整えて、代入
                メソッドを追加してやる
               attr_accessor :age
                                        株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                ロジックが溢れたら
               •コールバック
                (before_validationと
                before_saveが多い)に入れ
                る

               before_save :prepare_some
                                         株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                   例外処理

               •
               気にしない
               •
               アクション内でがんばらず
               にあとでrescue_fromと
               かで調整がおすすめ
                               株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               コード内容の把握
                 最後のコツ
               スペックを書いて
                おくと動作を
               他人に伝えやすい
                          株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               時間を節約したいこと
               •定型的な作業
               •作業ミスとリカバリー
               • 変更時の動作確認
               • コード内容の把握

                Railsかわいい!
                                 株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               時間をかけるべきこと

        •      設計
        •      コミュニケーション・情報共有
        •      スペック/自動テストの充実

                              株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               Railsを使うだけ
               では解決しない

                           株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               気をつけていること
               •モデル層はクラス図を書く
               • URL設計は表にする
               • 必要物は全部レポジトリに
               •Wikiに概要や検討を残す
               •よく話し合う
               • レビューする
                                株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               Railsの勉強法

                          株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                アプリを
               作ってみよう
                       株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               興味のある
               ものを作る
                       株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               偏ってて
                OK
                      株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                 実現したい!
                  と強く思う

               方法を探す     試す
                調べる    身に付く!
                              株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               情報源
                     株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               書籍




                        株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                          API
               http://api.rubyonrails.org/




                                          株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                   Rails Guide
               http://guides.rubyonrails.org/




                                             株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                   RailsCasts
               http://railscasts.com/




                                        株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               英語の情報を
                避けない
                       株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




               コミュニティ/勉強会
               •地域Rubyコミュニティ
               • Yokohama.rb
               • Asakusa.rb
               • minami.rb
               • Okinawa.rb
               • Tokyu.rb etc
               •Rails勉強会@東京
                                    株式会社万葉
2012年6月4日月曜日
みなとRuby会議01




                   コードを読む
               •github




2012年6月4日月曜日
               •> rvm gemdir       株式会社万葉
みなとRuby会議01




               ごきげんに
               なろう! :)
                         株式会社万葉
2012年6月4日月曜日

More Related Content

ごきげんRails

  • 1. みなとRuby会議01 ごきげんRails 2012.6.2 大場寧子 @nay3 株式会社万葉 2012年6月4日月曜日
  • 2. みなとRuby会議01 みなとRuby会議01 開催おめでとうございます 株式会社万葉 2012年6月4日月曜日
  • 3. みなとRuby会議01 Yokohama 株式会社万葉 2012年6月4日月曜日
  • 4. みなとRuby会議01 Ruby on Rails 株式会社万葉 2012年6月4日月曜日
  • 5. みなとRuby会議01 Railsって? • RubyでWebアプリを作 れるフレームワーク • 簡単に作れる! • でも本当に簡単? 株式会社万葉 2012年6月4日月曜日
  • 6. みなとRuby会議01 ちょっと難しい かも... 株式会社万葉 2012年6月4日月曜日
  • 7. みなとRuby会議01 環境作りが 大変 株式会社万葉 2012年6月4日月曜日
  • 8. みなとRuby会議01 でも動きはじめたら 勢いよく出来る 株式会社万葉 2012年6月4日月曜日
  • 9. みなとRuby会議01 ...慣れればね! 株式会社万葉 2012年6月4日月曜日
  • 10. みなとRuby会議01 今日の話題 • RubyやRailsでごきげん になった話 • Railsの魅力 • Railsの勉強法 株式会社万葉 2012年6月4日月曜日
  • 11. みなとRuby会議01 自己紹介 株式会社万葉 2012年6月4日月曜日
  • 12. みなとRuby会議01 株式会社万葉 Everyleaf Corp. 女性メンバーいっぱいいますよ! :) 株式会社万葉 2012年6月4日月曜日
  • 13. みなとRuby会議01 実装大好き 株式会社万葉 2012年6月4日月曜日
  • 14. みなとRuby会議01 実装やめないために 会社作りました (^^; 株式会社万葉 2012年6月4日月曜日
  • 15. みなとRuby会議01 RubyとRailsの おかげです 株式会社万葉 2012年6月4日月曜日
  • 16. みなとRuby会議01 本が出ます (そのはずです) 株式会社万葉 2012年6月4日月曜日
  • 17. みなとRuby会議01 たのしい開発 スタートアップRuby 株式会社万葉 2012年6月4日月曜日
  • 18. みなとRuby会議01 Railsの魅力 株式会社万葉 2012年6月4日月曜日
  • 19. みなとRuby会議01 生産性 株式会社万葉 2012年6月4日月曜日
  • 20. みなとRuby会議01 とても高い! 株式会社万葉 2012年6月4日月曜日
  • 21. みなとRuby会議01 プログラマにとって 気持ちイイ方向に 「生産性が高い」 株式会社万葉 2012年6月4日月曜日
  • 22. みなとRuby会議01 「時間をかけるべき こと」に 時間をかけられる 株式会社万葉 2012年6月4日月曜日
  • 23. みなとRuby会議01 時間をかけるべきこと • 設計 • コミュニケーション・情報共有 • スペック/自動テストの充実 株式会社万葉 2012年6月4日月曜日
  • 24. みなとRuby会議01 時間を節約したいこと •定型的な作業 •作業ミスとリカバリー •変更時の動作確認 •コード内容の把握 株式会社万葉 2012年6月4日月曜日
  • 25. みなとRuby会議01 定型的な作業 • 新しいモデルの作成 • 新しいコントローラの作成 • データベーススキーマの更新 → generator、マイグレーション 株式会社万葉 2012年6月4日月曜日
  • 26. みなとRuby会議01 generator > rails g model User name:string email:string > rails g controller Users index show 株式会社万葉 2012年6月4日月曜日
  • 27. みなとRuby会議01 generator • ひな形が簡単に得られる • あくまでもひな形で、邪魔 にならないのがいいとこ ろ! 株式会社万葉 2012年6月4日月曜日
  • 28. みなとRuby会議01 足り やり 適切 ない すぎ 株式会社万葉 2012年6月4日月曜日
  • 29. みなとRuby会議01 マイグレーション • DBのスキーマ更新を、変更 ごとにRubyコードとして 保存 • 開発者間で変更をクールに シェアできる 株式会社万葉 2012年6月4日月曜日
  • 30. みなとRuby会議01 change class CreateUsers < ActiveRecord::Migration def change create_table :users do ¦t¦ t.string :name, :null => false t.string :name_kana, :null => false t.string :email, :null => false t.string :password_hash t.string :password_salt t.timestamps end end end 株式会社万葉 2012年6月4日月曜日
  • 31. みなとRuby会議01 up & down class RemoveNameKanaInUsers < ActiveRecord::Migration def up remove_column :users, :name_kana end def down add_column :users, :name_kana, :string end end 株式会社万葉 2012年6月4日月曜日
  • 32. みなとRuby会議01 マイグレーション •generatorで作成して •記述追加したりして •ローカル環境に当てて確認 •> rake db:migrate •レポジトリにコミット 株式会社万葉 2012年6月4日月曜日
  • 33. みなとRuby会議01 某Rails似 フレームワークで migration 大変だった;; 株式会社万葉 2012年6月4日月曜日
  • 34. みなとRuby会議01 指差し確認 しないと マイグレート できない...orz 株式会社万葉 2012年6月4日月曜日
  • 35. みなとRuby会議01 コマンド成功しても 生成物に 問題が...orz 株式会社万葉 2012年6月4日月曜日
  • 36. みなとRuby会議01 足り やり 適切 ない すぎ 株式会社万葉 2012年6月4日月曜日
  • 37. みなとRuby会議01 某migration Bad Points •コード複雑、自動生成頼み •モデルクラスのコードとつよく依存 •中央集権型なので、複数開発者の同 時更新に弱い • 操作体系が複雑でミスしやすい 株式会社万葉 2012年6月4日月曜日
  • 38. みなとRuby会議01 Railsのmigration Good Points •手書きできるレベルのコード • モデルクラスのコードと分離さ れている • 複数開発者の同時更新に強い • 操作体系がシンプル 株式会社万葉 2012年6月4日月曜日
  • 39. みなとRuby会議01 時間を節約したいこと •定型的な作業 •作業ミスとリカバリー •変更時の動作確認 •コード内容の把握 株式会社万葉 2012年6月4日月曜日
  • 40. みなとRuby会議01 作業ミスとリカバリー • 比較的ミスしづらい • rails destroy で generateしたものを簡単 に消せる • 一貫性があって覚えやすい 株式会社万葉 2012年6月4日月曜日
  • 41. みなとRuby会議01 時間を節約したいこと •定型的な作業 •作業ミスとリカバリー •変更時の動作確認 •コード内容の把握 株式会社万葉 2012年6月4日月曜日
  • 42. みなとRuby会議01 変更時の動作確認 • スペック/テスト • RSpec おすすめです! 株式会社万葉 2012年6月4日月曜日
  • 43. みなとRuby会議01 RSpecの話 株式会社万葉 2012年6月4日月曜日
  • 44. みなとRuby会議01 自動テスト 嫌いでした 株式会社万葉 2012年6月4日月曜日
  • 45. みなとRuby会議01 JUnitの頃... ※10年前?もっと? 株式会社万葉 2012年6月4日月曜日
  • 46. みなとRuby会議01 テストが嫌いだった理由 • プロダクトコードを変更したく なくなる(大量に落ちるから) • データ作りがハード • テストコード楽しくない • 書いたテストは読む気がしない • テスト修正作業は最悪だ! 株式会社万葉 2012年6月4日月曜日
  • 47. みなとRuby会議01 プロダクトコードを 変更したくなくなる • 大量に落ちる→修正苦痛 • 変更に耐えるテスト/ス ペックが重要!! 株式会社万葉 2012年6月4日月曜日
  • 48. みなとRuby会議01 変更に耐える テスト/スペック のコツ 株式会社万葉 2012年6月4日月曜日
  • 49. みなとRuby会議01 「関心事」に フォーカスする 株式会社万葉 2012年6月4日月曜日
  • 50. みなとRuby会議01 すべてを確認しない レイヤーを揃える 株式会社万葉 2012年6月4日月曜日
  • 51. みなとRuby会議01 •保存できる • 既存レコードなんか調べない! • 全カラムを調べたりしない! •返り値が20になる • 内部の変数の値とか調べない! •ステータスコード200を期待 • セッション状態とか見ない! • インスタンス変数の値なんか調べない! 株式会社万葉 2012年6月4日月曜日
  • 52. みなとRuby会議01 全部調べると • 内部の変更に弱い • つまり、リファクタリングに弱 くなる • コード読んでも意図不明 • 心配なら別のケースにする 株式会社万葉 2012年6月4日月曜日
  • 53. みなとRuby会議01 DRYにする (特にオブジェ クト生成) 株式会社万葉 2012年6月4日月曜日
  • 54. みなとRuby会議01 FactoryGirl 株式会社万葉 2012年6月4日月曜日
  • 55. みなとRuby会議01 Factory.create(:project) 株式会社万葉 2012年6月4日月曜日
  • 56. みなとRuby会議01 テストが嫌いだった理由 • プロダクトコードを変更したく なくなる(大量に落ちるから) • データ作りがハード • テストコード楽しくない • 書いたテストは読む気がしない • テスト修正作業は最悪だ! 株式会社万葉 2012年6月4日月曜日
  • 57. みなとRuby会議01 FactoryGirl 株式会社万葉 2012年6月4日月曜日
  • 58. みなとRuby会議01 FactoryGirlは ActiveRecord の理解が必要 株式会社万葉 2012年6月4日月曜日
  • 59. みなとRuby会議01 テストが嫌いだった理由 • プロダクトコードを変更したく なくなる(大量に落ちるから) • データ作りがハード • テストコード楽しくない • 書いたテストは読む気がしない • テスト修正作業は最悪だ! 株式会社万葉 2012年6月4日月曜日
  • 60. みなとRuby会議01 assert_equal 20, obj.result 検査してね、20のはずなん で、えーとそのobj.resultね 株式会社万葉 2012年6月4日月曜日
  • 61. みなとRuby会議01 obj.result.should == 20 obj.result はー、 20になりまーす 株式会社万葉 2012年6月4日月曜日
  • 62. みなとRuby会議01 RSpec 楽しい 株式会社万葉 2012年6月4日月曜日
  • 63. みなとRuby会議01 結果を確認してるん じゃないんだ 仕様を書いている んだぜ 株式会社万葉 2012年6月4日月曜日
  • 64. みなとRuby会議01 やる気が 出る! 株式会社万葉 2012年6月4日月曜日
  • 65. みなとRuby会議01 いろいろ 強力で快適! 株式会社万葉 2012年6月4日月曜日
  • 66. みなとRuby会議01 テストが嫌いだった理由 • プロダクトコードを変更したく なくなる(大量に落ちるから) • データ作りがハード • テストコード楽しくない • 書いたテストは読む気がしない • テスト修正作業は最悪だ! 株式会社万葉 2012年6月4日月曜日
  • 67. みなとRuby会議01 うまく書かれた RSpecコードは ドキュメントとして 読める 株式会社万葉 2012年6月4日月曜日
  • 68. みなとRuby会議01 describe Project do describe "#close" do let(:proj) {Factory.create(:project, :closed => true)} context "when closed" do it {expect{proj.close}.to raise_error} end end end 株式会社万葉 2012年6月4日月曜日
  • 69. みなとRuby会議01 テストが嫌いだった理由 • プロダクトコードを変更したく なくなる(大量に落ちるから) • データ作りがハード • テストコード楽しくない • 書いたテストは読む気がしない • テスト修正作業は最悪だ! 株式会社万葉 2012年6月4日月曜日
  • 70. みなとRuby会議01 テスト修正は やっぱり 楽しくない('w' 株式会社万葉 2012年6月4日月曜日
  • 71. みなとRuby会議01 修正箇所が減って 意図がわかりやすい のでマシ... 株式会社万葉 2012年6月4日月曜日
  • 72. みなとRuby会議01 時間を節約したいこと •定型的な作業 •作業ミスとリカバリー •変更時の動作確認 •コード内容の把握 株式会社万葉 2012年6月4日月曜日
  • 73. みなとRuby会議01 コード内容の把握 • 何がどこに書かれるべきか 決まっている→探しやすい • Rubyはコード量が少ない ので読みやすい 株式会社万葉 2012年6月4日月曜日
  • 74. みなとRuby会議01 ...うまく 書ければね! 株式会社万葉 2012年6月4日月曜日
  • 75. みなとRuby会議01 把握しやすい コードを書く コツ 株式会社万葉 2012年6月4日月曜日
  • 76. みなとRuby会議01 Rubyらしい コードを書く 株式会社万葉 2012年6月4日月曜日
  • 77. みなとRuby会議01 each や for を多 用していますか? 株式会社万葉 2012年6月4日月曜日
  • 78. みなとRuby会議01 map/collect 使っていますか? 株式会社万葉 2012年6月4日月曜日
  • 79. みなとRuby会議01 user_names = [] users.each do ¦u¦ user_names << u.name end users.map(&:name) 株式会社万葉 2012年6月4日月曜日
  • 80. みなとRuby会議01 良い名前をつける 株式会社万葉 2012年6月4日月曜日
  • 81. みなとRuby会議01 値をもらうことが目 的のメソッドには 処理ではなく 返す値の名前を つける 株式会社万葉 2012年6月4日月曜日
  • 82. みなとRuby会議01 calc_salary より salary 株式会社万葉 2012年6月4日月曜日
  • 83. みなとRuby会議01 Q) 変数名と 見分けがつかないの が心配なんですが 株式会社万葉 2012年6月4日月曜日
  • 84. みなとRuby会議01 A)変数のように見 えるメソッド名こそ Rubyらしい (変数なんて無いほ うがいい!) 株式会社万葉 2012年6月4日月曜日
  • 85. みなとRuby会議01 railsのコードを ちょっと見て 雰囲気つかむのも おすすめ 株式会社万葉 2012年6月4日月曜日
  • 86. みなとRuby会議01 正しい場所に書く 株式会社万葉 2012年6月4日月曜日
  • 87. みなとRuby会議01 MVC? 株式会社万葉 2012年6月4日月曜日
  • 88. みなとRuby会議01 オブジェクト指向! 株式会社万葉 2012年6月4日月曜日
  • 89. みなとRuby会議01 誰の仕事にするか 考える 株式会社万葉 2012年6月4日月曜日
  • 90. みなとRuby会議01 適切なオブジェクト がなければ作る class NiceObject end 株式会社万葉 2012年6月4日月曜日
  • 91. みなとRuby会議01 こういうのは 悪いサイン obj.name = params.... obj.age = params... v = obj.prepare_some obj.prepare2(v) ... 同じオブジェクトについての処理が続いている 株式会社万葉 2012年6月4日月曜日
  • 92. みなとRuby会議01 オブジェクト側に 移動しよう コントローラ モデル obj.name = params.... obj obj.age = params... v = obj.prepare_some obj.prepare2(v) ... 株式会社万葉 2012年6月4日月曜日
  • 93. みなとRuby会議01 移動すると コントローラ obj.do_some(params) モデル def do_some(attributes) self.name = attributes... self.age = attributes... v = prepare_some prepare2(v) ... 万葉 株式会社 2012年6月4日月曜日
  • 94. みなとRuby会議01 objがモデルなら コールバックに 移動できる 株式会社万葉 2012年6月4日月曜日
  • 95. みなとRuby会議01 コールバック •before_validation •before_save •after_save •before_destroy •after_destroy •etc.... 株式会社万葉 2012年6月4日月曜日
  • 96. みなとRuby会議01 コントローラコードは こんなかんじに保つ 一括代入 @project = Project.new(params[:project]) if @project.save ... else ... end 株式会社 万葉 2012年6月4日月曜日
  • 97. みなとRuby会議01 params関係が 溢れたら •一括代入に乗るように、 paramsの中身を整えて、代入 メソッドを追加してやる attr_accessor :age 株式会社万葉 2012年6月4日月曜日
  • 98. みなとRuby会議01 ロジックが溢れたら •コールバック (before_validationと before_saveが多い)に入れ る before_save :prepare_some 株式会社万葉 2012年6月4日月曜日
  • 99. みなとRuby会議01 例外処理 • 気にしない • アクション内でがんばらず にあとでrescue_fromと かで調整がおすすめ 株式会社万葉 2012年6月4日月曜日
  • 100. みなとRuby会議01 コード内容の把握 最後のコツ スペックを書いて おくと動作を 他人に伝えやすい 株式会社万葉 2012年6月4日月曜日
  • 101. みなとRuby会議01 時間を節約したいこと •定型的な作業 •作業ミスとリカバリー • 変更時の動作確認 • コード内容の把握 Railsかわいい! 株式会社万葉 2012年6月4日月曜日
  • 102. みなとRuby会議01 時間をかけるべきこと • 設計 • コミュニケーション・情報共有 • スペック/自動テストの充実 株式会社万葉 2012年6月4日月曜日
  • 103. みなとRuby会議01 Railsを使うだけ では解決しない 株式会社万葉 2012年6月4日月曜日
  • 104. みなとRuby会議01 気をつけていること •モデル層はクラス図を書く • URL設計は表にする • 必要物は全部レポジトリに •Wikiに概要や検討を残す •よく話し合う • レビューする 株式会社万葉 2012年6月4日月曜日
  • 105. みなとRuby会議01 Railsの勉強法 株式会社万葉 2012年6月4日月曜日
  • 106. みなとRuby会議01 アプリを 作ってみよう 株式会社万葉 2012年6月4日月曜日
  • 107. みなとRuby会議01 興味のある ものを作る 株式会社万葉 2012年6月4日月曜日
  • 108. みなとRuby会議01 偏ってて OK 株式会社万葉 2012年6月4日月曜日
  • 109. みなとRuby会議01 実現したい! と強く思う 方法を探す 試す 調べる 身に付く! 株式会社万葉 2012年6月4日月曜日
  • 110. みなとRuby会議01 情報源 株式会社万葉 2012年6月4日月曜日
  • 111. みなとRuby会議01 書籍 株式会社万葉 2012年6月4日月曜日
  • 112. みなとRuby会議01 API http://api.rubyonrails.org/ 株式会社万葉 2012年6月4日月曜日
  • 113. みなとRuby会議01 Rails Guide http://guides.rubyonrails.org/ 株式会社万葉 2012年6月4日月曜日
  • 114. みなとRuby会議01 RailsCasts http://railscasts.com/ 株式会社万葉 2012年6月4日月曜日
  • 115. みなとRuby会議01 英語の情報を 避けない 株式会社万葉 2012年6月4日月曜日
  • 116. みなとRuby会議01 コミュニティ/勉強会 •地域Rubyコミュニティ • Yokohama.rb • Asakusa.rb • minami.rb • Okinawa.rb • Tokyu.rb etc •Rails勉強会@東京 株式会社万葉 2012年6月4日月曜日
  • 117. みなとRuby会議01 コードを読む •github 2012年6月4日月曜日 •> rvm gemdir 株式会社万葉
  • 118. みなとRuby会議01 ごきげんに なろう! :) 株式会社万葉 2012年6月4日月曜日