GitHub社が開発しているbotフレームワークHubotを使ってチャットアプリ上でチーム開発をいかに効率化していくかを解説していきます。初回は「ChatOps」の有用性とHubotの概要、セットアップ方法、OSSのチャットアプリとの連携方法について。
近年、ソフトウェア開発を取り巻く環境が急激に変化してきています。ネットワークの整備や、コミュニケーションツールの進化に伴い、リモートワークやインターネット上での協業も盛んに行われるようになってきました。チームメンバー全員の住んでいる国が違う、といったこともあるかもしれません。
しかし物理的に離れた環境で働くと、今まで対面で行っていたコミュニケーションを別の手段で代替しなければなりません。SkypeやGoogleハングアウトなどのビデオ通話、HipChatやSlackなどのチャットアプリを利用することで仕事上必要なコミュニケーションは取れるようになりますが、ソフトウェア開発に関わる状況確認は別のツールを使う必要があります。
特にオペレーションは、いつ、誰が、どのような対応をしたか把握していたいですよね。
このような課題を解決する一つのスタイルとして、「ChatOps」があります。ChatOpsでは、チャットを通じてオペレーションを行います。チャット上でオペレーションを行うことで、チャットに参加しているメンバーはどんなオペレーションを行ったのか把握できます。
また、新規参入したメンバーは、チャットのログをさかのぼれば対応を知ることができますし、チャット上で実際にオペレーションを行いながら教えることも可能です。
チャット上でのオペレーションは、bot(ボット)を介して行います。botとは人間の代わりに作業を行ってくれるプログラムのことで、定期的な処理や、特定のキーワードに応じて処理を行ってくれます。身近な例では、Twitterのbotアカウントなどが分かりやすいでしょうか。
そのbotをチャットアプリに常駐させたり、さまざまな処理を行わせたりすることを容易にするフレームワークに、「Hubot」があります。
GitHub社が開発しているbotフレームワークです。同様のbotフレームワークにはRuby製の「Lita」などがあります。
Hubotを導入することで、例えばチャット上からHubotにデプロイをさせたり、自分が担当しているissueの一覧を表示してもらったり、JenkinsなどによるCI(継続的インテグレーション)の実行結果を受け取ったりすることができるようになります。
Hubotは拡張可能な点が特徴で、HipChatやSlackなど、さまざまなチャットサービスとつなげるためのアダプターや、追加機能を提供するスクリプトが公開されています。スクリプトは、CoffeeScriptかJavaScriptで作成されており、自身でも比較的容易に作成、追加することが可能です。
ここからは、Hubotをインストールして使ってみましょう。
Hubotを動かすには、サーバー環境が必要です。インストールおよび動作確認はUbuntu Server 14.04 LTSで行っています。各環境に合わせてインストールを行ってください。
HubotのインストールにはNode.jsとNode.jsのパッケージマネージャーであるnpmが必要です。以下では、nodebrewを使ってインストールしています(※本稿執筆時点のNode.jsの最新バージョンは0.11.13です)。
$ wget git.io/nodebrew $ perl nodebrew setup $ export PATH=$HOME/.nodebrew/current/bin:$PATH $ nodebrew ls-remote $ nodebrew install-binary v0.11.13 $ nodebrew use v0.11.13
次に、Hubotをインストールします。Hubot自体はCoffeeScriptで書かれているため、CoffeeScriptもインストールしておきます。
$ npm install -g hubot coffee-script
Hubotはデータ永続化に「Redis」を利用します。必要に応じてRedisをインストールしてください。Ubuntuでのインストール手順は以下の通りです。
$ sudo add-apt-repository ppa:chris-lea/redis-server $ sudo apt-get update $ sudo apt-get install redis-server
Hubotを起動し、動作を確認してみましょう。hubotコマンドのcreateオプションでデプロイ可能なHubotのひな型を作成できるので、そちらで動作を確認します。
$ hubot -c myhubot $ cd myhubot $ ./bin/hubot
環境変数の設定や、Redisをインストールしていないと以下のようなエラーが出ますが、動作確認には問題ありませんので無視して構いません。
WARNING The HUBOT_AUTH_ADMIN environment variable not set ERROR [Error: Redis connection to localhost:6379 failed - connect ECONNREFUSED]
警告は、「HUBOT_AUTH_ADMIN」という環境変数が設定されていないため出ています。この環境変数は、ユーザーの実行権限管理の機能を提供する「auth.coffee」でadmin権限を持つユーザーを設定するのに使われます。特に権限管理を行わないのであれば、スクリプトを削除するから退避しておくといいでしょう。
エラーを解消するには、Redisをインストールするか、「hubot-scripts.json」から「"redis-brain.coffee"」を削除すればRedisを利用するスクリプトが読み込まれないのでエラーが出ないようになります。これは、「hubot-scripts.json」に記載されているスクリプトがHubot起動時に、「node_modules」にインストールされた「hubot-scripts」から読み込まれるためです。
hubot-scriptsに存在しているスクリプトであれば、hubot-scripts.jsonにスクリプト名を追記すれば自動的に読み込まれるようになります。
自分で作成したスクリプトやhubot-scriptsに入っていないスクリプトは、「external-scripts.json」に追記することで読み込ませることができます。
では、Hubotの動作を確認してみましょう。Hubotに「help」と呼び掛けると、Hubotが現在実行可能なコマンドの一覧が表示されます。
Hubot> hubot help Hubot> Events: debug - {user: <user object to send message to>} Hubot <user> doesn't have <role> role - Removes a role from a user Hubot <user> has <role> role - Assigns a role to a user Hubot <user> is a badass guitarist - assign a role to a user Hubot <user> is not a badass guitarist - remove a role from a user Hubot animate me <query> - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead. Hubot die - End Hubot process ・ ・ ・
例えば、「ping」コマンドだと「Hubot ping - Reply with pong」となっているので、Hubotに「ping」と呼び掛けると、以下のように「PONG」と返してくれます。
Hubot> hubot ping PONG
他にもパグの画像を表示してくれる「pug me」といった面白いコマンドもあるので、気になるコマンドは実行してみるとよいでしょう。本稿でも最後に、画像でイメージを表示します。
ここまではコマンドライン上でHubotと対話をしてきました。次ページではチャットサービス上でHubotと対話してみましょう。
Copyright © ITmedia, Inc. All Rights Reserved.