この記事は3年以上前に書かれた記事で内容が古い可能性があります
hubotをslackと連携させて動かす
hubotをslackと連携させて動かす
準備
nodejsの環境構築は以下を参照ください
nodenv環境の構築(Mac)
Slack tokenの取得は以下から
https://api.slack.com/apps
インストール
「yo」「generator-hubot」という必要なモジュールをインストール
色々出力されるが、「Everything looks all right!」と最終的に表示されればOK
% npm install -g yo generator-hubot ... Everything looks all right! + yo@3.1.1 + generator-hubot@0.4.0 added 863 packages from 320 contributors in 29.823s
インストールしたモジュールを使えるようにシェルの再起動をしておく
※何も表示されない
% exec $SHELL -l
Bot作成
yoを使ってBotを作成する
「May we anonymously report usage statistics to improve the tool over time?」はとりあえず「No」と回答
「Owner」「Bot name」「Description」は適当に、とりあえずデフォルトで回答
「Bot adapter」は「Slack」を指定
% yo hubot ? ========================================================================== We're constantly looking for ways to make yo better! May we anonymously report usage statistics to improve the tool over time? More info: https://github.com/yeoman/insight & http://yeoman.io ========================================================================== No _____________________________ / \ //\ | Extracting input for | ////\ _____ | self-replication process | //////\ /_____\ \ / ======= |[^_/\_]| /---------------------------- | | _|___@@__|__ +===+/ /// \_\ | |_\ /// HUBOT/\\ |___/\// / \\ \ / +---+ \____/ | | | //| +===+ \// |xx| ? Owner yoshiisland <yoshi@yoshiisland.com> ? Bot name myhubot ? Description A simple helpful robot for your Company ? Bot adapter slack ...
これでhubotを使えるようになったので動かしてみる
「bin/hubot」で実行し、「Enter」キーを押すと「【Bot name】>」とプロンプトに入るので
「【Bot name】 ping」と打ってみて「PONG」と返って来れば成功
プロンプトを抜けるには「exit」
% bin/hubot audited 274 packages in 1.231s found 0 vulnerabilities myhubot> [Sat Mar 07 2020 23:50:00 GMT+0900 (GMT+09:00)] WARNING Loading scripts from hubot-scripts.json is deprecated and will be removed in 3.0 (https://github.com/github/hubot-scripts/issues/1113) in favor of packages for each script. Your hubot-scripts.json is empty, so you just need to remove it. [Sat Mar 07 2020 23:50:00 GMT+0900 (GMT+09:00)] INFO hubot-redis-brain: Using default redis on localhost:6379 [Sat Mar 07 2020 23:50:00 GMT+0900 (GMT+09:00)] ERROR hubot-heroku-keepalive included, but missing HUBOT_HEROKU_KEEPALIVE_URL. `heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s | grep web.url | cut -d= -f2)` myhubot> myhubot ping myhubot> PONG exit
Slack連携
作られたhubotをslackと連携する
「HUBOT_SLACK_TOKEN=【slackのtoken】 ./bin/hubot –adapter slack」で実行すれば連携できる
% HUBOT_SLACK_TOKEN=【xoxb-hogehoge】 ./bin/hubot --adapter slack ...
slack側で、botに「ping」と話しかけて「PONG」と返って来れば成功
(任意)いちいちトークンを指定して実行するのが面倒なのでスクリプト化しておく
% vim hoge.sh % chmod u+x hoge.sh % cat hoge.sh #!/bin/sh export HUBOT_SLACK_TOKEN=【xoxb-hogehoge】 ./bin/hubot --adapter slack
次からはこのスクリプトを実行するだけでOK
% ./hoge.sh ...
Botの開発
ping PONGだけしててもしょうがないので(他にもtimeなどデフォルトの機能はあるが)
何か簡単なスクリプトを書いてみる
※開発の仕方は公式のGithubを読むのが一番良さそう
https://github.com/hubotio/hubot/blob/master/docs/scripting.md
作ったスクリプトは「scripts」ディレクトリ配下に置いておけば勝手に反映される
% ls Procfile bin/ hoge.sh* node_modules/ package.json README.md external-scripts.json hubot-scripts.json package-lock.json scripts/
例えば、以下のように記載すると
% cat scripts/test.coffee module.exports = (robot) -> robot.hear /Do you like (.*) ?/i, (res) -> text = res.match[1].slice(0,-2) res.reply "I like #{text}!" console.log(res.match)
以下のように返答するようになる
「console.log(res.match)」で出力されたログは以下
log大事。
[ 'Do you like apple ?', 'apple ?', index: 11, input: 'test Do you like apple ?', groups: undefined ] [ 'Do you like pen ?', 'pen ?', index: 11, input: 'test Do you like pen ?', groups: undefined ]
夢が広がる。
参考
Hubotを使ってSlackへBotを投げる
https://github.com/hubotio/hubot/blob/master/docs/scripting.md