最近Slackを使い始めたり、「Slack入門」刊行記念LT大会に参加させていただいたこともあり、Slack Bot作成に興味が湧いてきました。
調べてみたところ、簡単なBot作成まで行えたので、忘れないように手順をメモしておこうと思います。
Slack Botの動作環境+開発環境
Slack Botの動作環境はUbuntu Server 16.04 LTS、開発環境はRubyとslack-api gemを利用しています。
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04 LTS"
開発環境の準備
以下の手順で必要なパッケージをインストールします。
$ which ruby
$ ruby --version
ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu]
$ sudo gem install bundle
gemのslack-apiをインストールする際に必要となるパッケージをインストールします。
$ sudo apt-get install gcc g++ ruby-dev libssl-dev
Gemfileには以下の内容を記載します。
source 'https://rubygems.org'
gem 'slack-api'
bundle経由で必要なgemをインストールします。
$ bundle install --path vender/bundle
$ bundle list
Gems included by the bundle:
* bundler (1.12.5)
* eventmachine (1.2.0.1)
* faraday (0.9.2)
* faraday_middleware (0.10.0)
* faye-websocket (0.9.2)
* multi_json (1.12.1)
* multipart-post (2.0.0)
* slack-api (1.2.3)
* websocket-driver (0.6.4)
* websocket-extensions (0.1.2)
これで準備完了です。
簡単なBotを作成する
今回はNEW GAME!をモチーフにして簡単なBotのサンプルを作成してみます。
コードは以下のような感じになります。また、あらかじめSlack API用のトークンを取得し、環境変数SLACK_TOKENに設定しておきます。
#!/usr/bin/env ruby
# coding: utf-8
require 'slack'
Slack.configure {|config|
config.token = ENV['SLACK_TOKEN']
}
client = Slack.realtime
start_time = Time.now.to_i
client.on :message do |data|
post_time = data["ts"].sub(/\..*$/, "").to_i
next if post_time < start_time
msg = data["text"]
if msg =~ /^今日も一日/
param = {
token: ENV['SLACK_TOKEN'],
channel: data["channel"],
text: 'がんばるぞい! ',
username: '涼風青葉@イーグルジャンプ',
icon_url: 'http://newgame-anime.com/assets/special/twticon/ng_icon_1.jpg'
}
Slack.chat_postMessage(param)
end
end
client.start
上記のスクリプトを実行します。
$ bundle exec ruby ./SlackBotSample.rb
この状態でSlackから「今日も一日」と入力すると、涼風さん(Bot)が「がんばるぞい!」と応答してくれます。
まとめ
Slack Botを作成するための環境構築手順、基本的なBotのコード作成を行ってみました。基本的なBotの動作の流れは把握できた感じなので、これを発展させてNEW GAME! Opsを実現したいと思います。