ruby で 簡単なslack の bot を 作ろう！

# 目的

- 簡単なslackアプリを作成する方法をまとめる。

# 成果内容

1. 新規のワークスペースを作成してbotを追加する。
1. bot宛てに「ping」と送信された時に、「pong」と返答をする基本的なbotを作成する。

# 実施概要

1. テスト用のワークスペースを作成する。
1. slack APIを使用してbotを作成する。
1. 必要なGemをインストールする。
1. Rubyでコードを書く。
1. slackアプリで試してみる。

# 実施詳細

1. テスト用のワークスペースを作成する。
  1. 「ワークスペースを新規作成する」をクリックする。
  ![スクリーンショット 2019-10-19 14.36.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/3b0d7372-7a25-607e-dbcd-17474f380c64.png)
  1. 画面の案内に沿って新しいワークスースを作成する。(筆者は「miriwo_test」というワークスペースを作成した。)
  ![スクリーンショット 2019-10-19 14.38.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/d6ed5795-6df8-b7ea-878f-123cef75653c.png)
1. slack APIを使用してbotを作成する。
  1. 下記リンク先に飛び「Start Building」をクリックする。
  [https://api.slack.com](https://api.slack.com)
  1. 下記画像のようなウインドウが開く。
  ![スクリーンショット 2019-10-19 14.27.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/8ec1dfd5-b282-dcec-f8df-c916c1b36347.png)
  1. 「App Name」には今回作成する任意のbot名を入力する。(筆者はbot名を「test」とした。)
  ![スクリーンショット 2019-10-19 14.32.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/539fc796-35c5-51b6-5d92-89029919951b.png)
  1. 「Development Slack Workspace」の▼をクリックし「Sign in to another workspace」をクリックする。
![スクリーンショット 2019-10-19 14.32.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/f692e644-7349-f071-b131-e8d5d06327d1.png)
  1. 先に作成したワークスペースを選択する。(筆者は「miriwo_test」というワークスペースを作成した。)
  ![スクリーンショット 2019-10-19 14.47.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/68d01d4e-800d-114f-c5c7-8c4eae5b7831.png)
  1. 「App Name」と「Development Slack Workspace」に自分の意図した内容が記載されていることを確認する。
  ![スクリーンショット 2019-10-19 14.47.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/008a3f94-fb09-44bb-c45c-8630d35bcb08.png)
  1. 「Create App」をクリックする。
  1. 下記の画面になる。
  ![スクリーンショット 2019-10-19 14.54.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/93bc237f-8532-e4cf-a27c-3ecba7a9fa03.png)
  1. 画面中央の「Bot」をクリックする。
  ![スクリーンショット 2019-10-19 14.56.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/c33948db-8cb7-5b43-424a-0fee9eb5dc30.png)
  1. 「Add a Bot User」をクリックする。
  ![スクリーンショット 2019-10-19 14.59.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/0f108878-1563-9441-2ca4-c45fc62e70b5.png)
  1. 「Always Show My Bot as Online」をOnにして、「Add Bot User」をクリックする。
  ![スクリーンショット 2019-10-19 15.02.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/56587f2d-9363-2a1b-af72-5e16697653f1.png)
  1. 左側のメニューの「Settings」の「Basic Infomation」をクリックして、「Add features and functionality」をクリックする。
  1. 下記の画面になったことを確認する。
  ![スクリーンショット 2019-10-19 15.07.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/04e7fe0e-d255-aaec-bc74-b0d4752562e9.png)
  1. 「Permission」をクリックする。
  ![スクリーンショット 2019-10-19 15.04.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/4e9a4ae5-f146-d3ea-c422-9ade03ec7a12.png)
  1. 「Install App to Workspace」をクリックする。
  ![スクリーンショット 2019-10-19 15.08.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/339f748c-a6b9-75e5-7ee3-52aa70c39124.png)
  1. 「許可する」をクリックする。
  ![スクリーンショット 2019-10-19 15.09.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/e9117df9-901d-e894-b695-0670178df183.png)
  1. 下記の画面になったことを確認する。(この画面の内容を後で使用するため、消さない方が楽である。)
  ![スクリーンショット 2019-10-19 15.11.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/601e61ba-aa43-a388-12b4-be0000cfcca3.png)

1. 必要なGemをインストールする。
  1. ターミナルを開く。
  1. 任意のフォルダに移動し下記コマンドを実行する。

  ```
  $ vi Gemfile
  ```

  1. Gemfileが開けたら`i`をキー入力して下記の内容を記載する。

  ```
  source 'https://rubygems.org'
  
  gem 'slack-ruby-bot'
  gem 'async-websocket', '~>0.8.0'
  ```

  1. 記載が完了したら`esc`をキー入力→`:wq`をキー入力してgemfileを保存する。
  1. 下記コマンドを実行してGemをインストールする。
  
  ```
  $ bundle install
  ```

1. Rubyでコードを書く。
  1. Gemfileがあるフォルダに移動し、下記コマンドを実行してrubyのファイルを作成する。

  ```
  $ vi pongbot.rb
  ```
  1. pongbot.rbが開けたら`i`をキー入力して下記の内容を記載する。

  ```ruby
  require 'slack-ruby-bot'

  class PongBot < SlackRubyBot::Bot
    command 'ping' do |client, data, match|
      client.say(text: 'pong', channel: data.channel)
    end
  end

  PongBot.run
  ```

  1. 記載が完了したら`esc`をキー入力→`:wq`をキー入力してpongbot.rbを保存する。
1. サービスを起動させる。
  1. 下記の画像の画面を開き「Bot User OAuth Access Token」の「Copy」をクリックする。
  ![スクリーンショット 2019-10-19 15.27.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/dcb92b86-7cff-f4d8-9ad1-bb227fb485e7.png)
  1. ターミナルに移動し、pongbot.rbが見えフォルダに移動し、下記コマンドを実行する。(`$ SLACK_API_TOKEN=`のあとは直前でコピーした内容を記載する。←コピーした内容は筆者の画像の文字列とは異なります。)
  
  ```
  $ SLACK_API_TOKEN=xoxb-803692245030-803348029943-XXXXXXXXXXXXXXXXXXXXXXXX bundle exec ruby pongbot.rb
  ```

  1. 上記コマンドを実行するとコンソールにたくさん文字が流れるが気にしないで良い。ターミナルは閉じずにそのままにする。

1. botのユーザをslackのワークスペースに追加する。
  1. slackで最初に作成したワークスペースを開く。(slackのアプリにワークスペースを追加する方法は[こちら](https://qiita.com/miriwo/items/bd8e2cf2d3692e244498))
  1. 任意のチャンネルで下記の内容を入力し「送信ボタン」をクリックする。  
  ※bot名は「Bot User OAuth Access Token」の「Copy」を行った画面の左上(slack apiロゴの下あたり)に記載されています。
  
  ```
  /invite @botのユーザ名 
  ```

  1. 筆者の場合はbot名を`test`としたため下記の画像ようになる。
  ![スクリーンショット 2019-10-19 15.44.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/cba7e33b-5ad7-72c6-172f-8efbda163d66.png)
  1. 下記画像のようにbotのユーザが追加される。
  ![スクリーンショット 2019-10-19 15.50.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/9fbe1373-1472-f752-6d61-8b8d2b08e807.png)

1. botが正しく動作するか試してみる。
  1. botのユーザを追加したワークスペースの任意のチャンネルで下記の内容を入力し「送信ボタン」をクリックする。  
  ※bot名は「Bot User OAuth Access Token」の「Copy」を行った画面の左上(slack apiロゴの下あたり)に記載されています。

  ```
  @botユーザ名 ping
  ```

  1. 筆者の場合はbot名を`test`としたため下記の画像ようになる。
  ![スクリーンショット 2019-10-19 15.59.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/37ece93f-82ea-05a4-ed75-bbdf93a2b1a0.png)  
  ![スクリーンショット 2019-10-19 16.00.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/cb02a22c-c4de-4045-2038-cf1ecb2585e6.png)
  1. 正常にbotが機能していれば下記画像のように「pong」と返してくる。![スクリーンショット 2019-10-19 16.01.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/39be405f-22f4-65f0-bd04-d3f0c7d6a1db.png)

1. 一旦botを動かしたあとでpongbot.rbを編集したい時

反応する文言の修正や返してくる言葉を変えたい時はpongbot.rbのファイルを修正する必要がある。

1. コマンド`$ SLACK_API_TOKEN=xoxb-803692245030-803348029943-XXXXXXXXXXXXXXXXXXXXXXXX bundle exec ruby pongbot.rb`を実行したターミナルで「control」+「c」をする。
1. pongbot.rbを編集する。
1. コマンド`$ SLACK_API_TOKEN=xoxb-803692245030-803348029943-XXXXXXXXXXXXXXXXXXXXXXXX bundle exec ruby pongbot.rb`を実行してbotを再開させる。