酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

RailsのテストやRails4.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が早くなりそう!

1
2
3
4
5
6
$ 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

1
2
3
4
5
6
7
8
class ApplicationController < ActionController::Base
  before_action :device_variant

private
    def device_variant
      request.variant = :tablet if request.user_agent =~ /iPad/
    end
end

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

1
2
3
4
5
6
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にアクセスするとプレビュー機能がつかえるようになるみたい。

1
2
3
4
5
class NotifierPreview < ActionMailer::Preview
  def welcome
    Notifier.welcome(User.first)
  end
end

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

concerningの書き方が増えた?

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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をかけるようになった。

1
2
3
4
# 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で認証”

おすすめの書籍