Slackでhubot 2015-10-18

こんにちは、ケバブ人です。

 

最近Slackというチャットツールを社内で試験導入してみました。
もともと社内では複数のチャットツールが入り乱れ、「あの時の発言ログはどこだっけ・・・?」ということが度々あり。
メール+何か1つに統一したいなぁという気持ちから導入を進めましたが、結果としてはなかなか良さそうです。

 

メリット

  • デザインやUIが良い
  • Windows/iOS/Android/ブラウザの各クライアントのUIが大体同じ
  • ログの検索性が高い
  • 基本的に関係者としかやりとりができないクローズドなチャット
  • 細かい要望はWebAPIを使っての外部ツール対応が可能
  • 色々なサービスと連携していて使い勝手が良い

デメリット

  • 無料だとログ保存件数に制限がある
  • Windowsクライアントの表示が重い
  • 通話機能が無い
  • WebAPIの情報がやや少ない

 

検索性能が高いのと関係者とのやりとりしかできないのが特に良いですね。
過去の発言の検索結果一覧を出して閲覧するという際のIFがとても○。
また、「プライベートのチャットアカウントで業務内容を発言してしまう」
を未然に防げるのが○。

 

ただ、もともとの動機の「ログの統一」という意味では若干難儀ですね。
無料アカウントだとログ件数に上限があるので、どこかに保存しておかないと不安です。
エクスポート機能があるのですが閲覧には適していない形式ですし、手動でやるしか方法がなく、毎回全件エクスポートされるので重複も発生します。

 

幸い、WebAPIではエクスポート機能相当の情報を範囲指定して取得できそうなので、1日1回全チャンネルの発言内容を特定メールアドレスに通知するとかで対応できそう。
まぁ10,000件以前のを検索する機会は滅多にないと思われるため、いざという時用という扱いで妥協します。有料にしたら問題ないわけだし。

 

さて、以降は
> ・細かい要望はWebAPIを使っての外部ツール対応が可能
についてです。

 

Slackはhubotというbotフレームワークに対応していて、
hubotはちょっとしたスクリプトを書くだけでbotを作ることができます。
内部ではSlackのWebAPIを呼んでいます。
基本は「特定の発言を拾って反応する」なんですが

 

例えば

  • 指定された地区の天気を返す
  • gitから最新ソースコードを取得してビルド&デプロイする
  • 勤怠システムに打刻する
  • サーバーを再起動する

 

といったことが可能になります。
今回はhubotでサンプルスクリプトが動作するまでの導入手順をメモしておきます。
※デーモン化したりで少し悩んだので・・・

 

システム構成としては、Slackのチーム登録に加えてLinuxサーバーが別途必要となります。
今回はCentOS6を検証環境として確認しました。

 

~手順~
# rpm -ivh http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
# vi /etc/yum.repos.d/epel.repo
[epel]
enable=1

enable=0

 

#yum install nodejs redis npm –enablerepo=epel
#npm install -g coffee-script hubot yo generator-hubot

# service redis start
# chkconfig redis on

 

#adduser hubot
#passwd hubot

# cd /var/www
#mkdir hubot
#chown hubot:hubot hubot
#su hubot

※場所は適当なので好きなところに

 

–ここからhubotユーザ–

#cd /var/www/hubot
#yo hubot
#Owner: Test <test@example.com>
#Bot name:hubot
#Description:test
#Bot adapter:slack

 

ローカルで動作確認

#bin/hubot
hubot> hubot ping
hubot> PONG
ここでブラウザからSlackにアクセスし、Integrationsにhubotを追加します。
そして設定画面に表示されているAPI Tokenを用います。

 

一時的に環境変数を設定して起動する。
#HUBOT_SLACK_TOKEN=トークン bin/hubot –adapter slack

 

Slackでhubotに対して “hubot ping” と発言して ”PONG”と帰ってきたら成功です。
hubotお試しスクリプトを新規に作ります。
# vim scripts/slack-hello.coffee
module.exports = (robot) ->
□□robot.hear /Hello/i, (msg) ->
□□□□username = msg.message.user.name
□□□□msg.send “Hello, ” + username
再度hubotを実行してSlack上でhelloと話しかけると返答があることを確認します。
あとはこれをforeverというモジュールでデーモン化します。

 

# npm install –save forever
# vim bin/hubot

変更後 {
#!/bin/sh

export PATH=”node_modules/.bin:node_modules/hubot/node_modules/.bin:$PATH”
export HUBOT_SLACK_TOKEN=トークン

forever start -c coffee node_modules/.bin/hubot -a slack
}

 

動作確認
# bin/hubot

再度Slack上でhelloと話しかけると返答があることを確認します。

ちなみにプロセスの確認は
# ./node_modules/forever/bin/forever list

# eixt

–ここまでhubotユーザ–

 

最後にデーモン用スクリプトを作って自動起動にします。

# vim /etc/init.d/hubot

変更後 {
#!/bin/sh
# chkconfig: 2345 90 10
# description: hubot

PROG=”hubot”
DIR=”/var/www/hubot”
LOCK=/var/lock/subsys/$PROG
USER=”hubot”

case “$1” in
start)
□□/bin/touch $LOCK
□□su – $USER -c “cd $DIR; bin/hubot”
□□echo “hubot start.”
□□;;
stop)
□□su – $USER -c “cd $DIR; node_modules/forever/bin/forever stopall”
□□/bin/rm -f $LOCK
□□echo “hubot stop.”
□□;;
*)
□□;;
esac
}
# chmod +x /etc/init.d/hubot
# chkconfig hubot on
これでサーバー再起動時に自動でhubotが起動できました。
以上、Slackにbotをとりあえず参加させる手順でした。

 

あとは他にもscripts/*.coffeeを自由に追加すれば、
色々と独自のサービスをチャットに盛り込めて面白そうですね。
それでは。

※コード中の□は半角スペースとしてお考えください


ブログTOPへ戻る