ごきげんrails

118
みなとRuby会議01 株式会社万葉 ごきげんRails 2012.6.2 大場寧子 @nay3 201264日月曜日

Upload: nay

Post on 02-Nov-2014

10 views

Category:

Technology


0 download

DESCRIPTION

Presentation for MinatoRubyKaigi01, talking about Ruby on Rails. Written in Japanese.

TRANSCRIPT

Page 1: ごきげんRails

みなとRuby会議01

株式会社万葉

ごきげんRails2012.6.2

大場寧子 @nay3

2012年6月4日月曜日

Page 2: ごきげんRails

株式会社万葉

みなとRuby会議01

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

2012年6月4日月曜日

Page 3: ごきげんRails

株式会社万葉

みなとRuby会議01

Yokohama2012年6月4日月曜日

Page 4: ごきげんRails

株式会社万葉

みなとRuby会議01

Ruby on Rails

2012年6月4日月曜日

Page 5: ごきげんRails

株式会社万葉

みなとRuby会議01

Railsって?

•RubyでWebアプリを作れるフレームワーク•簡単に作れる!•でも本当に簡単?

2012年6月4日月曜日

Page 6: ごきげんRails

株式会社万葉

みなとRuby会議01

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

2012年6月4日月曜日

Page 7: ごきげんRails

株式会社万葉

みなとRuby会議01

環境作りが大変

2012年6月4日月曜日

Page 8: ごきげんRails

株式会社万葉

みなとRuby会議01

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

2012年6月4日月曜日

Page 9: ごきげんRails

株式会社万葉

みなとRuby会議01

...慣れればね!

2012年6月4日月曜日

Page 10: ごきげんRails

株式会社万葉

みなとRuby会議01

今日の話題

•RubyやRailsでごきげんになった話•Railsの魅力•Railsの勉強法

2012年6月4日月曜日

Page 11: ごきげんRails

株式会社万葉

みなとRuby会議01

自己紹介

2012年6月4日月曜日

Page 12: ごきげんRails

株式会社万葉

みなとRuby会議01

株式会社万葉Everyleaf Corp.

女性メンバーいっぱいいますよ! :)

2012年6月4日月曜日

Page 13: ごきげんRails

株式会社万葉

みなとRuby会議01

実装大好き

2012年6月4日月曜日

Page 14: ごきげんRails

株式会社万葉

みなとRuby会議01

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

(^^;

2012年6月4日月曜日

Page 15: ごきげんRails

株式会社万葉

みなとRuby会議01

RubyとRailsのおかげです

2012年6月4日月曜日

Page 16: ごきげんRails

株式会社万葉

みなとRuby会議01

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

2012年6月4日月曜日

Page 17: ごきげんRails

株式会社万葉

みなとRuby会議01

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

2012年6月4日月曜日

Page 18: ごきげんRails

株式会社万葉

みなとRuby会議01

Railsの魅力

2012年6月4日月曜日

Page 19: ごきげんRails

株式会社万葉

みなとRuby会議01

生産性2012年6月4日月曜日

Page 20: ごきげんRails

株式会社万葉

みなとRuby会議01

とても高い!

2012年6月4日月曜日

Page 21: ごきげんRails

株式会社万葉

みなとRuby会議01

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

2012年6月4日月曜日

Page 22: ごきげんRails

株式会社万葉

みなとRuby会議01

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

時間をかけられる

2012年6月4日月曜日

Page 23: ごきげんRails

株式会社万葉

みなとRuby会議01

時間をかけるべきこと

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

2012年6月4日月曜日

Page 24: ごきげんRails

株式会社万葉

みなとRuby会議01

時間を節約したいこと

•定型的な作業•作業ミスとリカバリー•変更時の動作確認•コード内容の把握

2012年6月4日月曜日

Page 25: ごきげんRails

株式会社万葉

みなとRuby会議01

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

2012年6月4日月曜日

Page 26: ごきげんRails

株式会社万葉

みなとRuby会議01

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

> rails g controller Users index show

2012年6月4日月曜日

Page 27: ごきげんRails

株式会社万葉

みなとRuby会議01

generator

•ひな形が簡単に得られる•あくまでもひな形で、邪魔にならないのがいいところ!

2012年6月4日月曜日

Page 28: ごきげんRails

株式会社万葉

みなとRuby会議01

足りない 適切 やり

すぎ

2012年6月4日月曜日

Page 29: ごきげんRails

株式会社万葉

みなとRuby会議01

マイグレーション•DBのスキーマ更新を、変更ごとにRubyコードとして保存•開発者間で変更をクールにシェアできる

2012年6月4日月曜日

Page 30: ごきげんRails

株式会社万葉

みなとRuby会議01

changeclass 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 endend

2012年6月4日月曜日

Page 31: ごきげんRails

株式会社万葉

みなとRuby会議01

up & downclass RemoveNameKanaInUsers < ActiveRecord::Migration def up remove_column :users, :name_kana end def down add_column :users, :name_kana, :string endend

2012年6月4日月曜日

Page 32: ごきげんRails

株式会社万葉

みなとRuby会議01

マイグレーション•generatorで作成して•記述追加したりして•ローカル環境に当てて確認•> rake db:migrate•レポジトリにコミット

2012年6月4日月曜日

Page 33: ごきげんRails

株式会社万葉

みなとRuby会議01

某Rails似フレームワークでmigration大変だった;;

2012年6月4日月曜日

Page 34: ごきげんRails

株式会社万葉

みなとRuby会議01

指差し確認しないと

マイグレートできない...orz

2012年6月4日月曜日

Page 35: ごきげんRails

株式会社万葉

みなとRuby会議01

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

2012年6月4日月曜日

Page 36: ごきげんRails

株式会社万葉

みなとRuby会議01

足りない 適切 やり

すぎ

2012年6月4日月曜日

Page 37: ごきげんRails

株式会社万葉

みなとRuby会議01

某migrationBad Points

•コード複雑、自動生成頼み•モデルクラスのコードとつよく依存•中央集権型なので、複数開発者の同時更新に弱い•操作体系が複雑でミスしやすい

2012年6月4日月曜日

Page 38: ごきげんRails

株式会社万葉

みなとRuby会議01

RailsのmigrationGood Points

•手書きできるレベルのコード•モデルクラスのコードと分離されている•複数開発者の同時更新に強い•操作体系がシンプル

2012年6月4日月曜日

Page 39: ごきげんRails

株式会社万葉

みなとRuby会議01

時間を節約したいこと

•定型的な作業•作業ミスとリカバリー•変更時の動作確認•コード内容の把握

2012年6月4日月曜日

Page 40: ごきげんRails

株式会社万葉

みなとRuby会議01

作業ミスとリカバリー•比較的ミスしづらい•rails destroy で generateしたものを簡単に消せる•一貫性があって覚えやすい

2012年6月4日月曜日

Page 41: ごきげんRails

株式会社万葉

みなとRuby会議01

時間を節約したいこと

•定型的な作業•作業ミスとリカバリー•変更時の動作確認•コード内容の把握

2012年6月4日月曜日

Page 42: ごきげんRails

株式会社万葉

みなとRuby会議01

変更時の動作確認

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

2012年6月4日月曜日

Page 43: ごきげんRails

株式会社万葉

みなとRuby会議01

RSpecの話

2012年6月4日月曜日

Page 44: ごきげんRails

株式会社万葉

みなとRuby会議01

自動テスト嫌いでした

2012年6月4日月曜日

Page 45: ごきげんRails

株式会社万葉

みなとRuby会議01

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

2012年6月4日月曜日

Page 46: ごきげんRails

株式会社万葉

みなとRuby会議01

テストが嫌いだった理由•プロダクトコードを変更したくなくなる(大量に落ちるから)•データ作りがハード•テストコード楽しくない•書いたテストは読む気がしない•テスト修正作業は最悪だ!

2012年6月4日月曜日

Page 47: ごきげんRails

株式会社万葉

みなとRuby会議01

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

•大量に落ちる→修正苦痛•変更に耐えるテスト/スペックが重要!!

2012年6月4日月曜日

Page 48: ごきげんRails

株式会社万葉

みなとRuby会議01

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

のコツ

2012年6月4日月曜日

Page 49: ごきげんRails

株式会社万葉

みなとRuby会議01

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

2012年6月4日月曜日

Page 50: ごきげんRails

株式会社万葉

みなとRuby会議01

すべてを確認しない

レイヤーを揃える

2012年6月4日月曜日

Page 51: ごきげんRails

株式会社万葉

みなとRuby会議01

•保存できる•既存レコードなんか調べない!•全カラムを調べたりしない!•返り値が20になる•内部の変数の値とか調べない!•ステータスコード200を期待•セッション状態とか見ない!•インスタンス変数の値なんか調べない!

2012年6月4日月曜日

Page 52: ごきげんRails

株式会社万葉

みなとRuby会議01

全部調べると

•内部の変更に弱い•つまり、リファクタリングに弱くなる•コード読んでも意図不明•心配なら別のケースにする

2012年6月4日月曜日

Page 53: ごきげんRails

株式会社万葉

みなとRuby会議01

DRYにする(特にオブジェクト生成)

2012年6月4日月曜日

Page 54: ごきげんRails

株式会社万葉

みなとRuby会議01

FactoryGirl

2012年6月4日月曜日

Page 55: ごきげんRails

株式会社万葉

みなとRuby会議01

Factory.create(:project)

2012年6月4日月曜日

Page 56: ごきげんRails

株式会社万葉

みなとRuby会議01

テストが嫌いだった理由•プロダクトコードを変更したくなくなる(大量に落ちるから)•データ作りがハード•テストコード楽しくない•書いたテストは読む気がしない•テスト修正作業は最悪だ!

2012年6月4日月曜日

Page 57: ごきげんRails

株式会社万葉

みなとRuby会議01

FactoryGirl

2012年6月4日月曜日

Page 58: ごきげんRails

株式会社万葉

みなとRuby会議01

FactoryGirlはActiveRecordの理解が必要

2012年6月4日月曜日

Page 59: ごきげんRails

株式会社万葉

みなとRuby会議01

テストが嫌いだった理由•プロダクトコードを変更したくなくなる(大量に落ちるから)•データ作りがハード•テストコード楽しくない•書いたテストは読む気がしない•テスト修正作業は最悪だ!

2012年6月4日月曜日

Page 60: ごきげんRails

株式会社万葉

みなとRuby会議01

assert_equal 20, obj.result

検査してね、20のはずなんで、えーとそのobj.resultね

2012年6月4日月曜日

Page 61: ごきげんRails

株式会社万葉

みなとRuby会議01

obj.result.should == 20

obj.result はー、20になりまーす

2012年6月4日月曜日

Page 62: ごきげんRails

株式会社万葉

みなとRuby会議01

RSpec楽しい

2012年6月4日月曜日

Page 63: ごきげんRails

株式会社万葉

みなとRuby会議01

結果を確認してるんじゃないんだ仕様を書いている

んだぜ

2012年6月4日月曜日

Page 64: ごきげんRails

株式会社万葉

みなとRuby会議01

やる気が出る!

2012年6月4日月曜日

Page 65: ごきげんRails

株式会社万葉

みなとRuby会議01

いろいろ強力で快適!

2012年6月4日月曜日

Page 66: ごきげんRails

株式会社万葉

みなとRuby会議01

テストが嫌いだった理由•プロダクトコードを変更したくなくなる(大量に落ちるから)•データ作りがハード•テストコード楽しくない•書いたテストは読む気がしない•テスト修正作業は最悪だ!

2012年6月4日月曜日

Page 67: ごきげんRails

株式会社万葉

みなとRuby会議01

うまく書かれたRSpecコードはドキュメントとして

読める

2012年6月4日月曜日

Page 68: ごきげんRails

株式会社万葉

みなと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

endend

2012年6月4日月曜日

Page 69: ごきげんRails

株式会社万葉

みなとRuby会議01

テストが嫌いだった理由•プロダクトコードを変更したくなくなる(大量に落ちるから)•データ作りがハード•テストコード楽しくない•書いたテストは読む気がしない•テスト修正作業は最悪だ!

2012年6月4日月曜日

Page 70: ごきげんRails

株式会社万葉

みなとRuby会議01

テスト修正はやっぱり

楽しくない('w'2012年6月4日月曜日

Page 71: ごきげんRails

株式会社万葉

みなとRuby会議01

修正箇所が減って意図がわかりやすい

のでマシ...

2012年6月4日月曜日

Page 72: ごきげんRails

株式会社万葉

みなとRuby会議01

時間を節約したいこと

•定型的な作業•作業ミスとリカバリー•変更時の動作確認•コード内容の把握

2012年6月4日月曜日

Page 73: ごきげんRails

株式会社万葉

みなとRuby会議01

コード内容の把握

•何がどこに書かれるべきか決まっている→探しやすい•Rubyはコード量が少ないので読みやすい

2012年6月4日月曜日

Page 74: ごきげんRails

株式会社万葉

みなとRuby会議01

...うまく書ければね!

2012年6月4日月曜日

Page 75: ごきげんRails

株式会社万葉

みなとRuby会議01

把握しやすいコードを書くコツ

2012年6月4日月曜日

Page 76: ごきげんRails

株式会社万葉

みなとRuby会議01

Rubyらしいコードを書く

2012年6月4日月曜日

Page 77: ごきげんRails

株式会社万葉

みなとRuby会議01

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

2012年6月4日月曜日

Page 78: ごきげんRails

株式会社万葉

みなとRuby会議01

map/collect使っていますか?

2012年6月4日月曜日

Page 79: ごきげんRails

株式会社万葉

みなとRuby会議01

user_names = []users.each do |u| user_names << u.nameend

users.map(&:name)

2012年6月4日月曜日

Page 80: ごきげんRails

株式会社万葉

みなとRuby会議01

良い名前をつける

2012年6月4日月曜日

Page 81: ごきげんRails

株式会社万葉

みなとRuby会議01

値をもらうことが目的のメソッドには処理ではなく返す値の名前をつける

2012年6月4日月曜日

Page 82: ごきげんRails

株式会社万葉

みなとRuby会議01

calc_salaryより

salary2012年6月4日月曜日

Page 83: ごきげんRails

株式会社万葉

みなとRuby会議01

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

2012年6月4日月曜日

Page 84: ごきげんRails

株式会社万葉

みなとRuby会議01

A)変数のように見えるメソッド名こそRubyらしい

(変数なんて無いほうがいい!)

2012年6月4日月曜日

Page 85: ごきげんRails

株式会社万葉

みなとRuby会議01

railsのコードをちょっと見て雰囲気つかむのも

おすすめ

2012年6月4日月曜日

Page 86: ごきげんRails

株式会社万葉

みなとRuby会議01

正しい場所に書く

2012年6月4日月曜日

Page 87: ごきげんRails

株式会社万葉

みなとRuby会議01

MVC?2012年6月4日月曜日

Page 88: ごきげんRails

株式会社万葉

みなとRuby会議01

オブジェクト指向!

2012年6月4日月曜日

Page 89: ごきげんRails

株式会社万葉

みなとRuby会議01

誰の仕事にするか考える

2012年6月4日月曜日

Page 90: ごきげんRails

株式会社万葉

みなとRuby会議01

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

class NiceObject

end2012年6月4日月曜日

Page 91: ごきげんRails

株式会社万葉

みなとRuby会議01

こういうのは悪いサイン

obj.name = params....obj.age = params...v = obj.prepare_someobj.prepare2(v)...同じオブジェクトについての処理が続いている

2012年6月4日月曜日

Page 92: ごきげんRails

株式会社万葉

みなとRuby会議01

オブジェクト側に移動しよう

obj.name = params....obj.age = params...v = obj.prepare_someobj.prepare2(v)...

コントローラ モデルobj

2012年6月4日月曜日

Page 93: ごきげんRails

株式会社万葉

みなとRuby会議01

移動すると

def do_some(attributes) self.name = attributes... self.age = attributes... v = prepare_some prepare2(v) ...

obj.do_some(params)コントローラ

モデル

2012年6月4日月曜日

Page 94: ごきげんRails

株式会社万葉

みなとRuby会議01

objがモデルならコールバックに移動できる

2012年6月4日月曜日

Page 95: ごきげんRails

株式会社万葉

みなとRuby会議01

コールバック•before_validation•before_save•after_save•before_destroy•after_destroy•etc....

2012年6月4日月曜日

Page 96: ごきげんRails

株式会社万葉

みなとRuby会議01

コントローラコードはこんなかんじに保つ

@project = Project.new(params[:project])if @project.save ...else ...end

一括代入

2012年6月4日月曜日

Page 97: ごきげんRails

株式会社万葉

みなとRuby会議01

params関係が溢れたら

•一括代入に乗るように、paramsの中身を整えて、代入メソッドを追加してやる

attr_accessor :age

2012年6月4日月曜日

Page 98: ごきげんRails

株式会社万葉

みなとRuby会議01

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

before_save :prepare_some2012年6月4日月曜日

Page 99: ごきげんRails

株式会社万葉

みなとRuby会議01

例外処理

•気にしない•アクション内でがんばらずにあとでrescue_fromとかで調整がおすすめ

2012年6月4日月曜日

Page 100: ごきげんRails

株式会社万葉

みなとRuby会議01

スペックを書いておくと動作を他人に伝えやすい

コード内容の把握最後のコツ

2012年6月4日月曜日

Page 101: ごきげんRails

株式会社万葉

みなとRuby会議01

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

2012年6月4日月曜日

Page 102: ごきげんRails

株式会社万葉

みなとRuby会議01

時間をかけるべきこと

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

2012年6月4日月曜日

Page 103: ごきげんRails

株式会社万葉

みなとRuby会議01

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

2012年6月4日月曜日

Page 104: ごきげんRails

株式会社万葉

みなとRuby会議01

気をつけていること•モデル層はクラス図を書く•URL設計は表にする•必要物は全部レポジトリに•Wikiに概要や検討を残す•よく話し合う•レビューする

2012年6月4日月曜日

Page 105: ごきげんRails

株式会社万葉

みなとRuby会議01

Railsの勉強法

2012年6月4日月曜日

Page 106: ごきげんRails

株式会社万葉

みなとRuby会議01

アプリを作ってみよう

2012年6月4日月曜日

Page 107: ごきげんRails

株式会社万葉

みなとRuby会議01

興味のあるものを作る

2012年6月4日月曜日

Page 108: ごきげんRails

株式会社万葉

みなとRuby会議01

偏っててOK

2012年6月4日月曜日

Page 109: ごきげんRails

株式会社万葉

みなとRuby会議01

実現したい!と強く思う

方法を探す調べる

試す身に付く!

2012年6月4日月曜日

Page 110: ごきげんRails

株式会社万葉

みなとRuby会議01

情報源2012年6月4日月曜日

Page 111: ごきげんRails

株式会社万葉

みなとRuby会議01

書籍

2012年6月4日月曜日

Page 112: ごきげんRails

株式会社万葉

みなとRuby会議01

APIhttp://api.rubyonrails.org/

2012年6月4日月曜日

Page 113: ごきげんRails

株式会社万葉

みなとRuby会議01

Rails Guidehttp://guides.rubyonrails.org/

2012年6月4日月曜日

Page 114: ごきげんRails

株式会社万葉

みなとRuby会議01

RailsCastshttp://railscasts.com/

2012年6月4日月曜日

Page 115: ごきげんRails

株式会社万葉

みなとRuby会議01

英語の情報を避けない

2012年6月4日月曜日

Page 116: ごきげんRails

株式会社万葉

みなとRuby会議01

コミュニティ/勉強会•地域Rubyコミュニティ•Yokohama.rb•Asakusa.rb•minami.rb•Okinawa.rb•Tokyu.rb etc•Rails勉強会@東京

2012年6月4日月曜日

Page 117: ごきげんRails

株式会社万葉

みなとRuby会議01

コードを読む

•> rvm gemdir

•github

2012年6月4日月曜日

Page 118: ごきげんRails

株式会社万葉

みなとRuby会議01

ごきげんになろう! :)

2012年6月4日月曜日