3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

WSL上にRocket.Chatのプライベートグループへ時報をつぶやくHubotを構築しWindowsログイン時に自動起動する方法…

Last updated at Posted at 2020-05-25

はじめに

やったことを全部書こうとしたら読みづらいタイトルになってしまいました…
私の会社ではテレワーク中のコミュニケーションとしてRocket.Chatを使用しています。テレワーク中は始業やお昼休みのチャイムが鳴らないのでリーダーの私が「お昼ー」とか発言をしているのですが正直めんどくさくなってきました。そこでHubotを使い時報をつぶやくbotを作ったのですが色々と罠があったので備忘録としてまとめてみました。
この記事を見ると以下のようなことができるようになります。

  • Hubotの環境構築(基本的な内容)
  • httpsなURLへの接続(SSLを使う)
  • 時報をつぶやく
  • プライベートグループ(チャンネル/ルーム)への発言
  • Hubotのデーモン化
  • そのデーモンをWindowsログイン時に自動起動する

環境

以下の環境で動作させています。

  • OS
    • Windows 10 64bit
  • WSL
    • Ubuntu 20.04 LTS
  • その他バージョンは調査中です…

Hubotの環境構築

インストール

まずnodenpmをインストールします。もう記憶にないですがWSLにはインストールされてなかったと思います。

$ sudo apt install -y nodejs npm

次にyogenerator-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を以下のように編集します。

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に配置します。

main.coffee
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.dsudo nano hubot等してエディタを開きます。

hubot
# !/bin/sh

cd /home/user_name/myhubot
./bin/hubot

と書きます。cdパスはご自身の環境に読み替えてください。
ファイルができたら

sudo chmod +x hubot

で実行権を追加します。

Windowsログイン時に自動起動する

以下のようなファイルを作成し

hubot.bat
@echo off
wsl -u root -- service hubot start

スタートアップに登録します。
Windows起動時に自動起動させる場合はタスクに登録する方法もあるようです。

おわりに

最新版のHubotだとプライベートグループに発言できなくて情報もあまり出てこなくてドハマリしましたがなんとか完成までこぎつけました。もしかしたら来週にはテレワーク解除されるかもしれませんがこれを機に色々遊んでみようと思います。

参考

本記事を書くにあたり以下のサイトを参考にしました。

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?