RubotyをHerokuにデプロイしてSlackで使う
人気のチャットアプリであるSlackと id:r7kamura さんが作ったRuby製Hubotクローンである Ruboty を試してみたかったので、技忘録。
最近チームメンバーに編成があって、「まゆゆ」というニックネームの仲間が少しの間、旅に出ることになり、とっても寂しいので寂しさを紛らわすために「まゆゆbot」を作ってみることにします。
前提
RubotyはHerokuにデプロイしますので、Herokuアカウントの作成やHeroku Toolbeltのインストールは済ませてあることを前提とします。
Slack側の設定
Gatewayの設定
Botアカウントを作る
- AdministrationのManage Your Teamを開き、Invite New Membersから適当なメールアドレスを入力してInvitationメールを送信します
- Invationメールが届いたら、Activationして適当に画像を設定しておきます
Ruboty
ruboty-templateをForkする
Rubotyをカスタマイズしますので、r7kamuraさんの ruboty-templateをForkします。
ForkしたRubotyをHeroku上にデプロイする
ForkしたリポジトリのREADMEにあるHerokuボタンを押して、RubotyをHerokuにデプロイします。
デプロイ画面で以下の内容を入力してDeploy for Freeをクリックします
- SLACK_PASSWORD
- SLACK_ROOM
- botを常駐させたいRoom Nameを入力
- SLACK_TEAM
- Team Name(xxx.slack.com のxxx部分)
- SLACK_USERNAME
- botアカウントの名前(いまはmayubot)
これで、HerokuにRubotyがデプロイされます。
動作確認
Rubotyがデプロイできたら、Slack上で話しかけてみます。
う、う、うごいた〜!! ここまで、コードは1行も書いてません。オドロキ。
RubotyはHubotとは異なり、Rubyで動作しており、その挙動はすべてGemfileによってGemプラグインとして管理されています。そのため、Botに新しい役割を任せたい・挙動を増やしたい場合には新しくGemを作って公開する必要があります。
Hubotの場合は script
ディレクトリ内に .coffee ファイルを置いてBotを再起動すれば挙動が追加できたので、手軽さという意味ではHubotの方が良いかもしれませんが
- Rubyで挙動が書ける
- Gemで管理できる(配布のラクさ)
といった点ではRubotyにも良い点はありますね。
プラグインを追加する
GemをGistで作成する
さて、無事SlackとRubotyが連携できたので、自作のプラグインを作って新しい挙動を追加してみます。「まゆゆ」はおさわり探偵小沢里奈のなめこが大好きだったので、「@mayubot なめこ」と唱えると、「んふんふ」と返すプラグインを作ってみます。Gemで公開する必要があるので、GistでGemを公開したいと思います。
この2つをGistで作成します。こんな感じです。
Gemfileに追加
続いて、ローカルにCloneしたリポジトリのGemfileに以下を追記して、 bundle install
します。
source "https://rubygems.org" gem "rake" gem "ruboty-alias" gem "ruboty-cron" gem "ruboty-google_image" gem "ruboty-redis" gem "ruboty-slack" gem "nfu", :git => "https://gist.github.com/e0f5147312c921ba6ee0.git” # これを追記
Gemがインストールできたら、herokuへpushしてデプロイします。
$ git add .
$ git commit -m “add nfu gem”
$ git push heroku master
なめこを唱えてみる
デプロイが完了したら、いよいよSlack上で @mayubot へ向けて呪文を発動。
動いた〜!!!!!カンタンにプラグインを追加できました。
所感
- Rubyでプラグインが作れるのがGood
- HubotはNode.jsでCoffeeScriptでプラグインを書くのですが、Rubyで書けるのはうれしいですね
- Gemで管理できるのも良い
- プラグインをGemで管理するのはエレガントというか、スマートなので賛否あると思うけど個人的には好き
- GistでGemを公開するのはすばらし
- これもr7kamuraさんのエントリを参考にしました。すばらし。普通Gemを公開するなら、
bundle gem
して、gem build
してgem push
するみたいなことが必要なんですが、省略できます。
- これもr7kamuraさんのエントリを参考にしました。すばらし。普通Gemを公開するなら、
- Herokuボタンすごい
- Herokuボタン、すごいです。超カンタンにアプリをHeroku上にデプロイできます。
- Ruboty-Template
- こいつをForkすれば自分が好きにいじれるのでTravisCIを組み合わせればmaster mergeを契機にデプロイを走らせるみたいなこともできてGoodです
- Botを擬人化するのがオモロイ
おまけ(Herokuの設定)
HerokuアプリをローカルにCloneして、デプロイする
SSH公開鍵の登録
$ heroku keys:add
で公開鍵を登録します。鍵がなければ ssh-keygen
コマンドを使って鍵ペアを作成して再度上記コマンドを実行します。
HerokuアプリをCloneする
$ heroku git:clone -a $heroku_project_name
でHerokuアプリをCloneできます。
Herokuアプリをデプロイする
$ git push heroku master
でHerokuへローカルのリポジトリをpushしてデプロイできます。
次回は「RubotyサーバとGitHubを連携して自動デプロイする」をお送りします(仮)。