http://martinfowler.com/bliki/BuildLanguage.html

追記: Jon Tirsenが、Rubyを使って複雑なantビルドプロセスを動かすという面白いストーリーを書いていました。

Bruce Eckel が最近、antとmakeに関する投稿をしたのだが、それに影響を受けて、私のビルド言語に関する考えをここでシェアしておきたいと思う。 antとmakeはどちらもビルド方法を指定するものであり、ビルド方法を記述するための言語である。どちらも非常に広く使われており、成功もしている。 しかし、どちらも限界に達しているようだ。大規模システムでは、ant/makeファイルを他のプログラムから生成している人をよく見かける。

上記の理由で、私はBruceの意見に賛成なのだと思う。 簡単なビルドならば、一連のタスクと依存とで簡単に表現することが出来る。こういうビルドならば、ant/makeの機能で十分である。 だが、より複雑なビルドになると条件付のロジックが要求され、より汎用的なプログラム言語構造が必要となってくる。この点がant/makeが敗北するところだ。

antは、XMLをファイルフォーマットとして使うことにした。 その時は私もよい選択だと思った。 あの頃は、Matt Foemmelと大規模プロジェクトに携わっており、彼はantに似たシステムを作った(当時はantは無かった。必要だったのだが)。 彼もファイルフォーマットの記述言語としてXMLを選んだ。 データの階層構造を記述するのにXMLは悪くない選択肢のように思えたのだ。 階層構造はビルドスクリプトを記述するのにぴったりのようにも思えた。 だが我々はそのとき以来、こう結論付けている。 プログラム言語を使うことこそが進むべき道であり、 そしてそれはXMLではない、と。

Rubyをやりこむようになってから、自然にRake(Rubyのmake)と戯れるようになった。 rakefilesの面白いところは、ちょっとした決まりのあるRubyプログラムで、タスクや依存を宣言できるところだ。 まだ小さなタスクしか使ったことは無いが、今のところ、すんげー便利。 完璧な言語だから、もっと大きなビルドにも向いているように思う。 私自身のビルドファイルで使ってみたが、ループ、サブルーチン、リストコレクションなどを簡単に扱うことができた。