前回,前々回とApache Software Foundation(以降,ASF)の開発サーバー環境と,新しいリソース管理ツールSubversionについて紹介した。今回は,各プロダクトを自動的にビルドするシステムGumpを紹介する。

依存するモジュールもすべて最新のバージョンからビルド

 ASFでは,AntやTomcat,Strutsなど複数のプロダクトが開発され,ソースコードが日々更新されている。各プロダクトは,コマーシャル・プロダクトと同様に複数の人で開発されており,リソース管理システムでコードを集中管理している。ここまでは,過去2回の記事で紹介した。

 では,結合ビルドはどのように行われているのだろうか。

 プロダクトをすべて最新のコードでビルドするには,リソース管理システムからチェックアウトしてビルドする必要があるが,この作業はきわめて煩雑だ。

 通常ならば,バッチ・ファイルを用意し,定期的に実行することで解決する。しかし,プロダクトの多くは別のプロダクトを利用して構成されている。例えば,Apache StrutsはApache Jakarta-Commonsプロジェクト内の複数のプロダクト(commons-langやcommons-loggingなど)を利用している。このような場合,別のプロダクトへの影響なども考慮する必要が出てくる。依存するすべてのプロダクトの最新コードをリソース管理システムから取り出してビルドし,後にテスト対象のプロダクトを最新のコードでビルドしてテストする必要がある。

 このようなバッチを作成する事は容易ではない。なぜなら,各プロダクトは異なるリソース管理システムにて管理されており,かつ依存するプロダクトは日々変化するからだ。しかし,ASFではApache Gump(以降,Gump)というプロダクトを用いてこのようなプロダクトをまたがったビルド処理を自動的に行っている。

Gumpの機能と動作

 Gumpは前述したように,プロダクトのビルドを行うためのツールだ。しかし,その機能は単純なビルド・ツールではない。複数のプロダクトのコードをそれぞれのリソース管理システムから取り出し,ビルドを行う。この時,プロダクト間の依存関係を解析し,すべてのプロダクトが最新のソースコードを利用してビルドされるようにスケジューリングする。そして,その結果はHTMLとして出力され,Webブラウザから参照することができる。

図1●Gumpの概要

 例えば,プロダクトAはプロダクトBを,プロダクトBはプロダクトCを利用してそれぞれ構成されている場合,その状態を解析しC,B,Aの順にビルドを行う。プロダクトのビルド時には,そのソースコードを保持しているリソース管理システムから最新のコードを自動的にチェックアウトし,ビルドプロセスを実行するようになっている(図1[拡大表示])。

 Gumpは1度の実行で複数のプロダクトをビルドする。ただし繰り返し実行は行わないため,定期的にビルドを行うには,UNIXのcronやWinwosのATコマンドを用いてスケジューリング・サービスに登録する必要がある。