akiranetの日々淡々と頑張っていこう

akiranetのコンピューターと遊ぶ

hubotを用いた楽しいslackLife(入門編)

ak1raです! インターンシップに参加した企業で, hubotを見かけてから興味がでて少し作ってみました。

Hubotって何??

hubot

GitHub社が開発しMITライセンスで公開しているNode.jsでbotを作り動かすためのフレームワークです。 Hubotは, 様々なチャットツールと連携でき,「Adapter」を切り替えることでそれができる。 呼び方は, 「ヒュボット」らしい。。

Hubotは主に以下のことができる。

など様々なことができるので楽しいですよ〜

Hubotの導入方法(Mac)

今回はMacでHubotの開発環境を作りました. ほぼここ(http://qiita.com/susuwatarin/items/019e0e701754161f7c4c)で導入はできるので見てみてください。 大まかな流れは、

  1. Homebrewを入れる
  2. brew install node で Node.jsをインストー
  3. Hubotを作るための「Yeoman」というツールセットをインストーnpm install -g yo generator-hubot
  4. Hubotのプロジェクトを作っていく yo hubot
  5. Hubotをローカルで動かす bin/hubot
  6. HerokuやBluemixなどにHubotをweb上に公開する

※Herokuだと24時間稼働し続ける事ができないので, Bluemixのが良いらしい…..

Hubotの書き方

  • respondとhear
    • respond : 呼ばれて答える
    • hear: ある発言に対して反応する

ex)

robot.respond /hi$/i, (msg) ->
  msg.send "Hello!"
 
robot.hear /hi$/i, (msg) ->
  msg.send "hello!"
  • 正規表現とmsgオブジェクト
    • いくつかの文字列を一つの形式で表現するための表現方法
    • 正規表現にマッチした発言を第二引数(msg)に渡す
    • 今回, msg.match[1]だが, 正規表現が2つ書いてあり,二つ目が良いならmsg.match[2]となる

ex)

robot.respond /I am (.*)/i, (msg) ->
   msg.send "You are #{msg.match[1]}"

nodejsのライブラリからインストールして実行

  • cron(定期実行)
    • npm install cron --save
    • これが,package.jsonに加わり, scriptsで使える

ex)

cronJob = require('cron').CronJob
module.exports = (robot) ->

  new cronJob('0 30 12 * * 1-5', () ->
      robot.send ( '#12th-member', '@here 昼飯だべ~')
    ).start

ex)

request = require 'request'
cheerio = require 'cheerio'
 
module.exports = (robot) ->
  robot.respond /title (.*)/i, (msg) ->
    url = msg.match[1]
    options =
      url: url
      timeout: 2000
      headers: {'user-agent': 'node title fetcher'}
 
    request options, (error, response, body) ->
      $ = cheerio.load body
      title = $('title').text().replace(/\n/g, '')
      msg.send(title)

以上のようなことができます。

他にもAPIサーバーを用いて, アニメ情報や電車の遅延, 天気情報,映画情報をslack上で確認できるなどあります。

問題が発生した時の対処

  • 作ったスクリプトがうまく動かないときなどがあり、なんでだろうってときはローカル上でHubotを動かすとわかった
  • errorで  Unexpected 'INDENT'がよく見られたので、エラー名の通り、/bin/hubotだと何行目かわからない
  • デプロイした後,動かないときはHerokuのログを読むべし
  • ログを読み取ることが大切

思ったこと

Hubotは,実際に目に見えて動き,研究室のSlackに導入してみるとみんなが楽しんでくれてよかった。 これからは、いろいろな人の意見を聞いて改善していきたいと思う。

SlackはGitHubやIncoming Hooks, Google Calenderなど豊富なAppと連携できるのでぜひ使っていきたい

次にやりたいこと

Slackで研究室に誰がいるかわからなくて, 「誰かいる?」って聞くのは面倒くさいと思ったので, 在室管理システム的なものをNFCリーダーを用いて作りたい

NFCリーダーで学生証読み取り -> slackに誰が来たか流す

要は出席管理みたいなもんですね….

参照

初心者がHubotを使ってHeroku上で動くSlack bot作ってみた(導入編)) hubot-script cronjob