11月12日金曜日、Hudsonの生みの親である筆者の訪日にあわせて、法政大学情報科学部、Seasarファウンデーションの後援で、Hudson勉強会(またの名を「日本ビルド職人の集い」)が開催されました。200人以上集まる大きなイベントとなり、様々な発表やLTが行われました。その模様を報告します。
「Hudson初心者向けデモ」
まず、cactusmanさんによる、Hudsonをさわった事のない人向けへの紹介とデモが行われました。「java -jar hudson.war」で起動できるのが大変便利だとし、Hudsonからはスケジューリング、チェックアウト、ビルドの実行、結果のまとめ、ビルドの通知などができると紹介されました。
デモでは、Subversionリポジトリ上に格納されたMaven2プロジェクトをビルドする様子を紹介し、コミット後すぐにビルドが始まる様子や、新しいテストを追加してその様子がHudson上のグラフに反映されるのを見ることができました。
「Hudsonプロジェクトの現状と将来」
つぎに、CloudBees所属の筆者がHudsonプロジェクトの現在と将来の計画などに関する発表を行いました。プロジェクトの沿革を簡単に紹介した後で、幾つかのサーベイによるCIサーバのマーケットシェアを紹介し、Hudsonが一人勝ち状態であるとしました。
これに続いて、日本のHudsonコミュニティを紹介し、日本Hudsonユーザー会の発足を発表しました。会長の丸山先生からは「日本ではあちこちでHudsonが使われているにも関わらずなかなか情報が出てこないので、ユーザー会にひっぱり出して情報交換を深めたい」という挨拶がありました。
最後に、Hudsonの将来の計画として、プラグインがよってたつ基盤となるコアの拡張と、計算機を湯水のように豪勢に使うための様々な工夫、そしてワークフローなどのより大型・複雑な用途に耐えうる機能を作り込んでいきたい、という発表をしました。
「Hudson活用事例」
株式会社シャノンのQAエンジニア、西野伸作さんから、シャノンでのHudsonの活用事例についての発表です。シャノンでは1サイクルが毎月新しいスプリントが始まり、それぞれが6週間というスクラム開発をしているので「自動化テストの効率的運用が必須」であり、そのためにここ数ヶ月の間にHudsonを使い始めたそうです。
Hudsonを使う工夫の一つとして、まず、ダッシュボード機能を使って、4人のQAエンジニアが、それぞれ自分の担当範囲の中で失敗したジョブだけを簡単に確認できるように工夫したと紹介されました。また、失敗したテストの繰り返し実行を容易にするために、5,000以上のテストケースを依存関係にしたがって木構造に構成し、任意のテスト(とそれに依存するテスト)だけを再実行できるようにしたとのことです。この手法は、テストの並列化にも貢献する大変面白いアイディアでした。
また、開発言語としてはPerlを使っており、Javaでない言語での事例としても面白いものでした。
「Ruby on Rails on Hudsonの活用事例」
大手SI企業で研究開発を担当しているという牧俊男さんからは、Ruby on Rails開発におけるHudsonの有用性に関する発表がありました。
牧さんによると、RoRアプリケーションは実行環境の微妙な差による動作不良の問題が多く、これを解決するためにクリーンな環境でテストするのが重要であるそうです。このためにHudsonが役に立つとのことでした。また、テストをサーバで走らせることによる省力化、可視化によるテストコードを書くモチベーションの向上なども役に立ったとのことです。また、具体的な運用例の紹介として、rpmをベースにしたインストール・テストの仕組みを発表し、使っているプラグインの設定等が解説されました。
最後に、マシンのスペックが貧弱なことに由来する苦悩が多かったというポイントと、最初は社内で抵抗があったけれどもお膳立てをしたら使ってくれるようになった、というアドバイスが印象的でした。
「Hudson x Redmine」
Redmine用のプラグインを書いているという飯田さんからは、HudsonとRedmineの連携に関する発表がありました。飯田さんはソースコードリポジトリ、バグトラッキングシステム、CIサーバは3種の神器であるとし、BTSとCIの連携を良くしたい、と訴えました。
こののち、HudsonにインストールするRedmine連携のためのプラグインの紹介と、RedmineにインストールするHudson連携のためのプラグインの紹介があり、Hudsonのビルド失敗通知メールをRedmineにフィードしてチケットを自動で作成するといった技法が発表されました。
エルシャダイで学ぶ、大丈夫な「ビルド通知」
Nulab所属で、今回の勉強会の運営の中心的存在であるikikkoさんからは、開発者は受け取る自動メールが多すぎるとし、メール中心のビルド結果通知ではなく信号機などの物理的なライトで結果を通知するextreme feedback device(XFD)を活用しよう、という発表がありました。
特に、XFDの中から、うさぎ型ロボットであるNabaztagの実物を交えた紹介がありました。残念ながらネットワークの関係で動いている様子を見ることはできませんでしたが、その後購入を試みた人もいたようで、興味を持った方は多かったようです。
Hudsonを用いて適当に?テストする方法の紹介
続いて、湯川さんから、テストのメンテナンスにかかるオーバーヘッドを減らすために、「偽陽性」の「テストに失敗したけどソフトウェアのバグではない」という自体を極力さけるため、assertionを含まない「いい加減な」テストをするという手法が提案されました。
湯川さんによると、このようなテスト手法を選択的に用いることで、仕様変更の影響を受けにくく賞味期限の長いテストができ、また切り分けコストも少なく、テストをスキップしたくなる開発者の誘惑をさけることができるそうです。
モテるHudsonエンジニア
大阪からはるばる来て今日は帰らない、という奥清隆さんは「Hudsonでモテるには?」というテーマで今までのHudsonに関わる活動を面白おかしく紹介されました。
まずは、AJAXを使ってHudsonのUI上にターミナル風の画面を出してしまうというHudson terminal pluginの紹介がありました。次に、GCrawlerプラグインという、Google Code上のGrailsプロジェクトを探して自動でHudsonジョブを追加するというプラグインが紹介されました。最後に、画面上の「ビルド」という文字を「合コン」に変換するという技が紹介され、スクリーンショットの面白さに会場中が沸きました。
日本語化のすすめ
akihiroxさんからは、Hudson本体の日本語化は進んでいるものの、プラグインの日本語化率は10%程度であるとし、プラグインの翻訳の手順が具体的に紹介されました。また、翻訳作業に便利なツールとして、次作の対訳コーパスを作成するスクリプトが紹介されました。
他の発表の中でも、プラグインを紹介する部分では英語のスクリーンショットが目立っていたので、これを機にぜひ翻訳が進むとよいと思います。
HudsonでTDD
最後に飛び入りでLTに参加したかぬさんは、TracLightningにHudsonが含まれているという紹介と、Hudsonの萌えキャラのプラグイン開発の紹介を通じて、他の人が作ったものの上に新たな何かを積み上げていくのが大事なんだという「他人のふんどしで開発=TDD」という発表がありました。
実際、OSSプロジェクトへの貢献は、一から独自に何かを開発するより既存のものに何かを付け足すという方が多いものです。このようなアプローチがもっとポジティブに認知されるのは大変良いことだと思いました。
最後に
勉強会はこれでお開きとなり、その後100名弱が懇親会に移動し、普段はお互いに会う機会の少ないビルド職人たちのネットワーキングが行われました。このようにして、今後も横の連携が進んで情報交換が活発になると、Hudsonを使うノウハウが溜まってくると思います。
Hudsonユーザー会では今後も勉強会を開いていこうと思っています。参加したり発表したりするのに興味のある方は、ぜひ筆者(kohsuke.kawaguchi@cloudbees.com)宛か、http://build-shokunin.org/からメーリングリストに参加して、その旨知らせてください。