give IT a try

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

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

2014.2.7 追記: 日本語版を発売しました!

「この本は英語版しかありません」と書いていましたが、僕自身が日本語版の翻訳し、Leanpubから発売しました。

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




はじめに

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

f:id:JunichiIto:20131006074951p:plain:w300


f:id:JunichiIto:20131006045922j:plain:w300

Kindleに入れて読みました。


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というセルフパブリッシングサイトでのみ購入できます。


ところで、この本って英語ですよね!?

ここまでしれ~っと本の紹介をしていますが、「英語?ねえ、英語しかないの??」と思いながら読んでいる方がいるんじゃないかと思います。
いえ、ちゃんと翻訳版もありますよ!中国語ですけどね・・・。


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


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


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


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


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

「洋書を読める + KindleやiPadで電子書籍が読める」の組み合わせは技術者にとって天国です。
たとえばこんなにたくさんのメリットがあります。

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

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


「The RSpec Book」はどうなの?

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

The RSpec Book (Professional Ruby Series)

The RSpec Book (Professional Ruby Series)

  • 作者: David Chelimsky,Dave Astels,Zach Dennis,角谷 信太郎,豊田 祐司,株式会社クイープ
  • 出版社/メーカー: 翔泳社
  • 発売日: 2012/02/22
  • メディア: 大型本
  • 購入: 7人 クリック: 141回
  • この商品を含むブログ (19件) を見る



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

The RSpec Book: Behaviour Driven Development With RSpec, Cucumber, and Friends (The Facets of Ruby Series)

The RSpec Book: Behaviour Driven Development With RSpec, Cucumber, and Friends (The Facets of Ruby Series)

  • 作者: David Chelimsky,Dave Astels,Aslak Hellesoy,Bryan Helmkamp,Dan North
  • 出版社/メーカー: Pragmatic Bookshelf
  • 発売日: 2010/12/15
  • メディア: ペーパーバック
  • 購入: 1人 クリック: 40回
  • この商品を含むブログ (10件) を見る


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


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


というわけで、興味の対象が「RSpec + Rails」に絞られている人であれば、こちらのEveryday Rails Testing with RSpecの方が役に立つんじゃないかな~と思います。


まとめ

というわけで、今回はEveryday Rails Testing with RSpecというRSpec関連の技術書を紹介してみました。


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

f:id:JunichiIto:20131006074951p:plain:w300


お知らせ その1: 10月7日のSonicGarden Study #05は「テスト」がテーマです!

「ソフトウェアのテスト」というテーマに関していうと、明日(2013/10/07)の晩にあるSonicGarden Study #05がちょうどテストコードを取り扱った内容になります。
ただし、RubyやRSpecに特化した内容ではなく、テストそのものについての考え方にフォーカスする予定です。

https://dzpp79ucibp5a.cloudfront.net/events_banners/6400_normal_1380514021__05.png

タイトル

「そのテストは本当に必要ですか。」

概要

最近ではソフトウェアを開発するときに当たり前のように書くテスト。
どこまですべきでしょうか。
そもそもなんの為にテストをするんでしょうか。


今回のSonicGarden Studyは技術の話から少し離れてテストについての考え方をご紹介します。
初心者でも分かりやすくテストの基本から説明します。ぜひご参加ください!

対象者
  • なんの為にテストを書いているのか分からない方
  • 効果的なテストの書き方に興味がある方
  • SonicGardenでのテストの考え方に興味がある方 などなど。
講師
日時
  • 2013/10/07 (月) 19:30 - 20:30
開催方式
  • USTREAMを利用したWeb勉強会 (日本中どこからでも参加できます!)

興味はあるけど、仕事中だから視聴できないかも・・・という人も、是非参加登録して下さい。
開催終了後に秘密の録画URLをお知らせします。
でもリアルタイムに質問を投げたりできるで、LIVEで視聴してもらうのがベストです!


お知らせ その2: DevLOVE関西 ~Decision~でお話しします(残席わずか!!)

西脇.rb & 東灘.rbとは無関係ですが、2013年11月16日(土)に「DevLOVE関西 ~Decision~」というイベントでソニックガーデンの倉貫さん(@kuranuki)と一緒にお話しします。
ほかにも各界の著名なエンジニアの方々のお話が聞けますので、こちらも興味のある方はご参加下さい!


お話しする内容や登壇が決まったいきさつなどはこちらのエントリーに書いてあります。

 

あわせて読みたい

洋書やKindleをテーマについて書いたエントリもあります。
よかったらこちらもどうぞ。