ビルドやテストの自動化を目的として、Jenkinsを利用する現場は多い。「開発支援ツール徹底調査2013」では、直近2年間でJenkinsを利用したことがあると回答した人のうち、ビルドの自動化を用途としている人は93.1%、テストの自動化を用途としている人は60.8%を占めた。
Jenkinsでビルドとテストを自動化するには、SubversionやGitといったソースコード管理ツール、Mavenなどのビルドツール、JUnitのようなテストツールという3種のツールを用意し、さらにJenkinsがそれらのツールと連携できるように設定しておく(図1)。そうすることで、メンバーがソースコードをコミットするとJenkinsが更新を検知し、ビルドツールをキック。あらかじめビルドツールに仕込んでおいた手順書に従って、ビルドやテストが行われる。
ビルドやテストが完了したら、JenkinsのWebページやメールなどで結果を確認する。エラーのときは解析し、ソースコードの該当箇所を修正して再度コミットする。再びテストが実行されるので、同じように結果を参照し、エラーなら解析して修正を施した上でコミット―という手順を、エラーがゼロになるまで繰り返す。
ここでは、Jenkinsでテストを自動実行する際のノウハウを紹介する。
ポイント1
まずは単体テストの自動化から
Jenkinsの導入効果を実感するには、単体テストの自動実行から着手することをお勧めしたい。その効果は、結合テストの工程で実感できる。
富士通システムズ・イーストの川上真一氏(産業ソリューション本部 エレクトロニクス産業事業部 第二ソリューション部)は、「結合テストがエラーになっても単体テストは合格しているので、Jenkins導入前よりエラーの総数が大幅に減る」と指摘する。たとえエラーになっても、単体テストに合格していることから、単体での動作には問題ないと保証される。そのためプログラム間の処理に絞って原因の特定作業を進められる。
単体テストを実装工程で実行するので、ソースコードと並行してテストコードを書くことになる。そのための負担が大きいように思えるかもしれない。しかし最終的には、その負担を補って余りある効果を得られる。
コンテンツ配信事業を手掛けるエムティーアイでは、健康管理サービス「ルナルナ」のプラットフォームをスマートフォン向けに再構築するに当たり、JenkinsとテストツールのNUnitを組み合わせて、実装工程で単体テストを自動的に実行した。その際、プログラマがソースコードと並行してテストコードを書くようにしたことで、最初のうちは開発スピードが落ちたという。しかし「本番稼働後に見つかるバグの数が大幅に減った」(上席執行役員 CTO Application Developer Center 古賀和幸氏)。この導入効果を実感したことにより、プログラマは意欲的にJenkinsを利用するようになった。