RailsのテストやRails 4.1のChange Logについて【Rails東京第90回】


12/21(土)に開催されたRails東京 第90回の勉強会のレポート記事です。

この勉強会は全員参加型で議論し合うので、そこで出た多様な意見や答えを通して、考えを広げることができます。本当にためになる勉強会です^^

今回は僕が参加した次の2つのセッションについてレポートします。

(1) Railsのテストについて
(2) Rails 4.1のChangeLogについて

この記事は基本的には僕の忘備録ですので、読みにくいかもです。こうしてほしいなどのリクエストがあればどんどんコメントください。あと、病み上がりで若干ぼけてたので、変なところがあればツッコミよろしくお願いします!


😀 (1) Railsのテストについて

テストの種類や代表的なツール

テストの種類を大きく分けると2つ。

(A) MVCの動作を保証するためのテスト(カバレッジを上げるためのテストなど)
(B) Acceptance Test(受け入れテスト)について

MVCのテストフレームワークとして代表的なものは、Rspec, Mini TestJasminなどなど。

受け入れテストとして代表的なのは、CucumberTurnipCapybaraSeleniumCapybara-webkitPhantomJSPoltergeistなど。

ちなみにテスト周りではこちらの記事がオススメ。

Rubyist Magazine - エンドツーエンドテストの自動化は Cucumber から Turnip へ

😎 カバレッジについて

テストは「振る舞い」を確実に記述するようにする。カバレッジは100%を目指す必要はなくって、低い時に確認をするための指針にする。コスト見合いでシステムに応じて着地点を見出す。

🐰 受け入れテストについて

受け入れテストは、Request specよりもCapybaraやTurnipなどで書いたほうがシナリオとして記述できるのでわかりやすくなる。その際にテストの記述が複雑になる場合は、custom matcherを別途作るのもあり。

😸 (2) Rails 4.1のChange Logについて

Change Logsのリスト

ということでChange Logsのリスト。細かくすると結構なボリューム。

Ruby on Rails 4.1 Release Notes — Ruby on Rails Guides

What’s new in Rails 4.1 - Coherence Blog

rails/actionmailer/CHANGELOG.md at master · rails/rails

rails/actionpack/CHANGELOG.md at master · rails/rails

rails/actionview at master · rails/rails

rails/actionview/CHANGELOG.md at master · rails/rails

rails/activemodel/CHANGELOG.md at master · rails/rails

rails/activerecord/CHANGELOG.md at master · rails/rails

rails/activesupport/CHANGELOG.md at master · rails/rails

rails/railties/CHANGELOG.md at master · rails/rails

ここからは実際に読み合わせをしてみて特に気になった新機能について。

Preloaderの『spring』が標準搭載に

Springが標準搭載になりました。これでRailsのRakeやRSpecが早くなりそう!

$ bin/spring status
Spring is running:
1182 spring server | my_app | started 29 mins ago
3656 spring app | my_app | started 23 secs ago | test mode
3746 spring app | my_app | started 10 secs ago | development mode

Viewの切り分けが簡単に

action pack variantsを使うことでViewの使い分けがより簡単に。イメージ的にはjp-mobileの機能の一部がRailsの標準になった感じです。

こちらがapp/contorller/application.rb

class ApplicationController < ActionController::Base
before_action :device_variant
private
def device_variant
request.variant = :tablet if request.user_agent =~ /iPad/
end
end

でView側ではこんなふうに振り分けができます。

respond_to do |format|
format.html do |html|
html.tablet #=> app/views/projects/show.html+tablet.erb
html.phone #=> app/views/projects/show.html+phone.erb
end
end

メールのプレビュー機能がついた

http://localhost:3000/rails/mailers/notifier/welcomeにアクセスするとプレビュー機能がつかえるようになるみたい。

class NotifierPreview < ActionMailer::Preview
def welcome
Notifier.welcome(User.first)
end
end

ちなみに個この話題の中でたサービス。無料で使える開発専門のSTMPサーバ。便利便利!

concerningの書き方が増えた?

これは僕が勘違いしているような気もしますが、concerningがこんな風に書けるようになったみたいです。

class Todo < ActiveRecord::Base
concerning :EventTracking do
included do
has_many :events
end
def latest_event
...
end
private
def some_internal_method
...
end
end
end

User FriendlyなURLを作りや少なった

to_paramでSEOに適したPretty URLをかけるようになった。

# example
user = User.find_by(name: 'Fancy Pants')
user.id # => 123
user.to_param # => "123-fancy-pants"

他にもたくさんありますが、PostgreSQLのサポートが手厚くなったのとメール関係の機能が増えたのが印象的でした。

🚜 おまけ: Railsの設計について

こちらのセッションは僕は参加できなかったんですが、@tchikubaさんのブログ記事『Rails勉強会@東京#90に参加してきました』にわかりやすい説明をアップしていただいています。ありがとうございます^^

せっかくですので、その話題の中で出たリンクも一応共有。

オブジェクト指向エクササイズのススメ

Ruby - てめえらのRailsはオブジェクト指向じゃねえ!まずはCallbackクラス、Validatorクラスを活用しろ!

🐯 おまけ:認証系のGem Sorceryについて

Deviseと似たGemで、おもしろそうなGem『Sorcery』を教えてもらいました。今度試してみます!

参考リンク

Railsのプラグインを勉強した。[Sorcery編] - NOT SO BAD

ASCIIcasts - “Episode 283 - Sorceryで認証”

📚 おすすめの書籍