app.Autotestはテスト駆動開発において欠かせないツールです。1.9ではRspecの起動の遅く、イライラしている人も多いでしょう。Rspecの起動を早くするツールにSporkがありますが、以下のような問題があります:製品コードを更新してもリロードしてくれない(ぇruby-debugが使えないこのエントリではこれらの問題を解決していきます。目指すのは次のような環境です:appの下はもちろん、configの下を更新した場合もリロードしてテストしてくれる製品コードでもテストコードでも、debuggerと書いたらruby-debugが使えるSporkまずはベースの環境から作りましょう。my_app最初にRSpecとautotest、sporkを入れるために、Gemfileに以下の行を加えます。'spork'Gemfileを編集したらbundleしておきます。--bootstrapここで、表示される指示に従ってspec/spec_helper.rbを編集します。下のようにしておけばよいでしょう。doendまたSporkを有効にするため、rspec:installによって生成された.rspecファイルに--drbを加えておきます。--drbこれで素のAutotestとSporkの環境はできました。適当なコードをscaffoldして試してみてもいいでしょう。RAILS_ENV=testsporkを起動し、別のターミナルでautotestも実行します。sporkautotestさらに別のターミナルでテストコードを失敗するように修正するとすぐさまautotestが赤くなります。製品コードを壊した場合、テストは走りますが緑のままです。リロードさせる製品コードのリロードは、実は次の2つの問題に分けられます。Pagesに回避方法が載っています。下のようにspec/spec_helper.rbのRSpec.configureのブロックに1行加えます。endこれでapp以下を修正した場合でもリロードしてテストしてくれます。app以外、例えばconfig/application.rbやconfig/initializersの中は、rspecの起動を速くするためにプリロードしているので、sporkの再起動で解決します。これを自動的にやってくれるのがguard-sporkです。APIのRubyバインディングであるrb-fseventをインストールします。ここで使うguard-sporkは、後述するruby-debugのために私が改造したものです。'rb-fsevent'加えたらbundleしてguard-sporkの初期化をします。sporkそしてguardを起動。startsporkはguardが起動してくれます。config/application.rbなどを更新するとguardがsporkを再起動します。ところでguardが監視してくれるファイルの中にはconfig/routes.rbがないのですが、これは下の修正をすることでテストに反映できるようになります。endruby-debugを使うこの時点では、rdebugを起動してコードの中にdebuggerと書いても止まってくれません。実際のテストはDRbサーバであるsporkで動いているからです(たぶん)。Harper氏がrdebugのセッションをフォワードするプロキシを書いてくれました。これを使うと、debuggerが現れたときにsporkのターミナルにrdebugのプロンプトが出ます(autotestのターミナルではない)。一箇所RuntimeErrorが出るところがあるので、ここでは私の修正版を使います。curlなどでプロキシモジュールをspecディレクトリに入れます。spec/spork-ruby-debug.rbそしてそれをspec/spec_helper.rbからrequireします。'test'もちろんruby-debugもインストールしておきましょう。Gemfileに下の行を加えてbundleします。'ruby-debug19'bundleこれで完成です。execを付けるのを忘れずにguardを起動してください。start実はオリジナルのguard-sporkだとsporkのプロセスがbackgroundへ回されてしまってrdebugのプロンプトが取れないのですが、そこは私の修正版で回避してあります。以上の手順で作った環境をgithubに置きましたのでよろしければ参考にしてください。