新井 正貴

2014.04.17

HubotとHipChatと時々Perfume

お久しぶりです。Perfumeエンジニアの新井です。

前回のPerfumeの3Dデータに関する記事が周りからのリアクションがよかったため、これからはPerfumeのさらなる社内広報も兼ねてこのブログで色々紹介していきたいと思います。

前回の記事のときには、ライブBlu-ray&DVD『Perfume 4th Tour in DOME 「LEVEL3」』の発売カウントダウンしていたPerfumeのグローバルサイトでは、先週のリリースを記念して、新しいコンテンツ「Dome Tour Emulator」が現在公開されています。

「Sleeping Beauty」の時に行なわれた、ライブ当日に撮影した参加者の3Dスキャンを映し出すというパフォーマンスがサイト上で追体験できちゃいます。
このページでは、ライブ当日にスキャンされた参加者の3Dデータがアップされているだけでなく、TwitterやInstagramの写真を代わりに使用できるので、ライブに参加していない人でも楽しめます。とりあえず、めちゃくちゃかっこいいので興味がある方は一度見てみてくださいm(_ _)m

ということで、本題に入ります。
今回は、Github社製のBotフレームワーク『Hubot』とAtlassian社製のチャットサービス『HipChat』を使って、色々遊んでみたいと思います。

Hubotってなに?

Githubが作ってるOSSのBotフレームワークで、Github社で運用の中心的なツールとして使われているらしいです。(Hubot君かわいい…)
http://hubot.github.com
th_hubot
HipChat, Skype, IRCなどのチャットツールにHubotをログインさせ、チャットで話しかけることで、デプロイやらビルドといった共通の運用タスクを自動化してくれるといったことが可能となります。
こんな感じの開発運用スタイルを「ChatOps」というらしいです。

HipChatってなに?

『HipChatは企業やチームのためのホスティング型プライベートチャットサービスのことで、継続的に使えるチャットルーム、チャット履歴の保存、外部サービスとの連携に便利なAPI、などの特徴を持ちます。』とあります。
http://blog.qnyp.com/2013/05/27/hipchat-driven-development/

使い勝手も良く、GitHubやJenkinsなどと連携させて通知を飛ばすこともできたりと便利なツールです。
5ユーザーまで無料で使えるので、社内でも少人数チームでは導入しているとこもあるんですが、ぜひとも全社的に導入したいなと思ってます。。 |ω・`)チラ
(※ 5ユーザーを超えると、$2/ユーザー/月の料金となります)

features_private

https://www.atlassian.com/ja/software/hipchat/overview

色々インストールやら準備をしてみる

データ永続化のためのredisをインストール

Hubot(coffee-scriptも合わせて)インストール

HipChat用のアダプタをインストール

HipChatでアカウントとルームを作成

ここで以下の4つのデータを確認しておきます。
・ルームのOwnerアカウントのAPIアクセストークン
・HubotアカウントのJabber ID
・Hubotアカウントのパスワード
・ルームの名前

起動スクリプトを作成

こんな感じのシェルスクリプトを用意しておけば、コマンド一発でHubot君が起動してくれます。

実際に動かしてみる

これで準備は整ったんで、実際にHubotを動かしてみましょう。

こんなコマンドでredisを走らせて、さっき作成したシェルスクリプトを叩くとHubot君がjoined the roomしてくれます。
部屋に入ってきてくれたら、Hubot君にデフォルトでインストールされているコマンドを実行させてみましょう。

ping

Hubot ping – Reply with pong
pingと話しかけたら、pongと返すだけのコマンドです。簡単ですね。。

pug me

Hubot pug me – Receive a pug
パグの画像を返してくれます。癒されますね。。

map me

Hubot map me – Returns a map view of the area returned by query.
地図の検索結果を返してくれます。賢いですね。。

animate me

Hubot animate me – The same thing as image me, except adds a few parameters to try to return an animated GIF instead.
キーワードで検索したgif画像を返してくれます。かっこいいですね。。

コマンドを自作してみる

さっきのpingなどのコマンド実行のときに読み込まれているスクリプトはhoge/scripts配下にあります。
このスクリプトはCoffeeScriptで書かれているのですが、試しにping.coffeeファイルを見てみます。

ここにある’respond’とは、Hubotに直接メンションした時のみ(@Hubotみたいに)、コマンドを実行させたい場合に記述します。
チャット上に出現した特定のワードに反応して、コマンドを実行させたい場合は’hear’を使用します。

‘respond’または’hear’のあとに記述されている’/PING$/i’などは、正規表現となってます。
こんな感じでHubotに反応させるワードを指定した後に、実行させたいコマンドを書いてあげれば大丈夫です。

それでは、簡単なコマンドを作ってみます。

このスクリプトでは’hear’を使っているので、@Hubotと呼びかけなくてもチャットでつぶやくと勝手に反応してくれます。
またredisでチャットのデータを保存してくれているので、それを試してみます。
上記のように、robot.brain.data以下にデータを登録していて、robot.brain.saveをすると永続化されます。実行してみると、きちんとdisco_countがカウントされて保持されているのがわかりますね。

HipChatのiphoneアプリで見ると、こんな感じになります。

th_photo1 (1)
th_photo2

Githubに公開されているスクリプトを覗いてみる

Githubでたくさん便利なスクリプトが公開されているので、ぜひ参考にしてみてください。
ここで公開されているtwitter.coffeeというスクリプトが楽しそうなので、実行してみましょう。

このコマンドは、
hubot twitter ‘twitter username’ – Show last tweet from ‘twitter username’
とあるので、指定したtwitterアカウントの最新のtweetを返してくれるみたいです。
(※ こういったコマンドの使い方は@Hubot helpで教えてくれます。)

それではtwitterAPIのアクセストークンやらを準備できたら、アライドのあいおーえす あぷりけーしょん えんじにあ @happy_ryoのツイートをちょっと覗いてみます。。

th_photo1 (3)

・・・・・・・・・・∑(; ̄□ ̄

まとめ

今回はHubotで遊んでみましたが、実用的なことはなにもなかったですね。。

上のほうでも書きましたが、Jenkinsとかと連携させたり、ビルドやデプロイなどをchatから行えるようにするのが、Hubotのかっこいい使用方法です。
この記事でHubotやらChatOps的なものに興味を持ったら、ぜひやってみてください。

さて4月になって、うちにも新卒エンジニアが4人入社しました。
もうしばらくしたら、彼らもこのブログに登場するかなと思います。
楽しみに待っていてくださいm(_ _)m