読者です 読者をやめる 読者になる 読者になる

波打際のブログさん

主に、プログラミング備忘録など。

Slackでボットを5秒以内に作れるツールを作った

Slack Rails BOT Javascript

はじめに

 最近エンジニア界隈で話題沸騰中のSlackですが、IRCに比べてBOTを作る際に手間がかかります。自称クソボットクリエイターの私にとってはこれは死活問題です。

そこでボットを超簡単に量産できるプロダクトを開発して公開したのでご紹介いたします。

BotHeaven (ぼっとてんごく)

 Slackボットを大量生産できるプロダクトです。いわばボットファームです。

SlackのOAuthでBotHeaven*1にログインし、Javascriptで数行のコードを書くだけでSlackボットを簡単に生成できます。

HTTP通信機能や、ボット毎のストレージなどを持てることが特徴です。

f:id:alfa-jpn:20150523183217p:plain

デモ

このような感じでボットを実装します。

f:id:alfa-jpn:20150523183417p:plain

するとこのようなSlackボットが生まれます。

f:id:alfa-jpn:20150523183437p:plain

仕組み

Rails + V8 + Slack

インストール方法

 VPS等はもちろん、Herokuにもデプロイして使えるような設計になっています。

システムにRuby(2.0.0以上)とbundlerがインストールされていることを前提に解説します。

1. 本体をデプロイする

下記のリポジトリからBotHeaven本体を入手し、実行するマシンの任意のディレクトリに配置します。github.com

2. 環境変数を設定する

下記の環境変数をセットします。

SLACK_TEAM_ID=SlackのチームID
SLACK_APP_ID=SlackのアプリケーションID
SLACK_APP_SECRET=Slackのアプリケーションキー
SLACK_BOT_NAME=Slackのボット名
SLACK_BOT_TOKEN=Slackのボットトークン
SECRET_KEY_BASE=任意の暗号化キー
RAILS_SERVE_STATIC_FILES=1 # Herokuなどにデプロイする場合はセット
SlackのチームID

下記のページのAPIテストで表示することができます。

SlackのアプリケーションIDとキー

下記のページからアプリケーションを生成して取得できます。

アプリケーション生成時、OAuthのリダイレクトURLに `http://{ホスト}/auth/slack/callback` を設定してください。

f:id:alfa-jpn:20150523185259p:plain

Slackのボット名とトークン

下記のページからボットインテグレーションを生成して取得します。

任意の暗号化キー

Railsが暗号化などに使用するキーです。SHA256で適当に値を生成するなどして設定してください。

3. Gemをインストールする

Gemをインストールします。

bundle install --path vendor/bundle

4. DBを初期化する

マイグレーションコマンドを実行してDBを初期化します。

デフォルトではsqlite3で動作します。herokuで動かす場合はページ下部の データベースに関して の項目を確認してください。

bundle exec rake db:migrate RAILS_ENV=production

5. 実行する

あとは実行するだけです。

bundle exec rails s -e production

以上がインストールと実行手順になります。
もしわからないことがあればコメント欄やgithubのissueでお気軽にご質問ください。

使い方

インストールが終わったら、SlackOAuthでログインしてボット作成ボタンをクリックするとサンプルコード付きのボットが生成されます。*2

ボットが使える便利なAPI

リポジトリのREADME.mdをご覧ください。

その他

データベースに関して

 特に指定しない場合はsqlite3で動きます、heroku等で動かす場合は下記の環境変数を追加することでpostgresqlを使用することができます。

ADAPTER=pg
DATABASE_URL=postgresqlのデータベースURL

その他のデータベースを利用する場合はActiveRecord用のアダプターをGemfileに追加してdatabase.ymlを書き換えてください。次のリリースでは上記のような環境変数mysqlも使えるようにしようと思います。

*1:BotHeavenという名前ですが、時代はクラウド(Slack)を超えてヘブン(BotHeaven)へ、という今考えた後付の命名理由があります。

*2:これが5秒です。。。。ということでタイトル許してください。