Help us understand the problem. What is going on with this article?

Raspberry PiにhubotをインストールしてSlackから呼び出すまでの手順

概要

Raspberry PiにSlack Bot(hubot)を住ませて、Slackから呼び出せるようにする。

使用するハードウェア

  • Raspberry Pi 2 Model B (OS:Raspbian Jessie)

使用するソフトウェア

  • Node.js
  • npm
  • yo
  • generator-hubot
  • coffee-script

使用するWebサービス

  • Slack

構築手順

1.Node.jsインストール

Raspberry Piのターミナルでインストールを行う。

apt-getのupdate

apt-getをupdateしておく。

sudo apt-get update

node.jsインストール

sudo apt-get install -y nodejs

node.jsのバージョンを確認

nodejs -v

node.jsのバージョンが表示されることを確認。

2.hubotインストール

npmインストール

sudo apt-get install -y npm

npmのバージョンを確認

npm -v

npmのバージョンが表示されることを確認。

npm nインストール

sudo npm cache clean
sudo npm install npm n -g
sudo n stable

yoインストール

sudo npm install yo -g

generator-hubotインストール

sudo npm install generator-hubot -g

coffee-scriptインストール

sudo npm install coffee-script -g

3.hubot設定

hubotを格納するディレクトリを作成

mkdir hubot
cd hubot
mkdir pibot
cd pibot
yo hubot

今回はルートディレクトリにhubotというディレクトリを作成し、その中にpibotという名前のディレクトリを作成してみた。
pibotディレクトリ内で yo hubot を実行するとhubotの作成が始まる。

hubotの設定

対話形式でhubotの設定を進める。
設定内容は以下を参考にする。
HUBOT DOCUMENTATION

WS000050.JPG

設定内容は以下のとおり。

Owner
hubotの所有者をメールアドレスで設定。
Bot name
hubotの名前。今回はpibotとする。
Description
hubotの概要。適当な値でよい。
Bot adapter
hubotのアダプタを指定する。必ずslackを指定。

hubotの作成が完了したことを確認。
WS000052.JPG

hubot単体の動作確認

以下のコマンドでhubotを起動する。

bin/hubot

このとき、Heroku関連のERRORが出るが無視してよい。 1
以下のコマンドを実行してhubotからPONGと返ってくれば動作確認はOK!
(pingの前にhubotの名前を指定すること)

pibot ping

WS000053.JPG

4.Slack設定

Slackへのhubot追加とAPIトークン取得

Slack Appディレクトリにアクセスし、hubotを追加。
https://slack.com/apps

hubotの追加が完了するとhubotアダプターで使用するAPIトークンが表示されるのでコピーしておく。
その他、アイコンや氏名は好みのものに変えておいてOK。

Raspberry piのhubotにAPIトークンを設定

Raspberry Piのターミナル画面に戻り、取得したSlackのAPIトークンをhubotに設定する。

以下のコマンドでhubotの設定ファイルを開く。

nano bin/hubot

以下の定数を設定して保存。

export HUBOT_SLACK_TOKEN=Slackで取得したAPIトークン

最下部に追加するとダメなようなので、既存の定数PATHの上あたりに追加する。
WS000057.JPG

hubotを起動してSlack側でオンラインになるか確認

以下のコマンドを実行してhubotを起動。

bin/hubot -a slack

Slack上で作成したhubotがオンラインになればOK!
WS000056.JPG

5.Slackからhubotの動作確認

Slack上でRaspberry Piのhubotに対してメンションを付けてpingと発言し、hubotがPONGと返してくれることを確認できれば動作確認はOK!
WS000058.JPG

6.Raspberry pi起動時にhubotを自動で起動

現状ではターミナルでbin/hubotを実行しないとhubotが起動しないが、これをRaspberry Piの電源を入れたら(Raspbianが起動したら)自動でhubotが起動するようにする。

init.d or systemd

同じようなことを試みている記事はたくさんあり、その中でinit.dを利用する方法を最初に試してみたが、最新のRaspbian jessieではinit.dでのhubot起動は上手くいかなかった。
最新のRaspbian jessieからはsystemdというのを利用するのがベターらしい。

Pythonコードをデーモン化する(Systemdとinit.dの違い)

init.dはWheezy以前の比較的古いシステム、systemdはJessie以降の比較的新しいで採用されている。

hubot起動スクリプトを作成

systemdで自動起動する対象はシェルファイルにするので、bin/hubotを実行するシェルスクリプトを用意しておく。
今回はbin/hubotと同じディレクトリにrun_hubot.shというシェルスクリプトを作成した。

cd /home/pi/hubot/pibot/bin
sudo nano run_hubot.sh

シェルスクリプトの内容は、bin/hubotを実行する内容にしておく。

run_hubot.sh
#!/bin/sh
cd /home/pi/hubot/pibot
sudo -u pi bin/hubot --adapter slack

systemdの設定ファイルを作成

systemd/systemフォルダにサービス起動用の設定ファイルを追加する。
(xxxはhubotの名前にしておくと判別しやすい)

cd /etc/systemd/system
sudo nano xxx.service

xxx.serviceの書き方は以下のような感じ。
DescriptionとExecStartを各自のhubot用に書き換えればいいと思う。
(ExecStartには上で作成したhubot起動用のシェルファイルを指定する)

pibot.service
[Unit]
Description=pibot service

[Service]
ExecStart=/home/pi/hubot/pibot/bin/run_hubot.sh
Restart=always
Type=simple

[Install]
WantedBy=multi-user.target

systemdの設定反映とステータス確認

設定ファイルを有効にするには以下のsystemctlコマンドを実行する

sudo systemctl daemon-reload

以下のsystemctlコマンドを実行し、systemdに登録したサービスがactiveになっていることを確認。
activeになっていない場合は作成したファイルに何かしら問題がある。
(systemdに作成した設定ファイルや起動用のシェルスクリプトが間違っているとか)

systemctl status xxx

Raspberry Piを再起動し、hubotが自動起動するか確認する。
(SlackでオンラインになればOK。Raspbian起動後、hubotの起動に1~2分かかる)

sudo reboot

  1. "hubot-heroku-keepalive"は、Heroku上でhubotが寝ないようにするためのプラグイン。このプラグインを利用するときは"HUBOT_HEROKU_KEEPALIVE_URL"という定数を定義するのだが、その定数が存在しないということでエラーになっている。 

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away