皆さん、TDDをやっていますか?
RailsでTDDをやる場合に、bundlerやRailsの初期ロードの時間などでテストを実行すること自体に時間がかかって、待ち時間が発生して非常にストレスに感じていました。
先日、そのアプローチとして @a_matsuda さんが interactive_rspec という gem をリリースして解決しようとしていることを聞きました。rails console 上で rspec を実行できるようにして、bundlerやRailsの初期ロード時間を短縮しようというのを目指しているそうです。
このgemを試してみたところ、確かにrspecをconsole上で実行でき軽快にTDDを実施できそうでした。しかし、たまに動きがおかしい状態になってしまっていました。まぁ、まだver0.0.1の状態なのでしかたないのですが。
そこで、一旦元に戻してこれまでの解決策のsporkを利用してやっていました。sporkは、drbで受け付けるテスト実行サーバのようなものです。しかし、これもそもそものrspecやrakeのコマンドの起動の初期ロードに時間がかかってしまい、遅く感じました。
もう少し調べたところ、 @jugyo さんのこのブログを見つけました。rspecやrakeのコマンドの起動時間を短くするために irb 上からdrbを直接叩くようにしてテストを実行してより高速にrspecを実行するようにしています。これを試したところ非常に快適でした!!
この方法にも、1点だけ面倒なところがありました。スクリプトを各アプリにインストールしないといけないのです。SonicGardenでは一人で複数のアプリ・プロジェクトを持つのでアプリごとにスクリプトをインストールするというのは大変です。なので、 @jugyo さんに確認してgemを作って、gemをインストールするだけでこの方法を利用できるようにしました!!
これでかなりテストの実行時間を待つということが削減できるようになりましたが、まだ少し気になる点が残っているので、このgemを改善してより快適につかえるようにしたいなぁっと思っています。
課題
- sporkのプロセスとfast_spork_runnerを別々に起動する必要がある
- sporkのプロセスを再起動するというのが面倒
fast_spork_runnerのプロンプトでsporkのプロセスの起動を管理できるようにできればいいなーっと思っています。
まぁ、現状でもかなり快適になるので、RailsでTDDをしていて、テストの実行が遅いなーという課題をお持ちの方は是非お試しください。