Everyday Rails Testing with RSpecはRSpec初心者～中級者にオススメの一冊！

### 2014.2.7 追記: 日本語版を発売しました！
「この本は英語版しかありません」と書いていましたが、僕自身が日本語版の翻訳し、[Leanpubから発売](https://leanpub.com/everydayrailsrspec-jp)しました。

詳しくはこちらのエントリをご覧下さい。

- [RSpec初心者必読！「Everyday Rails - RSpecによるRailsテスト入門」を発売しました - give IT a try](http://blog.jnito.com/entry/2014/02/07/110505)
- [正式版公開のお知らせと幻のあとがき・Everyday Rails - RSpecによるRailsテスト入門 - give IT a try](http://blog.jnito.com/entry/2014/02/28/105922)


<hr>


注: この記事は[以前自分のブログに書いた記事](http://blog.jnito.com/entry/2013/10/06/080252)から転載したものです。書き下ろしじゃなくてごめんなさい(><)。


## はじめに

先日、RSpec関連のこんな電子書籍を買いました。

*   [Everyday Rails Testing with RSpec](https://leanpub.com/everydayrailsrspec)

<img src="http://cdn-ak.f.st-hatena.com/images/fotolife/J/JunichiIto/20131211/20131211042859.png" style="width:250px;" />

RSpecを学習するための書籍としてはなかなか良かったので、今回はこの本の内容を紹介します。




## この本を購入した動機

RSpecは仕事でも使っていて、そこそこに使い慣れています。
しかし、それでもModel以外のSpecを書くのは面倒くさかったり(=Modelほど慣れていない)、だんだんSpecがごちゃごちゃしてきて可読性や保守性が落ちてきたりします。
「そこそこ使えるけど、もっと上手く書けるようになりたいな～」と思っていたときに見つけたのがこの本でした。




## 全体的な感想

タイトルにあるとおり、RSpec + Railsに特化した本です。
仕事でメインで使っているのはRails + RSpecなので、この本のテーマは僕にうってつけでした。

取り扱う内容は幅広く、実践的なサンプルコードがたくさん出てきます。
業務で「こういうSpecを書きたいんだけど、どう書けばいいかな？」と思うときに、参考になりそうなコードがたくさん載っています。(よっぽど特殊で複雑なケースでなければ)

対象となりそうな読者はRails + RSpecの未経験者から、僕のようにもうちょっとRSpecを上手く書けるようになりたい中級者になると思います。
RSpecのセットアップ方法から説明してくれるので、RSpec初心者には特に嬉しいと思います。

ただし、そこまで高度でマニアックな話題は出てきません。
中級者の人はRSpec再入門用として、苦手だった分野や今まで気付いていなかった「不完全さ」を穴埋めしていくような読み方になると思います。



### 本の目次

参考までに、目次をピックアップするとこんな感じです。

1.  イントロダクション
2.  RSpecのセットアップ
3.  Model specs
4.  ファクトリを使ったテストデータの作成
5.  基本的なController specsの書き方
6.  より進んだController specsの書き方
7.  Controller specをきれいに保つ
8.  Feature specs
9.  Specをスピードアップさせる
10.  その他のテスト
11.  テスト駆動開発に向けて
12.  いろいろなアドバイス





## テストはDRYにしすぎない。スクロールが必要になるならDRYを捨てる

冒頭の動機に書いた、可読性や保守性が低下する問題の解決方法(指針)も載っていました。
それはテストコードはDRYにしすぎない、ということです。

テストの前提条件を確認するために何画面分も上スクロールしなければならないのであれば黄色信号です。
がんばってDRYにしようとせず、テストコードが一画面に収まるような書き方を検討すべきです。

・・・というようなことを書いてあるのを読んで「あー、なるほど！」と思いました。
確かに可読性や保守性が悪いな～と感じていたテストコードのほとんどは、テストデータのセットアップを一カ所に書いて、どんどん下にテストケースを追加していくタイプのものでした。
今後は画面スクロールがいらないようなテストコードを心がけてみようと思います。




## 最新版の実行環境に合わせて内容もアップデート

この本の良いところのひとつは、最新版の実行環境に追従してくれることです。
現時点ではRails 4.0, Capybara 2.1, Factory Girl 4.2, and RSpec 2.14に対応しています。

Railsをはじめ、この方面のフレームワークはどんどん仕様が変わっていくので、本の内容がすぐに古くなってしまいます。
しかし、この本は電子書籍なので最新のフレームワークに合わせて内容をアップデートしてくれます。
最新版の内容は無料で入手できるので、お金を払うのは最初の一度だけでOKです。




## 本の価格は「最低12ドル、ただし17ドル以上を推奨」

本の価格は決まった定価はなく、「最低12ドル、ただし17ドル以上を推奨」となっています。
不思議な価格設定ですが、自分で価格を指定できるんです。
ごめんなさい、僕は12ドルで購入した人です・・・。

あと、この本はAmazonのような一般向けの販売サイトではなく、[Leanpub](https://leanpub.com/‎)というセルフパブリッシングサイトでのみ購入できます。




## ところで、この本って英語ですよね！？

ここまでしれ～っと本の紹介をしていますが、「英語？ねえ、英語しかないの？？」と思いながら読んでいる方がいるんじゃないかと思います。
いえ、ちゃんと翻訳版もありますよ！[中国語](https://leanpub.com/everydayrailsrspec-cn)ですけどね・・・。

はい、というわけで日本人はオリジナルの英語版を読むことになると思います。

でも、そんなに難しい英語ではないです。
みなさん、GemのREADMEファイルやStackOverflowの解答例なんかは英語でも読みますよね？
それができればこの本も十分読めると思います。

僕たちプログラマは英語の読み書きは不得意でも、Ruby(もちろんRuby以外でも可)という世界共通のプログラミング言語なら読み書きできます。
細かい英単語の意味はイマイチわからなくても、コードを読んだら「あー、そういうことね」とだいたいわかったりするものです。
英文の細部にとらわれず、わからない単語があってもガンガン読み進めていくのが洋書を読破するコツなんじゃないかな～と思います。

今まで洋書を買って読んだことがない、という人は一度思い切って買ってみると良いと思います。
「食わずぎらい」を払拭できれば、あなたも洋書デビューです！



### 余談: 洋書を読めるとこんなにたくさんのメリットが！！

「洋書を読める + KindleやiPadで電子書籍が読める」の組み合わせは技術者にとって天国です。

たとえばこんなにたくさんのメリットがあります。

*   技術書の選択肢が莫大に増える
    *   洋書ならマイナーな言語やマニアックな技術の技術書がたくさん
*   読みたい本が読みたいときに手に入る
    *   洋書の大半は電子書籍版がある
*   翻訳を待たなくて良い
    *   そもそも読みたい本が翻訳される保証もない
*   読みにくい翻訳に苦しめられることもない
    *   日本語の方がかえって読みにくいこともたまにありますよね・・・
*   日本で買うより安い
    *   理屈からして翻訳版がオリジナルより安くなることはないですもんね
    *   年末に大幅な割引きセールをする出版社も多いです

さあ、あなたもLet's 洋書デビュー！





## 「The RSpec Book」はどうなの？

RSpec関連の技術書といえば「The RSpec Book」もあります。
日本で発売されているRSpecの技術書はこれぐらいなので、こっちの方が有名だと思います。

<img src="http://ecx.images-amazon.com/images/I/51-3T735zLL._SL160_.jpg" />
[The RSpec Book](http://www.amazon.co.jp/exec/obidos/ASIN/4798121932/junic05-22/)

僕もThe RSpec Bookは読みました。
ただし、例によって洋書ですけどね。

<img src="http://ecx.images-amazon.com/images/I/51YUp7YfkKL._SL160_.jpg" />
[The RSpec Book](http://www.amazon.co.jp/exec/obidos/ASIN/1934356379/junic05-22/)

こちらの本も良いと思います。
ただし、Railsには特化していないので、基本的に「素のRSpec」を取り扱った本になります。
RSpec自体の機能を掘り下げて学習するのには良い本です。
Rails関連の話も全く扱わないのではなく、最後の方の章で出てきます。

あと、タイトルにRSpecと書いてあるわりにはCucumberの話もたくさん出てきます。
Cucumberも一緒に勉強したい人には良いかもしれませんが、「Cucumberは別にええねん」という人にはちょっと退屈かもしれません。

というわけで、興味の対象が「RSpec + Rails」に絞られている人であれば、こちらの[Everyday Rails Testing with RSpec](https://leanpub.com/everydayrailsrspec)の方が役に立つんじゃないかな～と思います。




## まとめ

というわけで、今回は[Everyday Rails Testing with RSpec](https://leanpub.com/everydayrailsrspec)というRSpec関連の技術書を紹介してみました。

「RSpecって使ってみたいけど難しそう」と思っている人や、「もっと上手なRSpecの書き方を身につけたい」と思っている人にはオススメです。
あと、「洋書食わず嫌い」の人も「はじめての洋書」としてぜひチャレンジしてみて下さい！

*   [Everyday Rails Testing with RSpec](https://leanpub.com/everydayrailsrspec)

<img src="http://cdn-ak.f.st-hatena.com/images/fotolife/J/JunichiIto/20131211/20131211042859.png" style="width:250px;" />



### お知らせ: 西脇.rb&東灘.rbに参加してみませんか？

僕とAkiさん([@spring_aki](https://twitter.com/spring_aki))の二人で主催している **西脇.rb/東灘.rb** というRubyコミュニティがあります。
毎月神戸近辺でRuby勉強会を開催していますので、初心者、上級者を問わず、Rubyに興味のある方はお気軽に参加してみて下さい。

Doorkeeperのコミュニティページでメンバー登録してもらうと、イベントの開催通知を受け取ることができます。

- [西脇.rb＆東灘.rb - Doorkeeper](http://nishiwaki-higashinadarb.doorkeeper.jp/)