ごきげんRails

Post on 02-Nov-2014

11 views 0 download

Tags:

description

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

Transcript of ごきげんRails

みなとRuby会議01

株式会社万葉

ごきげんRails2012.6.2

大場寧子 @nay3

2012年6月4日月曜日

株式会社万葉

みなとRuby会議01

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

2012年6月4日月曜日

株式会社万葉

みなとRuby会議01

Yokohama2012年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

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日月曜日

株式会社万葉

みなと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日月曜日

株式会社万葉

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

某migrationBad Points

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

2012年6月4日月曜日

株式会社万葉

みなとRuby会議01

RailsのmigrationGood 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

endend

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.nameend

users.map(&:name)

2012年6月4日月曜日

株式会社万葉

みなとRuby会議01

良い名前をつける

2012年6月4日月曜日

株式会社万葉

みなとRuby会議01

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

2012年6月4日月曜日

株式会社万葉

みなとRuby会議01

calc_salaryより

salary2012年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

end2012年6月4日月曜日

株式会社万葉

みなとRuby会議01

こういうのは悪いサイン

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

2012年6月4日月曜日

株式会社万葉

みなとRuby会議01

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

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

コントローラ モデルobj

2012年6月4日月曜日

株式会社万葉

みなとRuby会議01

移動すると

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

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

モデル

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_some2012年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

APIhttp://api.rubyonrails.org/

2012年6月4日月曜日

株式会社万葉

みなとRuby会議01

Rails Guidehttp://guides.rubyonrails.org/

2012年6月4日月曜日

株式会社万葉

みなとRuby会議01

RailsCastshttp://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

コードを読む

•> rvm gemdir

•github

2012年6月4日月曜日

株式会社万葉

みなとRuby会議01

ごきげんになろう! :)

2012年6月4日月曜日