アンケートご協力のお願いgihyo.jpでは,2010年度に向けて豪華プレゼントが当たる読者属性アンケートを実施しております。ご協力ください。

gihyo.jp » DEVELOPER STAGE » 特集 » Hudsonを使ったアジャイルな開発入門 » 第3回 Hudsonによるチーム間の連携

Hudsonを使ったアジャイルな開発入門

第3回 Hudsonによるチーム間の連携

この連載では,オープンソースの継続的インテグレーション(CI)サーバであるHudsonを利用した,ソフトウェア開発の生産性向上について解説しています。前回の記事では,Hudson上に継続的ビルドを設定して,ソースコードに加えられた変更をいち早くビルドし,結果を開発者にフィードバックする方法に付いて見てきました。今回は,視野を少し広げて,規模の大きいソフトウェアプロジェクトの開発で,Hudsonを更に有効活用する方法についてみていきます。

テストを有効活用する

実行したテストの結果をHudson上に集計する方法については前回述べました。ビルドと同時にテストもやってしまうという手法は,小さなプロジェクトやライブラリ,もしくはテストの数も少ない場合にはとても有効です。ですが,プロジェクトが大きくなりテストの数が増えるにつれ,テストの実行時間が長くなり,この方法では迅速にフィードバックを得ることが難しくなります。プログラムの変更を加える際には,開発者は暗黙の内に,変更によって得られるメリットと,バグを混入させて混乱を引き起こす可能性とを天秤にかけています。大規模なテストを短時間で実行できれば,小さなメリットしか得られない変更でも着実に拾っていくことができます(リファクタリングなどは特にこのカテゴリに属する変更です)。これが,中長期的にソフトウェアの品質の確保につながるのです。このため,大規模なソフトウェア開発においてはテストの実行時間を極力短くすることは非常に戦略的な重要性を持っています。テスト自体の書き方・実行の仕方で工夫することが第一ですが,その議論は本稿の範疇を外れるので,ここではHudsonをどのように活用するかを見てみます。

まず第一のステップは,ビルドとテストをHudson上で2つのプロジェクトに分離することです。Hudsonは異なるプロジェクトのビルドは同時並行で行ってくれますから,これによってテストとビルドを同時進行させることが可能になります。この様子はちょうどCPUが命令をパイプライン処理するのに似ています。変更が加えられてからそのテストが完了するまでの時間は同じなのですが,同時に2つを走らせる事でソースコードに変更が加えられてからビルドが開始されるまでの待ち時間を大きくカットできるわけです。

画像

このようにセットアップするためには,ビルド側からテスト側へテストするべきバイナリを送る必要があります。これには永続リンクが大変有効です。すなわち,流れは次の様になります。

  1. ビルド側が完了時にバイナリを保管
    これには「ビルド後の処理」>「成果物を保存」を使います。
  2. ビルドの完了後テストを自動的に開始
    これには「ビルド後の処理」>「他のプロジェクトのビルド」を使います。
  3. 最新のビルド成果物をHudsonから取得
    これにはwgetやAntの<get>タスクなどを使います。Hudsonの「最新成功ビルドの成果物」のリンクは永続リンクになっているので,これを利用しましょう。
  4. テストを実行

上流・下流ビルド

上記のように,複数のプロジェクトの間に依存関係を設定してあるプロジェクトのビルドが完了した時に他のプロジェクトをビルドさせることができます。このような関係にあるプロジェクトを上流プロジェクト・下流プロジェクト,または上流ビルド・下流ビルドと呼びます。テストだけに限らず,Hudson上により多くの作業を移すにつれ,1つの巨大ジョブで全ての作業をやろうとすると1サイクルの実行時間が長くなりすぎてCIのメリットが薄れてきます。このような場合に,作業をいくつかのジョブに分解しそれらの間に依存関係を適切に設定することで,この問題を解決できます。

一方,複雑な依存関係を設定する場合には幾つか必要な注意もあります。まず,上流ビルドが完了した時に実際に行われている事は,下流プロジェクトに対する新規ビルドのリクエストだということです(これはちょうど「ビルド実行」リンクをクリックするのと同じです)。この時,下流のプロジェクトのビルドが既に待ち行列に入っていれば新しいリクエストは単にこれに吸収されます。なので,一般的には(特に下流ビルドが上流ビルドより長い時間を要する場合には),上流ビルドと下流ビルドは一対一には対応しないことがあります。また,A→B,B→D,A→C,C→Dといったようなダイヤモンド依存関係がある時も,Bと Cの変更はDを個別にリクエストするので,従ってAのビルドが最終的には2つのDのビルドを生じる,というような事があります。

こういった問題を解決してより賢い依存関係を処理するという議論は,devリストで頻繁に行われていますが,残念ながら現時点では特に具体的な案はありません。

著者プロフィール

川口耕介(かわぐちこうすけ)

Sun Microsystems, Inc.のシニアスタッフエンジニア。主としてXMLとのそのスキーマ言語関係の仕事をし,JAXB, JAXP, JAX-WSなどの仕様策定・実装に携わった。仕事の他にも,主にjava.netに多数の趣味のプロジェクトをホストしている。Hudsonは趣味のプロジェクトとして開始したが,今では本業の一部。米国カリフォルニア州在住。

URLhttp://www.kohsuke.org/

コメント

コメントの記入

パスサポ

多数の情報処理技術者試験対策書籍の発行実績を誇る技術評論社がお届けする,資格試験合格サイト「めざせ! 情報処理試験 パスサポ」が開設されました。

ピックアップ

サクセスストーリーに続く,快適サーバー運用管理のヒント!

データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた技術情報や心構え,その魅力について多角的に紹介。

テストエンジニア ステーション

いま,ITに関わるあらゆる開発業務で注目されつつあるテスト系エンジニアをターゲットにしたコンテンツサイトを展開します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

読むウェブ ~本とインタラクション

ディスプレイで読む活字とそのインタラクション(interaction:相互作用)について,最新Webを紹介しながら読み解いていく。

いま,見ておきたいウェブサイト

この連載では,国内外の最新のウェブサイトを隔週更新で取り上げ,これら最新サイトの特徴や素晴らしい部分を,さまざまな角度から解説していきます。

Windows phoneアプリケーション開発入門

Windows Marcketplace for Mobileがサービス開始され,作成したアプリケーションを個人でも世界をターゲットに公開できる環境が整ってきました。これを機にWindows phoneアプリケーションの開発をしてみませんか?

ここは知っておくべき!Windows Server 2008技術TIPS

5年ぶりのサーバOSとなったWindows Server 2008が出荷されて早2年。2009年にはR2が出荷され,再び注目を集めています。発売前から実施したトレーニングによって感じた,インフラエンジニアの方々に知っておいていただきたい機能を中心にご紹介します。

キーパーソンが見るWeb業界

本連載はWeb Site Expert/gihyo.jpとの連動企画です。阿部淳也, 長谷川敦士, 森田雄のお三方による,Web業界をテーマにした座談会です。

きたみりゅうじの聞かせて珍プレー

ソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。みなさんからの投稿もお待ちしてます!

ActionScript 3.0で始めるオブジェクト指向スクリプティング

野中文雄氏が,簡単なスクリプトは書いたことがあるという初級者を対象に,ActionScript 3.0の基本からクラス定義までを解説します。

まだ間に合う「ITパスポート」受験対策 原山先生の短期合格塾

この連載では,4月18日のITパスポート試験の受験に向けて,短い期間で効率良く受験対策を行う方法や,確実に得点するための裏ワザなどを伝授していきます。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス