Episodesを、本人の許可を得て翻訳します。Weirichによって作られたビルドユーティリティー)をほぼ確実に使ったことがあるだろう。Rakeがいかにパワフルでフレキシブルなツールになりうるかということは理解していないかもしれない。実際、私は、Quarto(自作のe-book製作ツールチェーン)の土台としてRakeを使うと決めるまで理解していなかった。この投稿はRakeについてのシリーズの一部で、基本から始めて高度な使用法に進む。2013年の8月から9月に購読者に向け公開されたRubyTapasビデオのシリーズのひとつをもとにしている。各投稿はビデオから始まり、ビデオより文字を好む人のためにスクリプトが続く。これらのエピソードを無料で公開するにあたり、より多くの人々が、この広く行き渡っているが過小評価されているツールのすべての能力を知り愛するようになることを願う。Fundへの寄付を検討して欲しい。このRakeの連続シリーズは終わりに向かって進んでいます。前回までのいくつかのビデオを通して、私がそうであったように、Rakeのパワーのすごさが分かってくるようになってきたと思います。素のRubyやシェルスクリプトを利用することに対するRakeを使用することの利点については、まだ懐疑的でしょう。あれば、今日がその印象を変える日だと思います。Rakeが、ただ同然で与えてくれる驚くほどパワフルな能力をお見せしたいと思います。電子書籍を作るとします。pygmentizeユーティリティを使ってシンタックスハイライトされたHTMLに変換するために準備した、テキストを取り除いた数百のコード目録が含まれたディレクトリがあります。これは、このタスクを行う小さなRakefileです。目録のリスト、“highlights”のリスト(これは、HTMLの最終成果物です)、そしてhighlightと呼ばれるすべてを生成するタスクを定義しています。最後に、pygmentizeを実行して目録ファイルから.htmlファイルを生成するルールを定義しています。highlightタスクに依存するデフォルトタスクも定義しています。#{t.source}"endpygmentizeタスクを使ったソースコードのハイライトは時間が掛かります。たくさんのソースファイルがある場合、多くの時間が掛かります。rakeをtimeコマンドの下で実行すると、そのプロセスに48秒かかることがわかります。0m4.852s今のところ、これらのハイライトされたファイルは1つずつビルドされています。今は2013年で、2つの物理コアが載ったコンピュータを私は持っていて、ハイパースレッディングにより4つの仮想コアがあることになります。して2つ以上のファイルを同時にビルドできないのでしょうか?それは実際に可能です。我々がすべきことは、rakefileの1行をtaskからmultitaskに変えるだけです。HIGHLIGHTSこれは、:highlightタスクの事前条件を並行に処理できることをRakeに告げます。並列化したいタスクそのものではなく、並列化したいタスクに依存するタスクにこの変更を行っている点に注意してください。Rakeをもう一度実行します。Rakeが数百のRakeサブプロセスを同時に並列で起動し、それらが同じSTDOUTに出力を行うため、かなりみだれた出力になります。25秒を少し超えてたところで、ビルドが完了します。0m8.272s何個のタスクを並列で実行するかを微調整したい場合は、同時に実行できるプロセスの最大数をRakeに告げるために-jオプションを使用できます。各仮想コアにたいして1つ、すなわち4を指定してみます。興味深いことに、今度はほんの少し時間がかかります。してかはよく分かりません。0m7.208s先程述べたように、並列に実行するにはコードに1行変更を加えればよいといいましたが、それは少し嘘です。本当は、コードにまったく変更を加えずにタスクを並列に実行するよう、Rakeに命令することができます。multitaskをtaskに戻して、-mオプションつきでrakeを実行します。これは、すべてのタスクをmultitaskとして扱うよう、Rakeに告げます。歪んだ出力が確認できます。一段落すると、合計時間が25秒超であることが再び確認できます。0m7.856sRakeの並列化は賢くもあります。他のタスクが:highlightタスクに依存していれば、次のフェーズに進む前に、すべてのpygmentizeプロセスが完了するまで待機します。Rakeを使ったビルドの自動化から得たものは何でしょう?タスクを達成するための複雑な依存関係やルールを宣言するための簡単な方法だけではありません。ファイル操作のための便利なメソッドのセットだけではありません。扱いやすいコマンドラインのフロントエンドだけではありません。それらすべてに加え、繰り返し行われるタスクの並列化がただで手に入ります。それが私の言うハッピーハッキングです!Rakeについてのエピソード・文章を楽しんでいただけたことを願っている。forward")」を検討して欲しい。今回のようなビデオをもっと見たければ、RubyTapasをじっくり見てほしい。興味深い方法でRakeを使っているなら、連絡して欲しい。(Atom)About神戸・阪神間のコワーキングスペース的なワークスペース、Nilquebe(ニルキューブ)のブログです。