Hubotを使ってSlackに投稿されたメッセージに応答してシェルスクリプトを実行させる

はじめに
HubotをSlack上で常駐させることで色々なことができます。ここでは、Hubotをインストールして実際にSlack上に常駐させ、メッセージに応答してHubotが動作するパソコン上でシェルスクリプトを実行させるまでの手順をメモします。
Hubotについて
Hubotは、GitHub社が開発しているチャットボットの開発用のフレームワークです。Hubotを使用することで簡単に自分の目的に合わせたボットを開発することができます。
Hubot is your friendly robot sidekick. Install him in your company to dramatically improve employee efficiency.
そもそもボットは何かについて、Hubotの詳細な説明については以下の記事が大変参考になりました。
本連載では,GitHub社が開発したチャットbot開発・実行フレームワークである「Hubot」を使用して,チャットツールにオリジナルのbotを住まわせ,開発フローに組み込むことで開発を楽にする方法について解説していきます。
前提と環境
Hubotの開発をしたり動作させたりするには、Node.jsとnpmが必要となります。この記事では、以下を前提とします。
- HubotをインストールするOS :Ubuntu18.04
- Node.js : v10.16.0
- npm : 6.10.2
- Slackアカウントは取得済とする
Hubotをインストールする
基本的には以下の公式ドキュメントに従ってインストールを進めます。
Hubot is your friendly robot sidekick. Install him in your company to dramatically improve employee efficiency.
Node.jsとnpmがインストールされている環境で、以下のようにnpmを使ってHubotを生成するためのパッケージをインストールします。
続いてHubotをインストール先となるディレクトリ作成します。ここでは、myhubot
という適当な名前のディレクトリを作成します。その後作成したディレクトリに移動します。ディレクトリ名は各自決めてOKです。
作成したディレクトリにて、以下のようにyo
コマンドを使用することでHubotをインストール、作成します。
上記を実行すると、以下のように質問形が表示されます。Hubotを改善するために匿名データを送信してよいか?という質問になります。ここでは、匿名データを送信しないためにn
と入力してEnterを押します。
続いて以下のように作成するボットに関する情報を入力するよう順番に質問が表示されます。
内容は上から順番に下記の通りです。
項目名 | 内容 |
---|---|
Owner | 作成するHubotの適当なオーナー名 |
Bot name | 作成するHubotの名前 |
Description | 作成するHubotの説明 |
Bot adapter | 作成するHubotを動作させたいプラットフォームのためのアダプター。ここではSlackを指定。 |
重要なのはBot adapterです。ここでは、Slack上で動作するHubotを作成したいため、Bot adapterとしてslack
を指定しています。他のアダプターについては、例えばシェル上で動作させるためのshell
があります。詳しくは以下の公式ドキュメントに記載されています。
Hubot is your friendly robot sidekick. Install him in your company to dramatically improve employee efficiency.
全体を通して見ると以下のようになります。
以上でhubotのインストールが完了です。続いて動作確認を行います。
Hubotの動作確認をおこなう
Hubotのインストールが完了したら、以下のコマンドを実行して実際にHubotを動かしてみます。
上記のように警告とエラーがでますが、とりあえずEnterを押すと、以下のように入力待受状態になります。myhubot
は各自が設定したHubot名になります。
後は実際に適当に入力してみると、以下のように応答してくれます。
Hubotが動作していることを確認できました。なお、上記で表示された警告とエラーは、これはHubotがデータを永続化させるために必要なredisがインストールされていないためです。この記事では、データの永続は不要なためredisはインストールせずに進めます。もし作成するHubotにデータを保持させて永続化したいような場合は、以下の公式ドキュメントを参考にしてみてください。
Hubot用のSlackトークンを取得し、セットアップを行う
Slack上で、作成したhubotを動作させるためには、Slackでトークンを取得する必要があります。トークンを取得するには、以下のようにSlackを開いているウィンドウの左側にある「アプリを追加する」をクリックします。
「アプリを追加する」をクリックすると、以下のようにアプリを検索するページが表示されるので、ここで以下のように「hubot」と検索します。そして検索結果として表示された「Hubot」の「インストール」をクリックします。
続いて以下のようにHubotの説明ページが表示されるので、ここで「設定を追加」をクリックします。
「設定を追加」をクリックすると、以下のようにHubotのユーザ名(Slack上に表示されるユーザ名)の入力フォームが表示されます。ここでは、適当に「myhubot」という名前を入力します。入力後、「Hubotインテグレーションの追加」をクリックします。
続いて以下のように、Hubotのセットアップページが表示されます。以下でxoxb-
から始まる値がHubot用のトークンになります。
上記の「セットアップの手順」に表示されているように、以下をそのまま後ほど使用します。
なお、同じページ内で下にスクロールしてくと、以下のように作成したHubotの名前やアイコンなどを設定可能です。
最後にページ最下部にある「インテグレーションの保存」をクリックしてトークンの取得とセットアップが完了です。
Slackに戻ってみると、以下のように「App」部分に作成した「myhubot」が追加されていることを確認できます。
ただし、このままでは作成したHubotにメッセージを送っても何も反応してくれません。実際に動作させる必要があります。この手順を次に説明します。
HubotをSlack上で動作させる
取得したSlackのトークンを以下のようにHubotの起動時にオプションとして渡すことでSlack上でHubotが動作できるようになります。
上記コマンドを実行すると、Slack上でも作成したHubotがオンラインになることを確認できます。
そして試しに作成したHubotにダイレクトメッセージで「help」と送ってみると、以下のように使い方が応答として返ってきます。
これで無事に作成したHubotがSlack上で動作するところまでを確認できました。
Hubotに対して投稿されたメッセージに応答して任意のシェルスクリプトを実行する
Slack上でHubotに送られたメッセージに反応して用意したシェルスクリプトを実行させてみます。
そのために、まずHubotをインストールしたディレクトリ直下にすでに存在するscripts
というディレクトリに移動します。
Hubotでは、このscripts
ディレクトリに自由に自分のスクリプトを置いて好きな処理をさせることができます。なお、HubotではCoffeeScriptがデフォルトとなっています。
scripts
の中にshell
という名前の適当なディレクトリを作成します。
そしてshell
ディレクトリ配下に以下の内容を含むシェルスクリプトをhello.sh
という名前で作成しておきます。
続いて、任意のメッセージに反応して作成したhello.sh
を実行するためのHubotのスクリプトをexec_shell.coffee
という適当な名前で作成します。
exec_shell.coffee
の中身を以下のようにします。
上記のスクリプトは、myecho
、もしくはtestshell
というメッセージをHubot宛にメンションを送る(@hubot名)と、sh /home/username/myhubot/scripts/shell/hello.sh
というコマンドを実行するスクリプトです。すなわち、任意のメッセージに反応して指定したシェルスクリプトを実行することができます。
msg.send stdout
は、シェルスクリプトを実行した結果をHubotのメッセージとしてユーザに返します。例えばここで使用したhello.sh
は、実行するとHello from script
と表示するだけのものなので、これをそのままHubotのメッセージとしてユーザに返答します。
シェルのパス等は私の実際の環境となるため上のコードと異なりますが、Slack上では以下のようになります。
ここの例は実用性は全くないですが、後はシェルスクリプトを自由に変更すれば色々なことができます。しかし、当然ながらこれはそのままセキュリティリスクともなるので、実際に運用するシーンやセキュリティについては十分に注意してください。私はラズベリーパイ上にHubotをインストールし、さらにラズベリーパイにつないだ赤外線リモコンを操作するシェルスクリプトを実行したい目的でした。この記事で紹介したように、Hubotを使用して任意のシェルスクリプトを実行させることで、Slackから家電の操作をすることもできます。
まとめ
Hubotを使うことでかなり色々なことができそうです。使い始めるのもとても簡単なのでボットに興味がある方は触ってみてください。
関連記事
- 公開日:2019/12/19 更新日:2019/12/19
コードなしでボットを作成できるフレームワークBotfront
Botfrontは、GUIのエディタでボットに発言させたい内容やユーザのメッセージに対してどのような応答を返すかを編集してボットを作成できるフレームワークです。また、作成したボットをWebサイトやSlack上で動作させることも可能です。この記事では、Botfrontをインストールしてボットを作成するまでをまとめます。
- 公開日:2018/10/31 更新日:2018/10/31
LINEのLIFFアプリを登録する手順と簡単な実例
LIFF(LINE Front-end Framework)はLINEのトークルーム上でWebアプリを呼び出してLINEと連携して動作するアプリのプラットフォームです。ここでは、このLIFFアプリを登録して実際に動作させるまでの手順をメモします。
- 公開日:2018/10/08 更新日:2018/10/08
ユーザの投稿メッセージに応答するSkypeボットをGoogle Apps Scriptで作成する手順
Skypeにてユーザからボットのへの投稿メッセージに応じて適当なメッセージを送り返すボットをGoogle Apps Scriptで作成します。ここではあらかじめ決めたメッセージを返すだけですが、この記事での内容を元に色々な応用に使えると思います。
- 公開日:2018/10/05 更新日:2018/10/05
Skypeにメッセージを投稿するSkypeボットをGoogle Apps Scriptで作成する手順
なユーザの投稿に応答する形ではなく、ボットが主体となって投稿するメッセージをプロアクティブメッセージと呼びます。この記事では、プロアクティブメッセージを任意のSkypeチャットに送信するSkypeボットをGoogle Apps Scriptで作成します。
開発アプリ
