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/