第5章 Maven2ベストプラクティス
Authors:YAMAMOTO Ryuzo
「継続的インテグレーション」とは、XP(eXtreme Programming)のプラクティスの1つで、
「すべてが自動化された再現可能なビルド・テストを日に何度も行うこと」です。
Continuumは、この継続的インテグレーションを実現するためのツールです。
継続的インテグレーションのメリットには、次のものがあります。
- 開発中のバグがすぐに発見される
- バグがすぐ発見されるので修正もすぐに行われる
- テストを自動的に行うので、開発者は全体のテストの実行に時間を費やさないですむ
- 問題があればすぐに発見されるので、開発者は安心してプログラミングを行える
継続的インテグレーションを実践するには、まずビルド・テストの自動化が必要です(もちろん十分
なテストコードもです)。このビルド・テストの自動化はMaven 2によってすでに実現できていますね。
しかし、Maven 2では、ビルド・テストの実行はコマンド1つで行えますが、この「コマンド1つを実
行する」という作業は誰かが行わないといけません。
この作業を人ではなく機械に定期的に行わせる自動化を行って初めて、「継続的な」ビルド・テストが実
現できるのです。ですので、たとえばcronやタスクスケジューラがあれば、ひとまず継続的インテグ
レーションは実現できます。
では、なぜContinuumのようなツールを使う必要があるのでしょうか?
Continuumには、次のメリットがあります。
- ビルド結果をメールなどで通知してくれる
- Webブラウザで設定ができる
- ビルドの履歴を記録して、Webブラウザで閲覧できる
- Maven 2との親和性が高い
上記の機能をcronなどで実現するのは、けっこう大変ですよね。
また、ContinuumはMaven 2だけでなく、Maven 1、Ant、シェルスクリプトでビルドやテストを行う
プロジェクトもサポートしており、Maven 2化していないプロジェクトであっても継続的インテグレー
ションが可能となっています。
実際、筆者はPerl(Catalyst)を使用したプロジェクトで、テストを実行させるシェルスクリプトを
作成し、Continuumで継続的テストを行いました。
「ソースコードをコミット」→「Continuumが定期的にテスト」→「結果の通知」という、リズムのよさと、
問題があればContinuumが教えてくれる安心感で、とてもよい開発となりました。
では、Continuumをセットアップしましょう。
なお、サンプルファイルのC:\webdb39\server\continuumに、2.まで設定済みのContinuumサーバ
を用意しています。
- Continuumの初期化
まず、Continuumのダウンロードサイト(注1)からcontinuum-1.0.3-bin.zipをダウンロードして展開し
ます。
そのあと、起動スクリプトbin\win32\run.batを実行します。
初回の起動では、Continuumのデータベース初期化などが行われるため、少し時間がかかります。
次の表示が出たら起動完了です。
jvm 1 | [INFO] The application server has started.
ここで、いったんCtrl+CキーでContinuumを停止します。
- Continuumが使用するポートの設定
必要であれば、Continuumが使用するポートを設定してください。
apps\continuum\conf\application.xmlの38行目に記述されています(リスト9)。
●リスト9 使用ポートの設定
<webapps>
...
<listeners>
<http-listener>
<port>8080</port>
</http-listener>
</listeners>
...
</project>
- SMTPサーバの設定
ビルド結果を通知するためのSMTPサーバの設定を、お使いの環境に合わせて変更してください
(リスト10)。application.xmlの122〜123行目にあります。
●リスト10 SMTPサーバの設定
<component>
<role>org.codehaus.plexus.mailsender.MailSender</role>
...
<configuration>
<smtp-host>localhost</smtp-host>
<smtp-port>25</smtp-port>
...
</configuration>
</component>
- 管理者アカウント情報の設定
設定が終わったら、再度起動してください。起動が確認できたら、
http://localhost:8080/continuumにアクセスしてみましょう。
初期設定画面が表示されますので、最低限必要な管理者アカウント情報(Admin account)を入力し、
次に進んでください(図2)。
設定完了後、左上の「Login」にアクセスし、今入力した管理者アカウントでログインします。
図2 Continuum初期設定画面
注1)http://maven.apache.org/continuum/download.html
それでは実際にContinuumを試してみましょう。
先ほどのライブラリプロジェクトwebdb-utilsをContinuumに追加してみます。
Continuumはpom.xmlのscm定義を見て、プロジェクトをチェックアウトしますので、その設定が必要です。
webdb-utilsのpom.xmlにリスト11を追加してください。追加したら忘れずにコミットしましょう。
●リスト11 Subversionリポジトリの設定
<project>
...
<scm>
<connection>
scm:svn:file://C:/webdb39/5/repo/trunk
</connection>
</scm>
...
</project>
コミットが完了したら、Continuumの左側のメニューにある「Add Project」の「Maven 2.0+ Project」
をクリックします。追加したいMavenプロジェクトのpom.xmlを「URL」または「参照(ファイルアップ
ロード)」で指定できるようになっています(図3)。
図3 Maven2プロジェクトの追加
webdb-utilsのpom.xmlを「参照」から選択しアップロードすると登録完了です。
プロジェクト一覧(Continuum Projects)にwebdb-utilsが表示されます(図4)。
図4 プロジェクトの一覧
一覧からwebdb-utilsのリンクをクリックすると、このプロジェクトについての設定が確認できます
(図5)。
図5 プロジェクトの設定画面
次の設定項目があります。
- Build Definitions(ビルド定義)
プロジェクトをどのようなスケジュールでどのようにビルドするか(Mavenのゴールフェーズの何を実行
するのか)の設定。ビルド定義は複数登録できるようになっているので、
「1時間おきに単体テスト実行」「1日1回、すべてのテストが通ったら社内リポジトリに配置」
などのように利用できる
- Notifiers(通知)
ビルド結果をメールやメッセンジャーなどで通知するための設定
- Dependencies(依存ライブラリ)
プロジェクトの依存ライブラリの一覧
- Developers(開発者)
プロジェクトの開発メンバーの一覧。pom.xmlのdevelopers定義の内容が反映されている
例として「1時間おきに単体テスト実行」の設定
を行い、実行してみます。
■設定する
「Build Definitions」のEditアイコンをクリックして「Edit Build Definition」にアクセスし、Goalsを
「clean test」に変更し、「Submit」します(図6)。
図6 ビルド定義の設定
「1時間おきに」の設定ですが、Scheduleに設定されている「DEFAULT_SCHEDULE」がその設定になります。
左メニューの「Schedules」で変更できますし、新しいスケジュール(1日ごとなど)の追加もできるよう
になっています。なお、「1時間おき」にバージョン管理(Subversion)を確認し、前回と変更がない場合
はビルドは実行されません。
「Continuumのセットアップ」にてSMTPサーバを設定した場合は、通知先を追加してみましょう。
「Notifiers」の「Add」ボタンをクリックし「NotifierSelection」で「Mail」を選択して次へ進み、
「MailRecipient address」に通知先メールアドレスを登録します。
■実行する
さてこのままビルドが実行されるのを待つのももったいないので、手動でビルドを実行してみましょう。
「Continuum Project」にある「Build Now」ボタンで手動ビルドを実行できます。
そのあと「Build History」にアクセスすれば、ビルド開始・終了時間・結果が一覧に表示されています
(図7)。「Result」にアクセスすればビルド時のコンソール内容も表示され、いたれりつくせりです。
図7 ビルド結果
また、通知先の追加設定を行っていれば、「[continuum] BUILD SUCCESSFUL: webdb-utils」の件名で
メールが届いていることでしょう。メールにはビルド時のコンソール内容が記載されています。
ビルド時にテストが失敗したりと問題があった場合は「[continuum] BUILD FAILURE: webdb-utils」
のメールが届きますので、すぐに何が問題だったのかの調査に入れます。
このようにContinuumが定期的に自動ビルドを行い、結果を通知してくれることで問題があればすぐに判明
し、対応にとりかかることができます。
「分担して開発していたのをリリース前日に結合したら問題発生!」のような状況にはもうなりませんね。
一度使いはじめたら手放せないツールとなること間違いありません。