ビルドシステム構築に関して

面白いエントリ見つけました。

ビルドシステム構築スキルの重要性 - 達人プログラマーを目指して

いやー、もう本当によくわかる。

100KSのコンパイルも通らないJavaコードより1KSのbuild.xmlのほうが重要だったりするんだけど、その必要性はあんま理解されてない。

そのせいかビルドスクリプトが無くてビルドがIDE依存なプロジェクトって結構あると思う。そういうプロジェクトって文字コードがらみの問題でjavacでコンパイルしようとすると、java.nio.BufferOverflowExceptionとかで落ちたりするわけだ。
Eclipseコンパイルできるからといって、javacでコンパイルできるわけではない。

最初からビルドが自動化されてCIしていればこのような問題はもちろんすぐ気づく。

小規模プロジェクトであれば、ビルドが手動でもなんとかなるだろうが、大規模だとつらい。

そこで自動化するわけだが、自動化したらしたでブラックボックスになり引き継げなくなる。
というかもともとビルドシステム構築の作業が認識されてないので、引き継ぎの必要性も認識されないことが多いんじゃないかな。

ビルドスクリプトソースコードの一種だと言って、

ThoughtWorksアンソロジー ―アジャイルとオブジェクト指向によるソフトウェアイノベーション

ThoughtWorksアンソロジー ―アジャイルとオブジェクト指向によるソフトウェアイノベーション

にあるようにmacrodef使ってリファクタリングしたら、逆にわかりにくいかもしれない。

わかる人はビルドスクリプト読めばわかるんだろうけど。

Ant + Ivy vs Maven - 達人プログラマーを目指して

も面白いですね。ちなみに僕はAnt派です。EclipseのAntエディタも良い感じだし。でもIvyは使ってないですね。Mavenもそうだけどインハウスリポジトリが無いと使う気にならない。作れよという話もあるが。--);
ま、依存ライブラリもがしがしSVNに突っ込んでます。
あとAnt vs Mavenでは必ずしも無くて、Maven使っててもパッケージングはmaven-antrun-plugin使ってAntでやるっていうのも結構ある。

ちなみに僕はフォルダ構成はMavenを採用してますね。

このエントリの影響で

Ant in Action: Covers Ant 1.7 (Manning)

Ant in Action: Covers Ant 1.7 (Manning)

をぽちって、10章のWorking with big projectsも読んでみました。僕の英語力がいまいちなのでちゃんと読み込めてないけど(汗

僕はマルチプロジェクトではantタスクでプロジェクト毎のbuild.xmlを呼び出してますね。あとはDRYにするためにimportやmacrodefを使ったりしてます。
というような情報は確かに日本語のWebとか書籍では見たこと無い気もするな。。。現場の先人のものを見て学んだ感じです。僕は。

この本をぱらぱら見つつ思ったのはビルドシステム、というよりビルドパイプラインの構築を考えるにあたって、CIとどう連携していくかも重要だなと。
ええとビルドシステムはソースをビルドしてjarやwarなどの成果物を生成するまでをイメージしてて、ビルドパイプラインはさらにデプロイまで含めたイメージで言ってます。

例えばSVNからソースをチェックアウトするのに今だったらAntつかわんでしょ。その辺はHudsonにまかせるでしょとか、SCPでファイルコピーとかもAntでやるよりHudsonプラグインでやったほうが楽かなとか。

そう考えていくとビルドシステムがIDEやCIツールに依存するのはイマイチな気がするけど、ビルドパイプラインがCIツールに依存するのはまあありかなと。

ある程度ビルドの規模が大きくなるとビルドパイプライン的な発想は不可欠だと思うが、そうなったらそうなったで特定のCIツールに依存していいのか?という葛藤が生じるようだ(わりと他人事なのは、依存したっていいやん思ってるから)。そうゆうのって"Agline ALM"やら"Continuous Delivery"やらに書いてないのん?

2010-11-21 - marsのメモ

Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation (Addison-Wesley Signature Series (Fowler))

Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation (Addison-Wesley Signature Series (Fowler))

は今読んでる途中ですが、そういう記述は無かったような。。。

ともあれ、各環境でのビルドシステム構築勉強会でもやったら面白いかもしれん。make, omake, rake, buildout, buildr, gradle, scons, ant, maven, ivy, Phingなどなど。