XFD を自作した話

【 この記事は、8208人に読まれています】

経緯


TFS でも、Atlassian ツール群でも、企画から計画、開発、ビルド、デプロイを行うデモは散々行ってきました。また、これらは、ツールの進化とプラクティスの浸透によってあらゆる現場で手に届くようになってきました。

そこで、次のステップとしてやっておきたいのが、XFD です。ツールはしょせんツールなので、ツールの情報を見るモチベーションがないとその効果は発揮できません。それだけの価値とモチベーションを持たせるツール環境を構築することができますが、意識しなくてもわかるという体験は、やはり現場にとっては大切です。それらは、たとえば、壁やホワイトボードでの付箋紙によるカンバンやタスクボードであったりします。

同じように、継続的インテグレーションで、ビルドやテストが失敗したら、それを現場ですぐに知るすべがあったら、その時に開発を中断して休憩しているチームでも、Twitter や Facebook、卓球に勤しんでいるチームでも事態を知ることができます。

ということで、デモするなら、ここまでやっておきたいとは数年前から思っていて一時期実際にやってみたりもしていました。ただ最近はめっきりやっていなかったので、自作 XFD を作成しようと思ったのが経緯です。これをまずは、デブサミ 2015 で行うと思い、機材を調達するところからやってみたわけです。

XFD


XFD とは eXtreme Feedback Device のことです。今回は、自作ということで、いろいろ調達するところからやりましたが、基本的には以下が必要となります。

  • 状態をウォッチし、デバイスを制御するマシン
    簡易サーバーや、Raspberry Pi, arduino, edison などです。今回は、デモ環境なので、デモで使う MacBook Pro を使いました。
  • デバイスの電源を制御するリレー
    デバイスの電源を ON/OFF 制御するので、そのためのリレーです。
  • デバイス
    パトランプや扇風機、オーディオや、ミサイルなどですw

調達したもの


今回調達したのは以下です。

パトランプ [デバイス]


USB Traffic Prompter を輸入しましたw 残念ながら、Red は完売のため、Blue を調達しました。


今回、こだわったのは着脱自在です。したがって、USB 接続できるものを最優先に考えました。はんだ付けなどを一切行わない方針で。

リレー


USB バスパワーで制御できるリレーを探しました。もちろん、安く調達する方法はありますが、今回は、MacBook Pro から容易に制御できるものを調達しました。

エレファインの 4ch USB リレー USB バスパワー駆動


USB 接続するとシリアルポートとして認識されるので、ファイルの書き込み/読み込みで 4ch あるリレーを制御できてしまいます。とても便利です。実際には4つも制御しませんが、現時点では2つのデバイスを制御しています。あと2つあるので、また面白い用途を見つけて、変わったデバイスをつなげてみたいと思いますw

その他配線などもろもろ


配線ケーブルや、USB ホスト(メス)の口などは、安定の秋葉原 秋月電子さんを中心にその付近ですべて安価に調達できました。

image
配線した結果が以下のような感じです。

image

実装


USB リレーの制御ロジック


USB リレーの制御は、先述の通り、シリアル通信するだけですので、Mac OS X の場合は、/dev/tty.usbmodem1420 または、/dev/tty.usbmodem1421 に対して、書き込みするだけです。

たとえば、ch 0 に通電したければ、 /dev/tty.usbmodem1421 0 ‘on’ です。通電をやめるには /dev/tty.usbmodem1421 0 ‘off’ です。

エレファインの 4ch USB リレー USB バスパワー駆動 には、各種 OS での制御のサンプルコードも用意されている(ダウンロードできる)ので、それを利用または、参考にすることができます。今回は、Python で制御したかったので、Windows 用と書いてあったのですが、Python のサンプルコードをダウンロードしてそのまま使用しました(要 pyserial モジュール)。

各種ツールからの情報収集ロジック


先述の通り、制御ロジックが手に入れば、あとは、JIRA や Bamboo, Jenkins といったツールから情報を収集するロジックがあれば、もらった XML や JSON をパースして条件にしたがって、リレーを ON/OFF すればいいだけです。

Bamboo による CI の結果の収集

Bamboo では、ビルド結果の Feed を提供していますので、それをそのまま使うことができます。

スクリーンショット 2015-03-26 1.35.48
この情報をポーリングして取得し、解析すればいいわけです。Python には、pycurl モジュールがありますので、feed から結果を収集するのは容易です。

あとは、xml をパースして、”state” が “Failed” かどうかを判別します。Failed だったら、先ほどの USB リレーで該当 CH を on にして通電させれば、パトランプが回り始めるということです。

JIRA によるタスクの状態の収集

私のデモでは、CI の失敗だけではなく、よりよい現場体験として、JIRA でタスクをとったら(やる!と宣言したら)、それに反応して、USB 扇風機が回り、タスクを終えたら USB 扇風機が止まるというのを行っています。これは扇風機がベターかということではなく、開発者のモチベーションを上げる仕掛けとして考えるべきですが、デモなので、回ったことがわかることを優先しました。本当はお気に入りの音楽が鳴るとか、自席の「話しかけるな」ランプが点灯するとかがよいかもしれませんw

こちらは、JIRA の提供している REST API から情報を収集できます。

http://<JIRA Server>/rest/api/2/search?jql&fields=status など、JQL を使って検索し、そのステータスを得ることができますので、それを利用します。結果は、JSON 形式で返ってくるのでそれをパースします。

自分が担当者になっていて、かつ、ステータスが「進行中」なら、デバイスを通電させ、ステータスがそれ以外になったらデバイスをオフにするという制御をしています。

コードについては、今、可読性のあまりよろしくない状態なので、ご要望が多ければ公開する方向で検討しますw

まとめ


個人的な感覚では、あまりはまるところもなく、なんとか自作することができました。本当は、 Raspberry Pi, arduino, edison と 4ch USB リレーをつなぐで行きたいところですが、それはおいおいやりたいと思います。

そんなパトランプを回したり、いろいろやってみるデモは、以下のイベントでも実施予定です。また、社内勉強会や、コミュニティ勉強会などでの講演・デモも無料で行います(日本全国各地が対象)ので、お気軽にお声がけください。

【 この記事は、8208人に読まれています】

Posted in ツール and tagged , , , , , , .

長沢智治

アトラシアンのシニア エバンジェリスト。

ALM, アジャイルなどの開発プラットフォームの訴求を中心に活動している。認定スクラムマスター、ASTER テストツールWG、『アジャイルソフトウェアエンジニアリング』『C# 実践開発手法』の監訳、Agile Ultimate Stories Iteration 1,2,3,4,5 など寄稿、共同執筆多数。

コメントを残す