Javaのビルド環境に,このところ変化が起き始めている。

 ビルドとは,関連する多数のプログラムをコンパイルし,jarやwarなどの実行可能なファイル形式に変換するプロセスである。このビルドを自動化するツールの定番となってきたのが,THE Apache ANT PROJECTが開発しているAntである。

 Apacheのソフトウエアも,ビルドにAntを利用しているソフトウエアが大多数を占めていた。しかし,最近開発がスタートしたソフトウエアでは,Mavenというツールを利用するものが増えている。前回ご紹介した
GeronimoもMavenを利用しているソフトウエアのひとつだ。

ビルドだけでなく,テストやドキュメント生成も自動化

 MavenはThe Apache Software Foundationで開発されているプロジェクト管理ツールである。管理といってもスケジュールや人的リソースを管理する訳ではない。Mavenは,ソフトウエアを開発するに当たって必要となる,ソースコードのビルドやテスト,ドキュメントの生成を行うツールである。

 Antなど,従来のビルド・ツールの多くは,ソースコード・ファイルのコンパイルまたはそれに付随する処理(アーカイブ化など)に主眼を置いている。よって,テストやドキュメントの生成など少し複雑なことを行わせる場合には,設定ファイルにその旨を定義する必要がある。しかし,この定義は,行わせたいことが複雑になればなるほど,その定義方法が難しくなる。使いこなすまでに時間がかかる。

図1●Mavenの概要
 Mavenは,プロジェクト・オブジェクト・モデル(POMと呼ぶ)というコンセプトでこの問題を解決しようとしている。具体的には,一定のディレクトリ構造にリソースやライブラリを配置し,POMをXMLで記述した簡単な設定ファイル(POMファイルと呼ぶ)を記述する。MavenはPOMファイルとディレクトリの内容を解析し,ビルド,各種のドキュメント生成,単体テストなどを行い,その結果をHTMLのページとして生成するのである(図1[拡大表示])。

 このように,Antがコードのビルドや実行に主眼を置いているのに対し,Mavenはプロジェクトの開発工程全体をスコープとしている。オープンソース・ソフトウエアの開発に限らず,すべてのJavaアプリケーション開発に有益な機能を備えている。筆者も,2002年のBeta5リリースの頃から,実際のシステム開発プロジェクトで利用しており,開発効率の向上を実感している。

 Mavenは,JakartaプロジェクトのWebアプリケーション・フレームワークであるTurbineを開発するためのツールとして生まれた。その生い立ち上,オープンソース・ソフトウエアを開発するために必要と思われる機能を多く提供している。

 オープンソース・ソフトウエアの開発では,すべての開発者が世界中に存在しており,真の分散開発が行われている。お互いの顔すら知らない者同士が協力し,1つのソフトウエアが開発されているのである。このような開発スタイルを支えるためにMavenは様々な機能を提供している。

 Mavenは,ビルドやドキュメント生成などの機能を,ゴールという概念に基づき行なう。Mavenのゴールは,Antでタスクと呼ばれるものに近い。Mavenでは,行いたい処理のゴールを起動時に指定するだけでよく,Antのようにビルド・ファイルを記述する必要はない。Mavenのゴールは,インストールしただけの状態で既に数多く用意されており,特別な設定なしにそのゴールを指定できる。そのため,簡単に多くの機能が利用できるのである。表1に代表的なゴールを示す。この他にも100近いゴールが用意されている。

表1●ゴールの例

ゴール名概要
cactusCactusテストケースの起動
checkstyleコーディング・スタイルのチェック
eclipseEclipse用のプロジェクト・ファイルを生成
genappMaven用のプロジェクト・テンプレートを生成
javaビルド
javadocJavaDocドキュメントの生成
siteプロジェクトのWebサイト生成
testJUnitテストケースの起動
torqueTorqueのSQLファイルやクラスの生成
earearファイルの生成
warwarファイルの生成
jarjarファイルの生成

 組み合わせて独自のゴールを定義することも,まったく新しいゴールを追加する事も可能である。すべてのゴールは,プラグインの形式でMavenに組み込まれている。プラグインを追加することで,Mavenにゴールを増やすことができる。プラグインは「Jakarta jelly」というXML形式のスクリプト言語で記述する必要があり,ゴールを増やす場合には多少の知識が必要となる。とはいえ,通常の利用法であれば,プラグインを追加する事はないだろう。これらのゴールによって提供される主な機能を紹介する。

(1). ライブラリ・ダウンロード機能
 アプリケーションは,ライブラリや別開発をしたソフトウエアのjarファイルを利用している場合が多い。通常のソフトウエア開発では,これらjarファイルの適切なバージョンを各人が入手する必要がある。リソース管理を行っている場合でも,バイナリ・ファイルの管理を行う必要がある。Mavenでは,ネットワーク上にあるサーバーからビルドに必要なライブラリを自動的にダウンロードする機能が提供されている。また,この時にバージョン番号も指定するため,バージョンの不整合を防ぐことが可能となっている。オープンソース・ソフトウエアでは,他の多くのオープンソース・ソフトウエアを利用ことが多いため,非常に有益な機能だ。もちろん,通常の開発においても非常に便利な機能である。

(2). ドキュメント生成機能

写真1●Mavenが自動生成したドキュメント
クリックでMavenのサイトへ
 アプリケーションの開発においては,プログラムのビルドと共に必要となるのが,ドキュメントの生成である。Mavenでは,このドキュメントの生成機能も提供している。ドキュメントはHTML形式で生成され,ネットワークを介して全員で共有できるようになっている。ドキュメントは,プロジェクトのWebページというスタイルになっており,すべてのドキュメントがリンクで辿れるようになっている。出力されるページのテンプレートなどは用意されており,POMファイルに少しの情報を定義するのみでよい。写真1は,Mavenプロジェクト自身のプロジェクトのページである。

(3). 単体テスト機能
 Mavenには,単体テスト・ツールJunitを呼び出す機能が備わっている。特定のディレクトリにテスト・プログラムを配置するだけで,Mavenがテストの必要を検出し自動的に実行する。実行結果はHTML形式で出力され,Mavenが出力するプロジェクトのWebページから参照可能となる。

(4). ビルド機能

図3●POMファイルの例(一部)
クリックで全体表示
 もちろん,プログラムのビルド機能も備わっている。ビルド時には,ライブラリの有無を調べ,前述のライブラリ・ダウンロード機能が自動的に動作するようになっている。

 Mavenを利用する場合,POMファイルの定義とルールに基づいたディレクトリ構造が必要と述べた。まずはPOMファイルの定義例を紹介する(図2[全体表示])。例のように定型化されており,プロジェクトに合わせた内容にそれぞれ変更するのみであり,定義は非常に簡単である。

 また,ディレクトリ構造についても,タグで指定したディレクト配下にjavaファイルを配置するのみでよい。

課題は日本語情報の不足,翻訳スタッフ募集中

 Mavenは,様々な作法を守ることで簡単に多くの機能を利用することができる優れたツールだが,残念ながら日本ではあまり知られていない。これは,Mavenの紹介や日本語情報が極端に不足していることも一因と考えられる。ご興味のある方は,是非利用してみていただきたい。日本語情報は,少し古いバージョンに関するドキュメントが,筆者も参加しているThe Ja-Jakarta Projectにて翻訳され公開されているので,参照していただきたい。

 Ja-JakartaプロジェクトではMaven以外にも多くのソフトウエアに対する翻訳プロジェクトが活動している。しかし,ボランティア・ベースで活動しているため,すべてのプロジェクトが順調という訳ではない(筆者が取りまとめているTurbine翻訳プロジェクトも例外ではない)。JaJakartaの活動に興味のある方は是非,http://www.jajakarta.org/site/getinvolved.htmlにアクセスして我々と一緒に活動していただきたい。

黒住幸光(Kurozumi Yukimitsu)

■著者紹介 黒住幸光(くろずみ ゆきみつ)氏

株式会社アークシステム シニアコンサルタント。1989年よりスーパーコンピュータ向け言語処理環境の研究に従事。1995年,生まれて間もないJavaと出会い,Javaに専念するため転職。現在,株式会社アークシステムにてオープンソース・ソフトウエアを用いたWWWシステムの構築,コンサルティングを行うかたわら,雑誌への執筆,StrutsユーザーMLの管理,Ja-Jakartaプロジェクト Turbine翻訳の取りまとめなど幅広く活動中。メール・アドレスは,yukimi@arksystems.co.jp