はじめに
やったことを全部書こうとしたら読みづらいタイトルになってしまいました…
私の会社ではテレワーク中のコミュニケーションとしてRocket.Chat
を使用しています。テレワーク中は始業やお昼休みのチャイムが鳴らないのでリーダーの私が「お昼ー」とか発言をしているのですが正直めんどくさくなってきました。そこでHubot
を使い時報をつぶやくbotを作ったのですが色々と罠があったので備忘録としてまとめてみました。
この記事を見ると以下のようなことができるようになります。
- Hubotの環境構築(基本的な内容)
-
https
なURLへの接続(SSLを使う) - 時報をつぶやく
- プライベートグループ(チャンネル/ルーム)への発言
- Hubotのデーモン化
- そのデーモンをWindowsログイン時に自動起動する
環境
以下の環境で動作させています。
- OS
- Windows 10 64bit
- WSL
- Ubuntu 20.04 LTS
- その他バージョンは調査中です…
Hubotの環境構築
インストール
まずnode
とnpm
をインストールします。もう記憶にないですがWSLにはインストールされてなかったと思います。
$ sudo apt install -y nodejs npm
次にyo
とgenerator-hubot
をインストールします。デーモン化するためのforever
も入れています。
この辺の詳細はHubotのドキュメントに載っていますので参照してください。
$ sudo npm install -g yo generator-hubot forever
雛形作成
雛形用のディレクトリを作成しその中でyoを使って雛形を作成します。
$ mkdir myhubot
$ cd myhubot
$ yo hubot
# adapterに「rocketchat」を指定する以外は適当で大丈夫です
# v3系だとプライベートグループに発言できないので、v2系ダウングレードします
$ sudo npm install hubot@2.19.0
# 併せてhubot-rocketchatもダウングレードします
$ sudo npm install hubot-rocketchat@1.0.12
雛形の設定ではnode
のバージョンが古いようなのでpackage.json
を以下のように書き換えます。
"engines": {
"node": "10.19.x"
}
私の環境ではnodeはv10.19.0
が入っていました。確認方法は
$ node --version
です。
起動スクリプトの編集(SSL・デーモン)
bin/hubot
を以下のように編集します。
# !/bin/sh
set -e
export ROCKETCHAT_URL=https://sample.com
export ROCKETCHAT_USESSL=true
export ROCKETCHAT_ROOM=sample
export ROCKETCHAT_USER=bot_name
export ROCKETCHAT_PASSWORD=bot_password
npm install
export PATH="node_modules/.bin:node_modules/hubot/node_modules/.bin:$PATH"
# exec node_modules/.bin/hubot --name "bot_name" -a rocketchat
forever start -c coffee node_modules/.bin/hubot --name "bot_name" -a rocketchat
SSLを使用する場合はROCKETCHAT_USESSL=true
とします。
またforever
を使ってデーモン化しています。
それからRocket.Chatしか使わないのでアダプタオプションを-a rocketchat
に書き換えています。
スクリプトの作成(時報・プライベートグループ)
cron
を使うのでインストールします。
$ sudo npm install cron time
続いて以下のようなスクリプトを作りscripts
に配置します。
cronJob = require('cron').CronJob
module.exports = (robot) ->
# フォーマットは '(sec) (min) (hour) (day) (month) (day of the week)'
new cronJob('00 00 09 * * 1-5', () ->
robot.messageRoom "Jcq9rbe9754Z9uvqf", "**༼ つ ◕_◕ ༽つ<仕事始めよっさ**"
).start()
new cronJob('00 00 12 * * 1-5', () ->
robot.messageRoom "Jcq9rbe9754Z9uvqf", "**༼ つ ◕_◕ ༽つ<お昼にしよっさ**"
).start()
new cronJob('00 00 13 * * 1-5', () ->
robot.messageRoom "Jcq9rbe9754Z9uvqf", "**༼ つ ◕_◕ ༽つ<再開しよっさ**"
).start()
new cronJob('00 00 18 * * 1-5', () ->
robot.messageRoom "Jcq9rbe9754Z9uvqf", "**༼ つ ◕_◕ ༽つ<仕事終わろっさ**"
).start()
Rocket.Chatの/gimme
がいい感じだったのでBOTのキャラに採用しましたw
先日チアダンを見たので語尾がチアダンになってます…
それは置いといて時報をつぶやくにはCronJob
を使って定時タスクを動かします。1-5
というのは月~金
という意味です。
またプライベートグループに発言するにはrobot.messageRoom
の第一引数にプライベートグループの実際のルームID
を入れます。実際のルームIDの確認方法ですがhubot起動時に
[Mon May 25 2020 19:09:28 GMT+0900 (Japan Standard Time)] INFO Looking up Room ID for: sample
[Mon May 25 2020 19:09:28 GMT+0900 (Japan Standard Time)] INFO Joining Room: Jcq9rbe9754Z9uvqf
[Mon May 25 2020 19:09:28 GMT+0900 (Japan Standard Time)] INFO rid: [ 'Jcq9rbe9754Z9uvqf' ]
というようなログが出るので確認できます。デーモン化するとログが出てこなくなるので確認するときはexec
の方で起動してください。
Hubotのデーモン化
WSLではinit.d
のサービスを作成します。
/etc/init.d
でsudo nano hubot
等してエディタを開きます。
# !/bin/sh
cd /home/user_name/myhubot
./bin/hubot
と書きます。cd
パスはご自身の環境に読み替えてください。
ファイルができたら
sudo chmod +x hubot
で実行権を追加します。
Windowsログイン時に自動起動する
以下のようなファイルを作成し
@echo off
wsl -u root -- service hubot start
スタートアップに登録します。
Windows起動時に自動起動させる場合はタスクに登録する方法もあるようです。
おわりに
最新版のHubotだとプライベートグループに発言できなくて情報もあまり出てこなくてドハマリしましたがなんとか完成までこぎつけました。もしかしたら来週にはテレワーク解除されるかもしれませんがこれを機に色々遊んでみようと思います。
参考
本記事を書くにあたり以下のサイトを参考にしました。