コードのコミットごとに自動ビルドを走らせるのはもはや常識ですが、ビルド結果はメールで流すだけではなくて緑や赤のランブで一目でわかるようにしておくことが大事です。今日は Trema で実際に動かしている仕組みを説明しましょう。
ランプを使おう
ランプには次の長所があり、どちらもソースコードの改善に役立ちます。
- 結果の視認性
- 心理的な効果
まず、メールを開くまでもなくビルド結果を一目で確認できるのでとても楽になります。開発チームの真ん中にランプを置いておけば自然とビルド結果を共有できます。
また、ランプはいろんな人の目にさらされるので「テキトーなコードをコミットしちゃいけない」「失敗を放置しちゃいけない」という心理的効果がでかいです。実際に、Trema とはまったく関係のない別の部署の人に「ランプが赤くなってるよ」と話しかけられることもしょっちゅうで、「常に緑をキープしよう」という心理効果は絶大です。
それでは Trema でやっている方法についてです。
ランプを買おう
何はともあれ始めるにはランプが必要です。ビルド結果をランプで表現するためには、ビルドマシンから rsh などでランプを制御できる必要があります。
Trema ではランプには patlite 社のコレを使っています。rsh に対応しているので要件を満たしていますが、残念ながら生産中止のようです。
後継機としてこういうのもあるみたいです。スペックを見ると rsh に対応してるようなのでこれでも大丈夫でしょう。
自動テスト界隈ではこういうデバイスを XFD (eXtreme Feedback Devices) と呼ぶらしく、XFD で検索するといろんなランプが出てきます。電子工作が得意な人は作っちゃうのも手かもしれません。
ランプのセットアップ
次に、ランプを自動ビルドとつなぎます。Trema では ccrb という自動ビルドツールを使っていて、ccrb のプラグインからランプを制御しています。プラグインのコードは次のような感じ。ビルドの状態に応じて green/yellow/red というランプを光らせるプライベートメソッドを呼んでるだけです。めちゃくちゃ簡単ですね。
class Patlite def initialize project # do nothing here. end def build_started build yellow end def build_finished build if build.failed? red else green end end def build_fixed build, previous_build green end private def red system "rsh patlite -l username alert 100000" end def yellow system "rsh patlite -l username alert 020000" end def green system "rsh patlite -l username alert 001000" end end Project.plugin :patlite
まとめ
自動ビルドするときは、ランプのような物理的デバイスを組み合わせると効果絶大です。