IwamotoBlog

俺に付いて来い

楽しいhubot-slack

hubot-slack is 楽しい

僕はラボという美大の中でプログラム使ってワイワイやろうぜという集団に属しているんだけれども、最近そのラボにSlackを導入した。
そしてSlackやるなら…ということでhubotも導入したんだけど…

hubot楽しすぎる

楽しすぎる。あらゆる実務が手に付かない。

うちのhubotはラボに在籍している先生の犬を勝手に題材としてmameという名前、アイコンを設定している。
そのため犬にちなんだコマンドが必然と多くなっていった。

例えばmame ご飯とか呼び出すと

f:id:PEPOipod007:20150616004151p:plain

こんな感じでご飯にまつわるコメントを返してくれる。
どうやら彼(?)は現在お腹がいっぱいらしい。

他にもただいまとか呟くと

f:id:PEPOipod007:20150616004203p:plain

甲斐甲斐しすぎる。可愛い。

後はmame 王将とすると…

f:id:PEPOipod007:20150616005241p:plain

恩師に向かって暗に王将を奢れと語っているコメントが飛ばされたりする。

と、こんな感じの細かい機能をチマチマ付け足してmameが強化されていく様をニヤニヤしながら見つめている。
ちょっとのコードでただのbotがスゴイ奴になる、っていうプログラミング本来の楽しさがここにあった。

hubot-slackは学びの場

hubot-slack(というよりかはslackで動かすhubotだけどね)を触ってて何がいいって、成果がすぐに見れるところ。

ちょっとコードをササッと書いてデプロイしたら、もうすぐに動いてくれる。それもとても目に見えやすい形で。 これって僕が最も重んじているモチベーションってやつに、凄くいい影響を与えてくれる。

成果が目に見えにくいものを長々と開発していると、どうしてもモチベーションは下がってしまうもの。 でもこいつなら、書いたものがすぐにわかりやすく動いてくれる。すごく速いスピードで実を結ぶ努力って、インスタントな達成感と成長を感じさせてくれるんだ。

だからこそ、僕はこのhubot-slackがプログラミング初学者にとってすごくいい題材なんじゃないかなあ、なんて考えている。

自身の無い初学者にとって、作ったものを見せるということは凄くハードルが高い事だと思う。 でもこいつは、見せる場がSlack内だけだ。そしてきっとSlackに居るのは身内だけで、且つ少なからず技術に明るい人達だろう。
そんな人達ならきっと沢山のフィードバックをくれることだろう。これが初学者にとってどれだけ素晴らしい事か。

あまり複雑じゃなく、小規模で且つすぐに成果の見れるもの。そしてそんな小規模なものを身内だけで共有できる。
hubot-slackは、プログラミング初学者にとっては「まさに」という環境なのだ。

hubot-slackはじめ

さて、前置きも済んだところでhubot-slack講座とでも洒落こみましょう。

導入についてですが今回カットさせていただきます。
この記事を書こうと思ったきっかけは、導入記事は多いけどスクリプトについての記事は少ないなあ、と思ったからでもあるんだよね。

導入方法についてはslack hubotとかでググればいい感じに出てきます(投げやり)。

ではさっそくやっていきましょう。

まずhubotのディレクトリに行きましょう

f:id:PEPOipod007:20150616012655p:plain

ここのscriptフォルダ内にコマンドのスクリプトファイルを入れていきます。
今回は適当にpractice.coffeeというファイルでも作ってこっこに入れておいてください。

で、保存できたらそのpractice.coffeeを開いてください。

じゃあまずはそのファイルにテンプレートをコピペしましょう。

# Description
#   コマンドの概要
#
# Commands:
#   コマンド - コマンドの説明
#
# Author:
#   作者の名前

module.exports = (robot) ->

このmodule.exports = (robot) ->以下にコマンドを書いていきます。

で、コマンドなんですけど呼び出し方法が二種類あります。
簡単に説明すると

  • 文頭でbotと指定しないと呼び出されないもの
  • botと指定しなくても呼び出されるもの

…の二種類です。
もちろんそれぞれで書き方も変わってきまして

文頭でbotと指定しないと呼び出されないもの

robot.respond /引数/, (msg) ->

botと指定しなくても呼び出されるもの

robot.hear /引数/, (msg) ->

ってな感じです。
引数にはコマンドを呼び出すときの文字列が入ります。
つまり、僕の作った王将コマンドなら呼び出し方法がmame 王将ですので

robot.respond /王将/, (msg) ->

こうなるわけですね。二種類しか無いし覚えやすい!

# Description
#   コマンドの概要
#
# Commands:
#   コマンド - コマンドの説明
#
# Author:
#   作者の名前

module.exports = (robot) ->
    robot.respond /王将/, (msg) ->

こんな感じになりましたね。

ではコマンドの実行タイミングが決まったところで、次はコメントの返し方を書いていきましょう。

これも数種類あります。代表的なものは

  • msg.sendというただ送るだけのメッセージ
  • msg.replyというコマンドを呼び出した人にmention付きで返すもの。

この2つが使えれば当面は困りません。

今回は@matsumura: 王将に行こうワン的な文章を返したいのでreplyではなくsendを使いましょう。

# Description
#   コマンドの概要
#
# Commands:
#   コマンド - コマンドの説明
#
# Author:
#   作者の名前

module.exports = (robot) ->
    robot.respond /王将/, (msg) ->
               msg.send "@matsumura: 王将に行こうワン"

これで完成ですね!

ただ実はhubot-slack、こう書いてもmentionにしてくれません。
じゃあどうすればいいんだ!というと、<@username>という書き方にすればmentionにしてくれるらしいです。まあ便利。
早速使わせていただきましょう。

# Description
#   コマンドの概要
#
# Commands:
#   コマンド - コマンドの説明
#
# Author:
#   作者の名前

module.exports = (robot) ->
    robot.respond /王将/, (msg) ->
               msg.send "<@matsumura>: 王将に行こうワン"

ただの完璧ですね。 これで王将コマンド自体は完成です。が、せっかくなのでいくつかのケースとともに、色んな王将コマンドを見て行きましょう。

@matsumuraなんかじゃ物足りねえ。俺は皆にmentionを飛ばしたいんだ!

強欲ですね。そんなあなたにお応えするのが@channelとか、もっと迷惑なものなら@everyoneとか@groupとかです。

「僕、知ってるよ!コードに起こすなら、<@channel>でいいんだろう?」

そう思って実践したあなたは、コードの闇に呑まれる事になります。
@channel@everyoneとか@groupにmentionを飛ばすには<!channel>などとする必要があるそうです。

# Description
#   コマンドの概要
#
# Commands:
#   コマンド - コマンドの説明
#
# Author:
#   作者の名前

module.exports = (robot) ->
    robot.respond /王将/, (msg) ->
               msg.send "<!everyone>: 王将に行こうワン"

こうなりましたね。無闇矢鱈に実行しないことをオススメします。

Slackに王将チャンネルを作ってそこにメッセージを飛ばしたいんだ!

もうよく分かりませんね。実用性などはとりあえず忘れて実装に専念しましょう。ディレクターは神様です。

別のチャンネルに飛ばすには、その為の特別なメソッドを使います。

robot.messageRoom 飛ばす先のチャンネル, 飛ばしたいメッセージ

こんな感じです。実際に使ってみましょう。

# Description
#   コマンドの概要
#
# Commands:
#   コマンド - コマンドの説明
#
# Author:
#   作者の名前

module.exports = (robot) ->
    robot.respond /王将/, (msg) ->
               robot.messageRoom 'ohsho', "<!everyone>: 王将に行こうワン"

こうなりましたね。これでディレクターに怒られることなく、明日からも美味しいご飯が食べられそうです。
そういえば、ローカルで実行するにはhubotディレクトリに行ってbin/hubotとか叩けば出来ますがそこら辺の説明も割愛しますね。

おわりに

いかがでしたか?hubotのコマンドって案外数行で書けちゃうもんなんです。 数行でhubotに可愛いことを言わせたり、便利なことをしてもらえたり人様に迷惑までかけることができるのです。
Slackがあって、hubotが触れる環境がある方は是非触ってみてはいかがでしょうか?きっと楽しい世界が待っていますよ。