全3636文字
PR

疑問3:本当にJenkinsを使うと開発が速くなるの?

 Jenkinsを利用すると、「手作業からの解放」「不具合の早期発見」という恩恵を得られる。この2つが、まさに開発の高速化につながるわけだ。

 例えば、ソフトウエア開発では短いソースコードを記述し、意図した通りに動くかを繰り返しテストする。多くの場合はテストコードを記載してテストを実施するだろう。

 ところが、何度もソースコードを改修してテストを繰り返す場合、いちいち手動でテストを実行するのが負担になる。バージョン管理システムのリポジトリーからソースコードを入手し、そのソースコードを改修、そしてビルドしてテスト環境にデプロイ(配置)する――。このような工程を経て、ようやくテストを実施できるようになる。

 そこで、Jenkinsによる自動化が重要になる。Jenkinsの設定に「リポジトリーにソースコードが保存されたら、関連するライブラリーを集めてビルドし、テストコードを実行した後、結果をメールで送信する」という処理を記載しておくわけだ。手作業から解放されるとともに、大幅な時間短縮となる。

 筆者がかつて担当したあるシステムの場合、手動でテストを実行すると、完了までにおよそ1分かかるソースコードがあった。同等の処理をJenkinsに設定するのに10分程度要したが、自動化によってテスト完了までにかかった時間はわずか3秒だった。

 最初のテストの所要時間は手動が1分、Jenkinsが10分3秒だ。しかし11回目になると、手動が11分、Jenkinsは10分33秒となった。以降は、回数を重ねるほどJenkinsの方が所要時間が短くなる。継続的にテストする場合は、どちらが短くなるのかは明らかだ。

手動によるテストとJenkinsによるテストの累計時間
手動によるテストとJenkinsによるテストの累計時間
[画像のクリックで拡大表示]

 このように、繰り返し行うテストにJenkinsを活用すれば、開発の効率向上に寄与する。Jenkinsの設定変更が頻繁に発生するシステムは、手動でテストせざるを得ないが、それでも自動化できるものは初めから自動化した方が時間の節約につながる。

不具合の発見が遅くなると手戻りに

 不具合の早期発見についてはどうか。開発しているシステムが一定以上の規模になると、ある“慣習”がまん延しやすくなる。それは、自分が開発しているソースコードの周辺だけをテストし、それ以外は放置してしまう悪しき慣習だ。

 理由は単純である。例えば自分が開発しているソースコードだけなら1分でテストが済むのに、全てのソースコードをビルドしてテストすると、30分もかかるといった状況になるからだ。このような状況に陥ってしまえば、全てのソースコードを対象にテストする気にならなくなる。結果として、動作確認が成立する程度のソースコードだけを対象にテストする慣習がまん延する。

 ところが、自分がソースコードを変更したことによって、別の開発者が担当するソースコードに影響を及ぼす可能性がある。不具合の発見が遅くなれば、手戻りは大きくなる一方だ。最悪の場合、システム全体が動かなくなる。もちろん、悪しき慣習が良くないことは、全てのメンバーが分かっている。

 問題は全てのソースコードをビルドしてテストするのに膨大な時間がかかることだ。ならば、これらの作業をJenkinsで自動化してしまえばよい。実行用のサーバーを別に用意すれば、ビルドとテストの実行中でも手元のPCで別の作業を進められる。

 Jenkinsなら、バージョン管理システムに新しいソースコードが保存されるたびに、全てのソースコードを対象に自動でビルドとテストを実行できる。まさに今で言うRPA(ロボティクス・プロセス・オートメーション)ツールが、Jenkinsなのだ。

中川 幸哉(なかがわ ゆきや)
ウォーターセル
ウォーターセル所属のプログラマー。モバイルアプリに関する技術を中心に、ブログ記事の執筆や、技術カンファレンスへの登壇を行う。主な著書に「Effective Android」(インプレスジャパン)、「たった1日で基本が身に付く! Androidアプリ開発超入門」(技術評論社)などがある。
山田 祥寛(やまだ よしひろ)
WINGSプロジェクト代表
執筆コミュニティー「WINGS プロジェクト」の代表。Web系技術を中心に開発者向けの書籍/記事を多数執筆。Microsoft MVP for Visual Studio and Development Technologies。主な著書に「独習シリーズ(C#・PHP・ASP.NET)」(翔泳社)、「改訂新版 JavaScript 本格入門」(技術評論社)などがある。