sora_hです。おはようございます。

(このメールはruby-coreにも英文で同じような事を打つかもしれないので、同じようなメールを複数受信した方はごめんなさい。)

3日ほど前からrubyのtest-allを並列化するためのパッチを書いていました。

やっとtest-allをworkerが落ちずに走り抜けることができるようになったため一度MLに
メールをおくることとしました。

自分以外の環境(たとえば, Windowsとか, Windowsとか, Windowsとか)でまだ確認を
していないため、その辺でも動作確認や、指摘などをしてくれないかなあと思いました。

## 問題(?)のパッチ

https://gist.github.com/832784
https://github.com/sorah/ruby/compare/master...parallel_test

上は今日 今時点でのパッチ、下がgithubに置いてある最新版となります。

## 使い方

1. パッチを適用するか、https://github.com/sorah/ruby.git parallel_testブランチをひっぱってくる
2. ビルドする
3. おもむろにmake TESTS='-j2 -v' test-allする
   (--jobs-statusをつけるとそれぞれのworkerの状態も表示されるようになります。デバッグ用)
   (-j2を-j4にしたり-j8にしたりもできます)

尚、一部テスト(gemとか)はfailするため-x rubygemsなど好ましいです ($:の問題。)
昨日rubygemsのテストにパッチを出したのでそれがとりこまれるまでは。

## 現時点でのtodo

* test-allは走り抜けるものの-jをつけたときのみにfail/errorするテストが存在する
* テストがない (!)
    * だれかテスト書いてくれませんか?

## FAQ

Q. なぜtest/unitのみ加工したのですか?
A. minitest/unitは外部プロジェクトであること、また大量のテストスイート
   (TestCaseクラスを継承したクラス) を実行することがなさそう? ということを考え。

Q. 動作原理は?
A. Windowsを考慮してspawnを使い、test/unit/parallel.rbを起動します。
   parallel.rbとはIO.pipeとSTDIN/OUTを使って通信を行います。 (このファイルの中のsuiteを実行しろ、など)
   parallel.rbのプロセスをworkerと呼んでいて、何度も使い回しをすることが可能です。

Q. Windowsで動きません (xxで動きません)
A. パッチのパッチを書いてくれるとうれしいです。

パッチの評価、よろしくおねがいします。

-- 
Shota Fukumori a.k.a. @sora_h - http://codnote.net/