give IT a try

プログラミング、リモートワーク、田舎暮らし、音楽、etc.

お知らせ:Everyday RailsのMinitestバージョンを執筆中です

はじめに

僕が翻訳者として関わっている「Everyday Rails - RSpecによるRailsテスト入門」で、現在日本版独自の追加コンテンツを準備しています。
そのコンテンツとは「Everyday RailsのテストコードをMinitestで書き直したらどうなるか?」というものです。
できればベータ版を2015年6月中に、正式版を2015年7月中に公開したいなと考えています。
今回のエントリではこの追加コンテンツの紹介(予告?)を書いていきます。

2015.06.30 追記「RSpecユーザのためのMinitestチュートリアル」という本を書きました

執筆中だった追加コンテンツは公開済みです。
詳しくは以下のエントリをご覧ください。

blog.jnito.com


おさらい:「Everyday Rails - RSpecによるRailsテスト入門」とは?

「Everyday Rails - RSpecによるRailsテスト入門」はその名の通り、RailsアプリケーションをRSpecでテストする方法を解説した技術書です。
内容は初心者向けで、RSpecを全く触ったことがない、という人でもすんなり理解できるような内容になっています。
提供形態は電子書籍のみで、Leanpubという海外のセルフパブリッシングサービスから購入できます。

https://leanpub.com/everydayrailsrspec-jp
f:id:JunichiIto:20150520074334p:plain

追加コンテンツの内容をもっと詳しく

「Everyday Rails - RSpecによるRailsテスト入門」では簡単なRailsアプリケーションとそれをテストするためのRSpecのコードが提供されています。
GitHubで確認することも可能です。

everydayrails/rails-4-1-rspec-3-0 · GitHub


現在執筆中の追加コンテンツでは、「そのRSpecのテストコードとほぼ同等なものをMinitestで書いたらどうなるか」というのをメインテーマにしています。
もちろん、Minitestのコードを見せるだけでなく、コードの詳しい解説や気をつけるべき点も一緒に説明しています。
書き換え対象のテストコードはEveryday Railsに登場するテストコード全部(=モデル、コントローラ、フィーチャ)です。

コードサンプル

追加コンテンツに登場するテストコードのサンプルはこんな感じです。(一番シンプルなコードをピックアップしました)

RSpecのコード

require 'rails_helper'

describe NewsRelease, type: :model do
  it { is_expected.to validate_presence_of :released_on }
  it { is_expected.to validate_presence_of :title }
  it { is_expected.to validate_presence_of :body }

  it "returns the formatted date and title as a string" do
    news_release = NewsRelease.new(
      released_on: '2013-07-31',
      title: 'BigCo hires new CEO')
    expect(news_release.title_with_date).to \
      eq '2013-07-31: BigCo hires new CEO'
  end
end


Minitest(ユニット形式)で書き換えたコード

require "test_helper"

class NewsReleaseTest < ActiveSupport::TestCase
  should validate_presence_of :released_on
  should validate_presence_of :title
  should validate_presence_of :body

  test "returns the formatted date and title as a string" do
    news_release = NewsRelease.new(
      released_on: '2013-07-31',
      title: 'BigCo hires new CEO')
    assert_equal '2013-07-31: BigCo hires new CEO', 
      news_release.title_with_date
  end
end


Minitest(スペック形式)で書き換えたコード

require "test_helper"

describe NewsRelease do
  should validate_presence_of :released_on
  should validate_presence_of :title
  should validate_presence_of :body

  it "returns the formatted date and title as a string" do
    news_release = NewsRelease.new(
      released_on: '2013-07-31',
      title: 'BigCo hires new CEO')
    _(news_release.title_with_date).must_equal \
      '2013-07-31: BigCo hires new CEO'
  end
end


本文ではこんな感じでテストコードを書き換えながら、Minitestでおさえておくべきポイントを説明していきます。

追加コンテンツの構成

現在考えている追加コンテンツの構成は以下の通りです。

  • Minitest(minitest-rails)のセットアップ
  • ユニット形式のMinitestで書き換える
  • スペック形式のMinitestで書き換える
  • Minitest関連のTipsや注意点
  • Minitestで使われるアサーションメソッド一覧

対象となる読者

追加コンテンツでは以下のような読者を想定しています。

  • 普段よく使うのはRSpecだが、最近Minitestも気になっているRails開発者
  • Minitestに興味はあるが、実践的な情報が少なく実務で使うのはまだ躊躇しているRails開発者

提供形態について

追加コンテンツは「Everyday Rails - RSpecによるRailsテスト入門」の別冊付録のような形で提供されます。
Everyday Rails本体とは別にMinitest版の電子書籍を別途ダウンロードして入手する、という形になる予定です。

なお、原著者のAaronさんの意向もあり、この追加コンテンツはEveryday Railsブランドには属さない独立したコンテンツという位置づけになります。

よくある質問

Q. すでに日本語版のEveryday Railsを持っています。Minitest版のダウンロードにはお金がいりますか?

いいえ、すでに購入された方には無料で提供します!

Q. いつ公開されますか?

ベータ版をまず今月中(2015年6月中)に公開して、それから正式版を7月中に公開したいと考えています。
ただし、あくまで現時点での予定ですので、遅れたりしたらごめんなさい (><)

【募集】追加コンテンツのレビュアーを募集します!

追加コンテンツは日本版独自の書き下ろしになるので、外部の方にもレビューしてもらいたいと考えています。
レビュアーの条件(こちらの希望)は以下の通りです。

  • Everyday Rails日本語版を持っている方
  • 前述の「対象となる読者」に合致する方、もしくはMinitestでよくテストを書いている方

「レビューしてもいいよ」という方がいれば、Twitter等で連絡をください。
よろしくお願いします!

まとめ

というわけで、今後しばらくはこの執筆作業をやっているのでブログの更新頻度はちょっと下がるかもしれません。
Everyday Railsの読者の方はMinitest版の公開を楽しみに待っていてください。

また、Everyday Railsはまだ持っていない、という方はぜこの機会に購入してもらえると嬉しいです。
一度購入してもらえればMinitest版だけでなく、今後のアップデートも無料でダウンロードできますので!

それではまた執筆作業に戻ります~。

https://leanpub.com/everydayrailsrspec-jp
f:id:JunichiIto:20150520074334p:plain