Hubotの正規表現を可視化する

hubot Hubot
regexp 正規表現
atom ATOM

環境

  • hubot 2.19.0
  • Atom 1.8.0

正規表現を書いてみる

nekobot.coffee
# scripts/nekobot.coffee
#Commands:
#  msg - Return a message msg
#
module.exports = (robot) ->
 robot.hear /(.*)$/i, (msg) ->
        room = msg.envelope.room
        text = msg.message.text
        text_en = encodeURIComponent text
        if room == "test"
          msg.send room, "#{text} "

前回書いたとりあえず全てに反応するrobot.hear /(.*)$/i, (msg) ->くらいなら可視化しなくても問題はない。。。
しかし皆がSlackでふざけすぎた結果がコレだ

nekobot.coffee
# scripts/nekobot.coffee
#Commands:
# しいたけ - Return a message しいたけ一人前追加でーす。はいよろこんでー
#
module.exports = (robot) ->
  robot.hear /(shiitake|([C椎]|[しシ]\s*([いイぃィー]))\s*([たタ]\s*[けケ]|茸)|Shiitake\s*mushrooms|เห็ดหอม)/i, (msg) ->
      room = msg.envelope.room
      if room == "Shell"
        text = msg.match[1]
        msg.send  "#{text}一人前追加でーす。はいよろこんでー"

「しいたけ」だけに反応する要求が、次第に英語やらタイ語まで。。。
ぱっとみだと何の発言に対して反応するのかがわかりにくい

本題 正規表現見える化する

Atomにちょうどいいpackageがあった。それがregex-railroad-diagram
さっそくinstallして使ってみる
regex-railroad-diagramはこちらから

正規表現で記載している行にカーソルを持って行くとこのように表示される
SS.png

文字だけで書かれているよりわかりやすい!

ちゃんと動くかローカルでテストしてみる。
※ローカルで動かすときはroom == "Shell"にするとちゃんと返してくれる

$ bin/hubot
nekobot> [Tue Jul 12 2016 21:26:50 GMT+0900 (JST)] INFO hubot-redis-brain: Using default redis on localhost:6379

nekobot>
nekobot> siitake
nekobot> しいたけ
nekobot> しいたけ一人前追加でーす。はいよろこんでー
nekobot> shiitake
nekobot> shiitake一人前追加でーす。はいよろこんでー
nekobot> し い た け
nekobot> し い た け一人前追加でーす。はいよろこんでー
nekobot> シ  いたけ
nekobot> シ  いたけ一人前追加でーす。はいよろこんでー

これで、正規表現の確認も動かす前に確認できるようになるかなっと。。。