新刊ピックアップ

千里の道も一歩から 継続的インテグレーションから始める継続的デリバリーへの道~Jenkinsを添えて

この記事を読むのに必要な時間:およそ 2.5 分

継続的インテグレーションの歴史

継続的インテグレーションの歴史は長く,体系化される以前も,人間が働いていない夜間などにインテグレーションを自動的に行なっていました。これによってできたソフトウェアをナイトリービルドやデイリービルドと呼んでいました。オープンソースソフトウェアに馴染みのある方は,目にしたことや,実際にナイトリービルドを試してみたこともあるのではないでしょうか。

継続的インテグレーションが開発手法として確立されたのは1999年頃です。アジャイルソフトウェア開発の方法論の一つである「エクストリーム・プログラミング(XP⁠⁠」の実践手法(プラクティス)の一つとして確立されました。エクストリーム・プログラミングでは,刻一刻と変化するビジネス環境やニーズに柔軟に対応するために,継続的インテグレーションを実施し,常に動作するソフトウェアを確認しながら開発するスタイルを取っています。他にも,Test Driven Development(TDD)やペアプログラミングなどでも実践されています。

加えて,近年継続的インテグレーションを実践しやすくなった土壌として,クラウドコンピューティングを代表とするように,計算機のリソースがほぼ無限大に使えるようになった点が挙げられます。短いサイクルでインテグレーションをするためには,大量の計算機が必要となり,結果を蓄積するためにも大量のディスクが必要です。近年は大幅に計算機のリソースが安価になり,継続的インテグレーションが普及したきっかけになったといえるでしょう。

これまでに説明したとおり,継続的インテグレーションのメリットはアジャイル開発にとどまらないため,アジャイル開発やエクストリーム・プログラミングではない開発スタイルでも実践されるようになりました。

継続的デリバリーへの道

継続的インテグレーションでカイゼンを続けると商用(プロダクション)環境にも,自動で継続的にデプロイできるようになります。一日に何度もデプロイをして,ユーザの行動やコンバーション,フィードバックを即座にソフトウェアに反映する開発スタイルが確立されてきました。これを継続的デリバリーといいます。例えば,FacebookやTwitterなどのWebサービスが予告なしにUIを変更していることを経験したことがある人も多いでしょう。

継続的インテグレーションを継続的デリバリーにつなげていくには,⁠どのようにサービスを停止せずにリリースをするか?」⁠ユーザの声をどのように集めて反映していくか?」といった更なる工夫が必要になってきます。

IT業界は栄枯盛衰,いち早く機能をリリースし,ユーザの声をいち早く取り入れ,サービスやソフトウェアをカイゼンし続けなければ,あっという間に廃れてしまうため,多くの企業にとって,継続的デリバリーの重要度はましています。

継続的インテグレーションを支えるツール

継続的インテグレーションを実践するのに欠かせないのがツールの存在です。

コンパイルではビルドツールがよく用いられます。古くはmakeがビルドツールとして有名であり,JavaではMavenやGradleがよく使われています。最近のビルドツールはコンパイルだけではなく,テストのトリガーとして使えたり,レポートを出力できたりと,高機能なものが多いです。加えて,ビルドした成果物はバイナリリポジトリに格納し,配布することがよくあります。バイナリリポジトリではArtifactoryやNexusが有名です。一般的なWebDavサーバも使われます。

ユニットテストではJUnitに代表されるxUnitがよく使われます。Pythonにはunittestというユニットテストライブラリが含まれています。

画面結合テストでは,Seleniumというオープンソースの画面テスト自動化ツールがよく用いられます。Seleniumは画面の遷移や画面要素からの値の取り出しなどをサポートしています。

デプロイでは,最初にプロビジョニングというハードウエアやOSのセットアップが必要です。最近ではクラウドコンピューティングを使うことが多く,CLIやSDKからプログラミングしてインフラストラクチャをセットアップします。また,OSやミドルウェアの設定はChefやAnsibleといったオーケストレーションツールを使うことが多いでしょう。最終的なソフトウェアのバイナリはFabricやCapistranoといったデプロイツールを使って,一気に配布します。

これらの一連の作業はすべてスクリプト化し,Git(GitHub)やSubversionといったバージョン管理ツールでバージョン管理をするのが鉄則です。

これらのツールを組み合わせて実行し,結果を通知したり,保存したりするのが継続的インテグレーションツールです。今日世界のデファクトスタンダードといえるのがJenkinsというオープンソースの継続的インテグレーションサーバです。

継続的インテグレーションツールJenkins

Jenkinsはバージョン管理ツールと連携し,コンパイルやテストなどのインテグレーションを実施して結果を保存し,開発者に通知します図2⁠。

図2 継続的インテグレーションの中心にJenkinsがある

図2 継続的インテグレーションの中心にJenkinsがある

Jenkinsは,多様な言語への対応やセットアップの手軽さ,Webブラウザだけで操作できる操作性,プラグインアーキテクチャによる自由度の高さ,オープンソースであること,ユーザコミュニティなど,たくさんのメリットがあります。

継続的インテグレーションを始めるのに最適な一冊

Jenkinsはその自由度の高さゆえ,何から始めて良いのかわからないという声をよく聞きます。そのようなこれからJenkinsを使った継続的インテグレーションを始めたい人に,約4年前に出版した書籍が『Jenkins実践入門』です。その改訂版である改訂新版Jenkins実践入門――ビルド・テスト・デプロイを自動化する技術をこの度刊行しました。もちろん,この4年間のJenkinsやJenkinsを取り巻くツールの変化に対応しています。

これからJenkinsに取り組む方にはもちろんのこと,分散ビルドやビルドパイプライン,ビルドプロモーションなどの継続的デリバリーに向けたより高度なトピックも紹介しています。また,Infrastructure as CodeやImmutable Infrastructureなどもコラムで紹介しています。

Jenkinsという名前は,プロジェクトに優秀な執事がいてほしいという思いからつけられています。皆さんのプロジェクトにも,ぜひ『改訂新版Jenkins実践入門』を片手に,新しい優秀なプロジェクトメンバーを迎えてください。

この記事で使われているJenkinsのロゴは,Jenkins projectに帰属し,Creative Commons Attribution-ShareAlike 3.0の元に再利用が許諾されています。

著者プロフィール

佐藤聖規(さとうまさのり)

クラウドやアーキテクチャ,DevOpsなどの コンサルティングに従事。インフラ,Jenkinsやその周辺ツールが得意。著書は多数,織田翔名義で『15時間でわかるGit集中講座』,『Java逆引きレシピ』。

Twitter:@lino_s