LoginSignup
13
14

More than 5 years have passed since last update.

slack bot(hubot)をBluemixで動かす

Posted at

前置き

他の多くのエンジニア組織がそうしているように、私の部署でもslackが導入されています。
slackには様々なbotがいたりしますが、中でも私のところではfulls2ちゃんというbotが
仕事の合間の雑談促進や気分転換に大きく貢献してくれています。

0a2ac091-f32b-1535-b026-9b620100e9d5 2.png

そんなみんなの癒しfulls2ちゃんですが、よくしにます。

スクリーンショット 2017-01-07 12.51.48.png

おそらくherokuで動いているのか、ちょくちょくスリープしてしまうみたいで。

Herokuでbotを運用する時代は終わった。これからはIBM Bluemixを使って無料で運用する

  • 30分アクセスしなければスリープ
  • 24時間連続で動かすことができない(6時間のスリープ)

bot作成者の先輩も忙しいですし、「止まったから動かしてくださ〜い」なんて頼みに行くのも恥ずかしいですし、そもそも常に動いていてほしいじゃないですか。

そういうわけで、放置していても24時間フル稼働してくれるbotを設定することにしました。

Bluemixについて

Bluemixとは

IBMが提供するクラウド環境PaaSです。
hubotにはherokuで動かすような設定がデフォルトで備わっているのもあってか、botの運用はとりあえずherokuみたいな風潮があったようですが、herokuの新料金体制によって無料で24時間動かせなくなりました。
Bluemix以外にも、Google App Engineでも24時間無料で運用することはできるみたいですが、これやる限りではBluemixの方が設定も要らず簡単そうでした。

Bluemixのインスタンス無料枠

一ヶ月あたり375GBのインスタンスを無料で使えます(2017年1月現在)。
なので例えば一つのインスタンスに512MBを割り当てれば、24時間×31日無料で動かすことができるわけです。

ただ中には無料枠を超えるととんでもない額のサービスもあるので、他のサービスを使う場合は要確認です。Insights for TwitterとかWatson Natural Language Classifierとか。

作り方

やることさえ分かれば、あとは簡単でした。
ちなみにbotの中身はgithub社が作ったhubotというものです。
あと環境はmacです。

1. slackサイドでbotの箱を作る

  • slackのapp directoryにアクセス
  • categoriesのbots > hubot > configuration をクリック
  • usernameを聞かれるので、作成するhubotの名前を入れる  ※あとで変更可
  • setup integrationの画面が開く ここでbotのアイコン画像などが設定できる。必要に応じて記入して Save Integrationをクリック

と、文字だけで書いても分かりにくいと思うので、キャプチャ付きのこちらを参考に...
SlackのBot(hubot)を作ってみる

尚、setup integrationの画面に表示されているHUBOT_SLACK_TOKEN=xxxXXXXXxxxXXXXXのところは後ほど使います。

ひとまず箱完成。

2. ローカルでbotの中身を作る

  • node.jsとredisが無ければインストール
$ brew install node redis
  • hubotをインストール
$ npm install -g yo generator-hubot

globalオプションをつけてyoとgenerator-hubotをインストールします。
yoとは、Yeomanと呼ばれるnode.js製のプロジェクトのテンプレートを対話式で生成できるツールです。

  • プロジェクトを作成
$ mkdir yourHubotName
$ cd yourHubotName
$ yo hubot 

yoを実行するとAAがでてきて以下の設定を変えることができます。
- 作成者
- botの名前
- 説明
- Bot adapter
上三つは空でも大丈夫ですが、bot adapterは、今回はslackで動かすのでslackと設定してあげます。

  • ローカルで動作確認してみる
$ bin/hubot

yourHubotName> yourHubotName ping

返事が来たらおっけい。

参照
OSXで、Hubotをインストールするまでやってみる

3.slack上でbotを動かす

  • 作ったhubotの環境変数に、1で出てきたHUBOT_SLACK_TOKEN=xxxXXXXXxxxXXXXXを設定してあげる
$ export HUBOT_SLACK_TOKEN=xxxXXXXXxxxXXXXX
  • 以下のコマンドで実行
$ bin/hubot --adapter slack

slackを確認しにいきましょう。
botがaliveになっていて、DM状態でpingコマンドを投げると先ほどと同じように返してくれるかと思います。

それでは更にimg hogehogeコマンドで画像検索を試してみましょう。
※image meをimgだけでも実行できます。

237d3636-a948-1b86-1b2c-306534608ab.png

このようなエラーが出た人は下の[番外編]を参照してください。

4. Bluemixにデプロイ

botができたので、いよいよPaaS環境にデプロイして、24時間フル稼働を試みます。

  • Bluemixのアカウント、組織、スペースを作成

参照
IBM Bluemixフリートライアルアカウント作成手順

ちなみに組織を作るときに地域を選択するところがあるのですが、選んだ地域によってBluemixへアクセスするときのurlが変わるので要注意です。

  • cfコマンドをインストール

cfとは、Cloud Foundryを利用するためのコマンドで、これはVMware社提供する業界初のオープンソースのPaas環境です。
BluemixはCloud Foundryをベースにしているそうで。

Bluemixへの操作はcfコマンドを使って行います。
macはhomebrewで2秒で入ります。

$ brew tap cloudfoundry/tap
$ brew install cf-cli
  • manifest.ymlを作成する
applications:
- buildpack: https://github.com/jthomas/nodejs-v4-buildpack.git
  command: ./bin/hubot --adapter slack
  path: .
  instance: 1
  memory: 256M
  env:
      HUBOT_SLACK_TOKEN: xxxXXXXXxxxXXXXX

buildpack:
node.jsを使うように設定。Bluemixがデフォルトでサポートしていない環境は、ここに書いて使えるようにしてあげます。
instance, memory:
上の「Bluemixのインスタンス無料枠」で書いた通りです。この範囲なら無料でbotを稼働させ続けられます。
env:
botを作る時にexportで指定した環境変数を書いてあげます。
ymlなので「=」ではなく「:」で。←そのままコピペして何度か書き直し忘れた人

  • デプロイコマンドを実行
$ cd yourHubotName

$ cf api https://api.ng.bluemix.net
$ cf login
$ cf push yourHubotName

apiに指定しているurlは、組織を作成する時に選択したurlのものになります。
私は英国を選択したのでngです。
ちゃんと実行できれば動きます。

630d187b-df77-069b-a9f0-12fad77da84.png

pushすればbluemixのGUIの方からも起動や停止が確認・操作できます。

[番外編] 画像検索の設定

img(image me)コマンドでこんなエラーが出た時の対処法。

237d3636-a948-1b86-1b2c-306534608ab.png

結論から言うと
Googleカスタム検索エンジンのIDGoogle Custom Search APIのキーを作成・設定してあげればいいだけでした。

取得の仕方について

Googleカスタム検索エンジンのidの作成

  • Googleカスタム検索エンジンにアクセスして、新しいカスタム検索エンジンを作成する
  • 作成したら、コントロールパネルを開く

画像検索の設定をONにし、他都合の悪い設定を変更する
詳細の検索エンジンIDをクリックすると、idが取得できる

Google Custom Search APIキーの作成

  • Google Developers Consoleで新しいプロジェクトを作成。 ※既存のプロジェクトでも構わない
  • Custom Search APIを有効にする
  • 認証情報>認証情報を追加でAPIキーを作成できる

詳しい手順については、こちらの記事が超分かり易かったです。
hubot-google-image で Google Custom Search API を利用する設定

取得したら、slackのトークンの時と同じように設定してあげます。

$ export HUBOT_GOOGLE_CSE_ID=yyyyYYYYYYYyyyyYY
$ export HUBOT_GOOGLE_CSE_KEY=zzzzzZZZZZZzzzzz

これでbotを再起動させれば、imgコマンドで画像が出るようになります。

デプロイする時にはmanifest.ymlのenvに設定を追記し忘れないようにしましょう。

補足

  • push時にリポジトリを指定すれば、gitで管理させたhubotをデプロイすることもできます。
$ cf push yourHubotName git@github.com:userid/yourHubotName.git

そうするのであれば、manifest.ymlに環境変数は書かないように...!(当たり前だけど)
pushした後に以下のコマンドを実行すれば設定できるそうです。

$ cf set-env yourHubotName HUBOT_SLACK_TOKEN xxxXXXXXxxxXXXXX

  • bluemixのlogの見方
$ cf logs yourHubotName --recent

デプロイ時に詰まったらこれ。

参照

おかげで仕事中の癒しを取り戻せました。ありがとうございます...:pray:

手順において参考にさせてもらったもの
- Herokuでbotを運用する時代は終わった。これからはIBM Bluemixを使って無料で運用する
- SlackのBot(hubot)を作ってみる
- OSXで、Hubotをインストールするまでやってみる
- hubot-google-image で Google Custom Search API を利用する設定
- IBM Bluemixフリートライアルアカウント作成手順

エラーで詰まった時にとても参考にさせてもらったもの
- BLUEMIXで始める無料BOT運用 - HUBOT編 -
- IBM BluemixのRedisをつかってみる

13
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
14