【初心者向け】AWS+Hubot+Slackで自動返信するBOTの作り方(後半)

AWS+Hubot+Slackを使ってBOTを作る方法(後半)を投稿します:)

前半はこちら
http://qiita.com/ShirakawaYoshimaru/items/dc79b9548a43f9c6fe9f


構成はこんな感じ
(前半)1.EC2サーバー作成のための下準備
(前半)2.EC2サーバーを立てる
(後半)3.SlackのBOT設定
(後半)4.EC2サーバーに入ってHubotを作る
(後半)5.Tips

***
間違いやアドバイス等があったら気軽にコメントください><
では始めて行きます :)

##3.SlackのBOT設定
Slackに追加するBOTは、最初にSlackに登録し、チャンネルに招待する必要があります。

###3-1.BOTをSlackチームに登録する
このurlを開いてくか、
https://slack.com/apps

もしくは、
Slackのチーム名をクリックして、メニューを開いて「Apps & integrations」をクリックしてください。
![Slack 2016-04-15 10-59-33.jpg](https://qiita-image-store.s3.amazonaws.com/0/67575/4dfdecd6-05ff-faf8-c2bc-96a17c508836.jpeg)

ブラウザでこんな画面が開きます。
検索バーに「Hubot」を入力して検索しましょう。Hubot導入画面に遷移できます :)
![App Directory | Slack 2016-04-15 11-05-07.jpg](https://qiita-image-store.s3.amazonaws.com/0/67575/315275c9-91d5-cc97-663c-afc4f70a0805.jpeg)


Hubot導入画面でHubotをインストール(追加)したいチームを選択します。
![Hubot | Slack 2016-04-15 11-12-41.jpg](https://qiita-image-store.s3.amazonaws.com/0/67575/b3c632a6-e343-b13e-b9e6-6cce1605769a.jpeg)

チームの選択ができたら、まずはBotの名前を入力します。
Botの名前は小文字/数字/ドット/アンダーバー/スラッシュしか使えないので注意です。
(大文字は使えません)
![Hubot | tech_salon Slack 2016-04-15 11-18-45.jpg](https://qiita-image-store.s3.amazonaws.com/0/67575/081b0346-e403-3b7a-f535-26e844469b28.jpeg)

次の画面に行くと、Hubotの詳細設定ができるようになります。
BOTのICONはこの画面で変更できます。
ここに後で使う **API TOKEN** があるので必ずメモっておきましょう。
TOKENをメモったら、画面下部にある **Save Integrationボタン** を押してBot情報を保存します。 (Save Integrationボタンを選択しても画面は特に変わりません)
![Hubot | tech_salon Slack 2016-04-15 11-24-08.jpg](https://qiita-image-store.s3.amazonaws.com/0/67575/f62f66dd-8320-f179-dc62-e7607a2e2580.jpeg)

###3-2.BOTをチームのチャンネルに招待する
BOTをチャンネルに招待しましょう。
Slackに戻り、画面右上のメニューボタンを選択して **Team Directory** を選択します。
![Slack 2016-04-15 11-37-25.jpg](https://qiita-image-store.s3.amazonaws.com/0/67575/8a367002-e6d0-0313-71c8-80dd1b78cd5a.jpeg)

Teamに入っているメンバー全員の一覧が見れます。先ほど追加したBOTを選択しましょう。
![Slack 2016-04-15 11-38-43.jpg](https://qiita-image-store.s3.amazonaws.com/0/67575/cc94fa27-bf0f-8f0a-9b5c-d7d5b76c6b1a.jpeg)


BOTの詳細が見れます。下矢印?マークを選択し、 **Invite to a channel** を選択します。
![Slack 2016-04-15 11-39-20.jpg](https://qiita-image-store.s3.amazonaws.com/0/67575/77a0a3ba-ea24-f272-8f60-04ce42223b12.jpeg)

どこのチャンネルに招待するか選択しましょう。#randomや#generalでもいいのですが、BOTの動作テストをすることを考えると、#bot みたいなテスト用チャンネルを作成してそこに招待する方が良いでしょう。
ちなみに招待先を間違えると管理者権限がない限りremoveできないので注意してください。
僕は今回#botチャンネルを作ってそこに招待しました。
Inviteボタンを選択すれば招待完了です。
![Slack 2016-04-15 11-41-18.jpg](https://qiita-image-store.s3.amazonaws.com/0/67575/73aec642-d6cf-6545-f912-c9e8320848f2.jpeg)

先ほどのBOT設定画面にもどり、所属チャンネル一覧に招待したチャンネルが表示されていればokです。
(間違えて#randomに招待してしまったので、スクショでは#randomと#botの二つに所属していることになっています)
![Hubot | tech_salon Slack 2016-04-15 12-00-05.jpg](https://qiita-image-store.s3.amazonaws.com/0/67575/87d052c6-65d1-2ec7-9375-bec4505ebb8c.jpeg)

##4.EC2サーバーに入ってHubotを作る
ここまでくれば後は簡単です!
やることは
4-1.EC2にssh接続(ログイン)する
4-2.必要なものをinstallする
4-3.Hubot作成
4-4.Hubot実行
4-5.動作確認テスト
になります :)
ある程度のUnixコマンドの知識は必要ですが、基本コピペでも大丈夫です :)

###4-1.EC2にssh接続(ログイン)する
EC2へのssh接続は割と簡単です。
前半でEC2サーバーを建てる時にダウンロードしたpemファイルを使用するので用意しておきましょう。

ssh接続はこのコマンドでできます。
pemファイルのパスは自分の環境に合わせて変えてください。
userNameはEC2サーバーの場合「ec2-user」が用意されているのでそれを使います。
ipアドレスも自分のEC2サーバーに合わせて用意してください。

```lang:ssh接続コマンド
$ ssh -i pemファイルのパス userName@ipアドレス
```

EC2サーバーのipアドレスを確認しましょう。
AWSにログインして、EC2管理画面から自分のEC2を選択し、 **パブリックIP** をメモりましょう。パブリックIPを使ってssh接続します。
![EC2 Management Console 2016-04-15 12-17-30.jpg](https://qiita-image-store.s3.amazonaws.com/0/67575/014b20c2-e0eb-cb67-454d-377d11775637.jpeg)

pemファイルのアクセス権限の設定が弱いとssh接続ができないのでアクセス権限を変えます。
ちなみにファイルパスを手入力するのは大変です。Finderからターミナルにファイルをドラック&ドロップすると勝手にファイルパスが記入されるので是非使ってみてください。
```pemファイルのアクセス権限を強くする
$ chmod 400 pemのファイルパス
```
僕の場合こんな感じになりました。
![shirakawayoshimaru1 — bash — 120×24 2016-04-15 12-21-31.jpg](https://qiita-image-store.s3.amazonaws.com/0/67575/183ebd80-8f17-b074-c4d8-cd54cae0c53a.jpeg)

それではターミナルを使って実践していきます。

```lang:ssh接続コマンド
$ ssh -i pemファイルのパス userName@ipアドレス
```

僕の環境ではこうなりました。
![shirakawayoshimaru1 — bash — 120×24 2016-04-15 12-24-17.jpg](https://qiita-image-store.s3.amazonaws.com/0/67575/dcea2898-34e7-de35-64db-a2db9f7ba543.jpeg)

初めて接続するipアドレスには「本当にここに接続していいの？」的な確認がでるのでyesと入力しましょう。
![shirakawayoshimaru1 — ssh — 120×24 2016-04-15 12-24-57.jpg](https://qiita-image-store.s3.amazonaws.com/0/67575/53aa1487-4254-964e-58ab-90e2c363bfc3.jpeg)

無事ssh接続ができた場合は、こんな感じになります。
![shirakawayoshimaru1 — ec2-user@ip-172-16-0-10:~ — ssh — 120×24 2016-04-15 12-28-55.jpg](https://qiita-image-store.s3.amazonaws.com/0/67575/b04aa81c-18e5-e620-7a17-2ab867fc4d8b.jpeg)

###4-2.必要なものをinstallする
nodesとreisとnpm をインストールしてください。
コマンドを入力したらいろいろ聞かれますが全てyを入力してください。

```
$ sudo yum install nodejs redis npm --enablerepo=epel
```

次にcoffee-scriptとhubをインストールしてください。
コマンドを入力したらいろいろ聞かれますが全てyを入力してください。

```
$ sudo npm install -g coffee-script hubot yo generator-hubot
```

これで必要なものは全てinstallすることができました。

###4-3.Hubot作成
まずはHubotの作業フォルダを作成しましょう。
これで「QiitaMaruBotフォルダ」を作成してその中に入れます。

```
$ mkdir QiitaMaruBot
$ cd QiitaMaruBot/
```

次にHubotを作成します。
Hubotの作成は簡単でこれだけです。

```
$ yo hubo
```

Owner:適当に入力
Bot Name: 小文字のみ
Description: 適当に入力
Bot Adapter: slackと入力


次にHubotにToken(SlackのHubot管理画面にあったやつ)を設定します。
xoxb-34928263845-fhogehogehogehogheohgehogeの部分は自分のTokenに変えてください。

```
$ export HUBOT_SLACK_TOKEN=xoxb-34928263845-fhogehogehogehogheohgehoge
```

以上でHubotの作成になります。

###4-4.Hubot実行
ここではEC2サーバーの中でHubotが正常に動作しているか確認します。
Hubotに対して「ping」というメッセージを送った時に「pong」と帰って来れば成功です。

まずはHubotを実行します。
(QiitaMaruBot/bin/hubotコマンドを実行しています。)

```
$ ./bin/hubot
```

まだHerokuの設定をしていないのでエラーがでますが、気にせずEnterを押せば大丈夫です。
こんな感じになればok
![shirakawayoshimaru1 — ec2-user@ip-172-16-0-10:~:QiitaMaruBot — ssh — 120×24 2016-04-15 12-46-18.jpg](https://qiita-image-store.s3.amazonaws.com/0/67575/b67df3ca-e8ad-7150-c4e7-0aad8be02596.jpeg)

後は、こんな感じでqiitamarubotにメッセージを送ってpongが帰って来ればokです。
**qiitamarubotの部分は自分がつけたBOTの名前に適宜変えてください**

```
qiitamarubot> qiitamarubot ping
```

こんな風に
![shirakawayoshimaru1 — ec2-user@ip-172-16-0-10:~:QiitaMaruBot — ssh — 120×24 2016-04-15 12-47-37.jpg](https://qiita-image-store.s3.amazonaws.com/0/67575/b3cd1c69-3b5e-eb74-96a9-2cec5bdbfb22.jpeg)

これでHubot実行は終わりです。

正常に動作していればexitコマンドを実行してHubotを停止させます。

```
qiitamarubot> exit
```

###4-5.動作確認テスト
実際にSlackのチャンネルに反応して、SlackのチャンネルにBOTが投稿できるか確認します。
まずはHubotをSlackと接続するコマンドを実行します。

```
$ ./bin/hubot --adapter slack
```

実行後にSlackの画面に行って、BOTがオンラインになっていればおkです。
![Slack 2016-04-15 12-54-16.jpg](https://qiita-image-store.s3.amazonaws.com/0/67575/ba0bef08-87ac-4036-817c-15029db546ff.jpeg)

後はBotを招待したチャンネルに行って、「qiitamarubot ping」と打って「pong」が帰って来れば成功です。
![Slack 2016-04-15 12-56-13.jpg](https://qiita-image-store.s3.amazonaws.com/0/67575/8687df9a-9df0-d975-5bd0-08c0ebfbe33b.jpeg)

楽しいw

動作確認テストは以上になります。

##5.Tips
Tipsでは、
5-1.ssh接続を終了した後でもBOTをオンラインにする方法
5-2.BOTを停止させる方法
を書きます。

###5-1.ssh接続を終了した後でもBOTをオンラインにする方法
普通に`./bin/hubot --adapter slack`コマンドを打っただけだとssh接続を終了するときにBOTも終了してしまいます。
これではBOTとして不十分なのでssh接続を終了してもBOTタスクが実行され続けるようバックグラウンドでhubotを実行しましょう。
やり方は簡単で

```
$ nohup ./bin/hubot --adapter slack &
```
このコマンドを実行するだけです。
nohupと&をつけることでバックグラウンドでhubotが実行されます。

###5-2.BOTを停止させる方法
nohupコマンドで実行したプロセスは明示的に終了させる必要があります。
やり方は簡単で、
1:プロセスのIDを調べる
2:プロセスをkillする
です。

まずはプロセスのIDを調べましょう。

```
$ ps aux | grep hubot
```
これで調べることができます。grepでhubotに関するプロセスのみを出力させます。

![shirakawayoshimaru1 — ec2-user@ip-172-16-0-10:~:QiitaMaruBot — ssh — 112×24 2016-04-15 13-06-15.jpg](https://qiita-image-store.s3.amazonaws.com/0/67575/b7305448-49ed-3e64-5a84-d8f55c679642.jpeg)
2つくらいプロセスがあると思うのですが、`--adapter slack`が付いている方のプロセスIDをメモります。

次にプロセスをkillさせます。

```
$ kill プロセスID
```
でkillできます。

これを実行することでhubotを停止させることができます。

以上!お疲れさまでした！！

##参考url
http://bitwave.showcase-tv.com/slackと連携するhubotを3分でインストール/