Heroku + RubyでSlackのBotを制御
SlackのBotをRubyで制御して、それをHeroku上で動かしたい
社内にはコーヒーマシンが置いてあり、以前は紙媒体のチケットを購入して利用していたのですが、これをチケットレスで管理したいということになり、社内コミュニケーションツールとして使っていたSlackのBotで管理しようということになりました。その時の開発メモになります。
開発環境
MAC OS X 10.10.5
Ruby: ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin14]
SlackでBotを作成
Manage AppsからAppsの管理画面を開き、ページ上部の検索フォームにBotsと入力し、Add Configurationボタンを押下します。
画面の指示に従いBotの名前を入力して進めていくとBotが作成されます。作成された際の、この画面のAPI Token
をメモしておきます。
次に任意のディレクトリを作成し、コードを書いていきます。
Gemの追加
以下のリンク先を参考にGemfileにgemを追加します。
Gemfile
gem ‘slack-ruby-client’
gem ‘eventmachine’
gem ‘faye-websocket’
terminalで
bundle install
Gemfileはbundle init
で作成できます。
Botを制御するプログラム
app.rb(ファイル名は任意)にbotを動かすファイルを作成します。
require 'slack-ruby-client' client = Slack::RealTime::Client.new(token: 'メモしておいたAPI Token') # 接続が成功した時にterminalに`connected!`と表示される client.on :hello do puts 'connected!' end # Botがいるチャネルに何かメッセージを投げた際に動く client.on :message do |data| case data.text when 'bot hello' then client.message channel: data.channel, text: "Hello <@#{data.user}>!" when /^bot/ then client.message channel: data.channel, text: "Hello <@#{data.user}>, what do you want?" else client.message channel: data.channel, text: "Sorry I don't understand..." end end client.start!
ローカルで動作確認
terminalで、ruby app.rb
で動作確認
正常にプログラムが動けばtermianlにconnected!
と表示され、SlackのBotが入っているチャネルでメッセージを投げるとこのように反応してくれます。
Herokuにデプロイ
ローカルで動作確認ができたのでHerokuにデプロイします。
Herokuのアカウント作成
まずはHerokuのアカウントを作成します。
Cloud Application Platform | Heroku
アカウントを作成したら、Herokuをterminalで動かせるようにToolbeltをインストールします。
Heroku CLI | Heroku Dev Center
terminalで
brew install heroku
試しにheroku login
と打ち、ログインできるか確認してみてください。
Herokuのアプリを作成
先ほど作成したプログラムをHeroku上で動かすためにHerokuのアプリケーションを作成します。
terminalで
heroku create 任意のアプリケーションの名前
Procfileを作成
Herokuにデプロイする前にProcfileを作成します。
Procfile
app: bundle exec ruby app.rb
Procfileを作成したらHerokuにデプロイします。
terminalで
git add .
git commit -m ‘init commit’
git push heroku master
もし、commitに含めたくないファイルがあれば.gitignore
を作成して、含めないようにしましょう。
気付いたら.gitignoreはgiboで自動生成する時代になっていた - Qiita
terminalで
Herokuで動作確認
HerokuのアプリケーションのDashboardからDynosを立ち上げてSlackで動作確認します。
ローカルで動作確認した時のようにBotが反応してくれればOKです。
terminalで立ち上げたい場合は
heroku ps:scale app=1 –app app_name
立ち下げは
heroku ps:scale app=0 –app app_name
API Tokenを環境変数に設定する
さて、先ほどはapp.rbに直接API Tokenを書いていましたが、外から見られる可能性があり、悪用されるかもしれないので、環境変数に設定します。
herokuに環境変数を設定
terminalで
ローカルで動作確認する時にはdirenvを用いて環境変数を設定
terminalで
brew install direnv
Shellにhookを追加します。
export EDITOR=vim
eval “$(direnv hook bash)”
.envrcを作成 terminalで
direnv edit .
.envrcに環境変数を設定
まとめ
今回は開発環境を整えて、簡単なBotの制御までをまとめました。コーヒーマシン利用をBotに管理させるまでには、まだ色々とあるのですが、今回はここまでにします。実装自体も去年の年末ぐらいだったので、忘れている部分も多く、思い出しながら記事にしていけたらなと思っています。(その時に、まとめておかなかったことに後悔)