HubotとHerokuを使ってSlackに通知を送るボットを作成してみた

チャットツールのSlackが人気になってきましたね。
Slackが最近話題なので、移行してみようということになりました。

今まで、会社でのチャットツールではチャットワークをずっと使っていました。日本ではかなり有名なチャットツールでけっこうな大企業でも利用されています。

Slackに移行するメリットとしては、
・Mac用のアプリがある
・チャットがURLベースなのでプロジェクト毎の管理が楽
・他のWebサービスの連携が簡単

特に2つ目はかなり助かっています。
会社以外で関わっているプロジェクトがあったりすると、チャットワークだと同じ画面から参照することになるのですが、Slackだと分けて閲覧できるので。

今回は3つの目のWebサービスとの連携ですね。
他のWebサービスと連携して、Slackに通知を飛ばしたり、Slackから他のサービスに投稿したりすることができちゃいます。もちろん他のサービスでもできたりすることはあるんですが、Slackだとその設定がすごく楽なんですよね。

今回はそのテストとしてhubot、herokuを使って他のサービスと連携した簡単なSlackボットを作成してみました。

手順としては
1) Hubotのインストールと起動
2) Herokuにデプロイする
3) SlackにBOTを作成する
の3つです。

Hubotのインストール&起動

Hubot

Hubotとは、かの有名なGitHubが開発したチャット用のbot開発向けフレームワークです。
Slackなどのチャットツールに簡単にBOTを作成することができます。

まずはローカル環境でそのHubotを動かします。

Hubotの動作にはredisが必要なので、redisをインストールします。

brew install node redis

インストールが完了したら、起動します。

redis-server

続いて、CoffeeScriptをインストールします。
hubotのスクリプトはCoffeeScriptになっているので。

npm install -g coffee-script

その後、hubotをインストールします。

npm install -g hubot

hubot2.9以降は、新規でhubotを作成するときにgenerator-hubotとyoを使うので、こちらをインストールしましょう。

npm install -g yo generator-hubot

これでインストールは完了です。
BOTを作成してみましょう。
適当なディレクトリを作成して、新規hubotを作成します。

mkdir-p hogebot
cd hogebot
yo hubot

上記コマンドを実行すると、こんな感じのAAがでます。

Hubotのインストール

その後、Owner、Bot name、Description、Bot adapterが聞かれますが、テストなので適当でOKです。後から変更することもできます。
インストールが完了すると、ディレクトリの中身を見ると以下のようなファイルが入っています。

hubotのファイル一式

では、実際Hubotを起動してみましょう。
Hubotの起動コマンドは「bin/hubot」です。
起動するとhubotのコマンドラインになります。

bin/hubot
hogebot>

hubotが実際に起動したら、動作確認をしてみます。
「hogebot ping」と入力してみましょう。

hogebot> hogebot ping
hogebot> PONG

無事、PONGと返ってきたらOKです。

Herokuにデプロイする

HEROKUにデプロイする

hubotの動作が確認できたら、hubotにソースコードをデプロイします。
まずはHerokuにアクセスして登録します。
Heroku

続いて、下記ページからToolbeltをインストールしましょう。
Heroku Toolbelt

Herokuに登録して、Toolbeltをインストールしたら、herokuにログインします。

heroku login

ログイン後はherokuにアプリケーションを作成します。

heroku create XXXXXXXXX

ログインができたら、herokuにコミットします。

git init XXXXXXXXX
git add --all
git commit -m "initial commit"
git push heroku master

さて、heroku上で実行していくわけですが、
クレジットカードの登録をする必要があります。
登録しないと実行できないというね…。
しぶしぶ登録しておきましょう。

いつの間にか課金されているパターンが怖いので、先駆者にならってherokuのサーバのサイズを最小にしておきます。

heroku ps:scale web=1

ここまで完了したらredisを実行していきます。

heroku addons:add rediscloud

SlackにBOTを作る

Slack

さて、Slackに反映させていきましょう。
hubotとslackを連携させるパッケージをインストールします。

npm install hubot-slack --save

続いて、Procfileというファイルに下記を記述します。

web: bin/hubot --adapter slack

ここまでやったらあとはSlack側の設定です。
Slackの「Configured Integrations」からhubotを選択します。

Integrationsを選択

ユーザーネームを適当に設定します。

ユーザーネームを作成

作成後にTOKENが表示されます。

HubotのTokenを受け取る

このTOKENをherokuのconfigに追加します。

heroku config:add HUBOT_SLACK_TOKEN=XXXXXXXX

これで設定は完了です。
試しにテストしてみます。

SlackでHubotのテスト

無事レスポンスが返ってきました。

SlackのBOTをカスタマイズしてみる

せっかくなので、カスタマイズしてみました。
ソースは「scripts」フォルダの中に「.coffee」ファイルを作成して記述します。
拡張子の通り、言語はcoffee scriptです。
scriptsフォルダの中に入っている.coffeeの内容が全て読み取られます。

実際に書いたソースは以下

[coffee]
robot.respond /((ラーメン|らーめん))/i, (msg) ->
robot.http(“https://api.instagram.com/v1/tags/ラーメン/media/recent?access_token=#{TOKEN}”)
.get() (err, res, body) ->
records = JSON.parse(body)[‘data’]
msg.send records[0].images.standard_resolution.url
[/coffee]

BOTに対して、ラーメンを注文するとラーメンの画像を返してくれるという、かなりどうでもいいBOTを作成してみました。
写真の取得はinstagramのAPIを使ってみました。

Slack上でラーメンを注文する

無事動きました。

まとめ

こんな感じで、BOTでいろいろ有効的なことできます。
ラーメンの注文の仕組みはただのお遊びですけど…笑

業務的な事例では、
Redmineのタスク期限をSlackに通知が送られるようにしたり、
Slackから本番環境へのデプロイができたり
など。

唯一の個人的に面倒なのは、スクリプトがCoffee Scriptなこと。
使ってないので、文法がいまいちわからないんですよねー。
この辺はドットインストールをざっと見て書きました。

実際にいろいろ作ってみようかなと思います。
でわでわ。

プログラミングを効率よく学習するならTECH CAMPがオススメ↓


この記事を書いた人
ねづ
妻と娘(1歳)と3人暮らし。
「旅行」と「筋トレ」をテーマにしてブログを書いてます。

独身時代に海外旅行(主に東南アジア)にハマり、マイル修行も経験。ANA&JAL両方とも上級会員(SFC&JGC)になりSPGアメックス所有して、オトクな旅行を追求。
結婚&子供ができた後は、子連れ旅行しながら、筋トレという新たな趣味に目覚めて、週3〜4でジム通い中。
この記事が面白かったらいいねしよう!
記事のタイトルとURLをコピーするコピーしました!
こちらの記事もどうぞ
こちらの記事もどうぞ
このブログへのコメント

コメントを残す

コメント※必須
名前※必須
メール※必須(非公開)

このブログを書いている人

運営者 : ねづ

妻と娘(1歳)と3人暮らし。
「旅行」と「筋トレ」をテーマにしたブログです。

独身時代に海外旅行(主に東南アジア)にハマる。ANA&JAL両方とも上級会員(SFC&JGC)になりSPGアメックス所有して、オトクな旅行を追求。
結婚&子供ができた後は、子連れ旅行しながら、筋トレという新たな趣味に目覚めて、週3〜4でジム通い中。

詳しいプロフィールはこちら

LINE@作成しました!お気軽にどうぞ!
友達登録は下記QRコードを読み取ってください
LINE@ QRコード

カテゴリ一覧
キーワードで記事を探す
下記から更新情報を受け取れます!