QA@IT

spork, spring, zeus, 使わない, ... どれがオススメですか

4595 PV

Rails 初心者 & TDD 好きのものです。

Rails application preloader として、 spork, spring, zeusなどがあると聞いていますが、
どれが使いやすくて、使いにくいかわかっていません。

(使わないも含めて)メリット、デメリットを総合判断してどれがオススメでしょうか?

回答

私は、Rails 3系だとzeusを使っていて、4系だとspringを使っています。

sporkとzeus, springの違い

sporkはテスト用途に特化して作られています。
DRbを利用して、rspecかcucumberのテストの実行開始を早くする仕組みになっています。

一方で、zeusとspringはテストだけでなくRailsのその他のコマンドやrakeの実行開始も高速化する機能を持っています。
この点で、sporkよりも多機能ですね。

zeusとspringの違い

zeusとspringの違いとして大きな点は、実装言語の違いです。
zeusは主要な箇所はGo言語で実装されており、springはRubyのみで実装されています。
その点で、Rails開発者としてコミットしやすいのはspringの方だと思います。
また、springはRailsのコアチームが開発に関わっているという点でも、今後の発展に期待できる点があります。

zeusとspringの使用感の違いですが、zeusは明示的にzeusプロセスを起動して利用しますが、springはプロセスが立ち上がっていないと、自動で起動してバックグランドで常駐します。
springの方が透過的に利用できる反面、今プロセスが立ち上がっているのかどうかは、コマンドを利用して確認する必要があります。

この手のツールは、しばしば編集後の再読み込みで、上手く新しいコードが反映されない問題が発生します。基本的には、zeusもspringも自動で再読み込みが入るのですが、zeusの方が視覚的に再読み込み状態を確認しやすい、手動で再起動しやすい、というメリットがあります。
ちなみに、sporkは単体では再読み込みの機能を持っていないため、guard-sporkを利用する必要があります。

個人的な感覚としては、zeusの方が若干使いやすいかなーと思っているのですが、Rails 4を触る時には最新を追いかけるためにもspringを利用しています。
実際の所、切り替えるのは、それ程手間では無いので、zeusとspringを試してみて、好みの方を利用するのが良いと思います。

補足:

  • zeusもspringもguard-rspecで利用できます
  • zeus, springを利用している時に、spec_helperの中で、rspec/autotestあるいはrspec/autorunをrequireしていると、テストが二重に走る問題が発生する事があります
編集 履歴 (0)

手元のアプリを一通り Ruby 2.0 にしたところ、テストを含む各種コマンドの起動が格段に速くなったので必要性を感じなくなりました。

1.9 を使っていたころは spork, zeus, spring と一通り試しましたが、結局のところ間に何か噛むとそれを意識しないといけない場面が出てくるので、あんまりしっくり来なかった記憶があります。

編集 履歴 (1)
ウォッチ

この質問への回答やコメントをメールでお知らせします。