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


目的

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

成果内容

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

実施概要

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

実施詳細

  1. テスト用のワークスペースを作成する。
    1. 「ワークスペースを新規作成する」をクリックする。
    2. 画面の案内に沿って新しいワークスースを作成する。(筆者は「miriwo_test」というワークスペースを作成した。)
  2. slack APIを使用してbotを作成する。

    1. 下記リンク先に飛び「Start Building」をクリックする。 https://api.slack.com
    2. 下記画像のようなウインドウが開く。
    3. 「App Name」には今回作成する任意のbot名を入力する。(筆者はbot名を「test」とした。)
    4. 「Development Slack Workspace」の▼をクリックし「Sign in to another workspace」をクリックする。
    5. 先に作成したワークスペースを選択する。(筆者は「miriwo_test」というワークスペースを作成した。)
    6. 「App Name」と「Development Slack Workspace」に自分の意図した内容が記載されていることを確認する。
    7. 「Create App」をクリックする。
    8. 下記の画面になる。
    9. 画面中央の「Bot」をクリックする。
    10. 「Add a Bot User」をクリックする。
    11. 「Always Show My Bot as Online」をOnにして、「Add Bot User」をクリックする。
    12. 左側のメニューの「Settings」の「Basic Infomation」をクリックして、「Add features and functionality」をクリックする。
    13. 下記の画面になったことを確認する。
    14. 「Permission」をクリックする。
    15. 「Install App to Workspace」をクリックする。
    16. 「許可する」をクリックする。
    17. 下記の画面になったことを確認する。(この画面の内容を後で使用するため、消さない方が楽である。)
  3. 必要なGemをインストールする。

    1. ターミナルを開く。
    2. 任意のフォルダに移動し下記コマンドを実行する。
  $ vi Gemfile
  1. Gemfileが開けたらiをキー入力して下記の内容を記載する。
  source 'https://rubygems.org'

  gem 'slack-ruby-bot'
  gem 'async-websocket', '~>0.8.0'
  1. 記載が完了したらescをキー入力→:wqをキー入力してgemfileを保存する。
  2. 下記コマンドを実行してGemをインストールする。
  $ bundle install
  1. Rubyでコードを書く。
    1. Gemfileがあるフォルダに移動し、下記コマンドを実行してrubyのファイルを作成する。
  $ vi pongbot.rb
  1. pongbot.rbが開けたらiをキー入力して下記の内容を記載する。
  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. サービスを起動させる。
  2. 下記の画像の画面を開き「Bot User OAuth Access Token」の「Copy」をクリックする。
  3. ターミナルに移動し、pongbot.rbが見えフォルダに移動し、下記コマンドを実行する。($ SLACK_API_TOKEN=のあとは直前でコピーした内容を記載する。←コピーした内容は筆者の画像の文字列とは異なります。)
  $ SLACK_API_TOKEN=xoxb-803692245030-803348029943-XXXXXXXXXXXXXXXXXXXXXXXX bundle exec ruby pongbot.rb
  1. 上記コマンドを実行するとコンソールにたくさん文字が流れるが気にしないで良い。ターミナルは閉じずにそのままにする。

    1. botのユーザをslackのワークスペースに追加する。
  2. slackで最初に作成したワークスペースを開く。(slackのアプリにワークスペースを追加する方法はこちら)

  3. 任意のチャンネルで下記の内容を入力し「送信ボタン」をクリックする。

    ※bot名は「Bot User OAuth Access Token」の「Copy」を行った画面の左上(slack apiロゴの下あたり)に記載されています。

  /invite @botのユーザ名 
  1. 筆者の場合はbot名をtestとしたため下記の画像ようになる。
  2. 下記画像のようにbotのユーザが追加される。

    1. botが正しく動作するか試してみる。
  3. botのユーザを追加したワークスペースの任意のチャンネルで下記の内容を入力し「送信ボタン」をクリックする。

    ※bot名は「Bot User OAuth Access Token」の「Copy」を行った画面の左上(slack apiロゴの下あたり)に記載されています。

  @botユーザ名 ping
  1. 筆者の場合はbot名をtestとしたため下記の画像ようになる。
  2. 正常にbotが機能していれば下記画像のように「pong」と返してくる。

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

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

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