Top / Hubot

Hubotとは

HUBOTをつかってみました。HubotとはGithub社謹製のbot開発・実行フレームワークです。 簡単にいうとSlackなどのチャットツール上で稼働するボットを作成することができます。

やってみる

Hubotは通常は Heroku にいれるのが定番ぽいのですが、今回は nodejs が 稼働するDockerコンテナ上に入れてみようと思います。じぶんがDocker絶賛勉強中なので。 なので以下、Dockerが動く環境がある前提で進めます。

# docker pull node
# cat Dockerfile
FROM node
MAINTAINER masatomix

RUN npm install -g yo generator-hubot
RUN useradd bot
RUN mkdir /home/bot && chown bot:bot /home/bot

USER bot
WORKDIR /home/bot

Hubotは Yeomanを使ってテンプレからソースを作りますので、それらをインストールしておきます。このDockerfile を使って新しいimageをつくります。

# docker build -t hubot-sample .
docker build -t hubot-sample .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM node
 ---> 47522eb1edb5
Step 2 : MAINTAINER masatomix
 ---> Using cache
 ---> a1914d9d0328
Step 3 : RUN npm install -g yo generator-hubot
 ---> Using cache
 ---> a47cfa033eb7
Step 4 : RUN useradd bot
 ---> Running in cd8beb5b849b
 ---> be2fc2c58d90
Removing intermediate container cd8beb5b849b
Step 5 : RUN mkdir /home/bot && chown bot:bot /home/bot
 ---> Running in d2c532d64b0b
 ---> 9421a92d23e7
Removing intermediate container d2c532d64b0b
Step 6 : USER bot
 ---> Running in 5eb063a6afd7
 ---> 119c2de9066b
Removing intermediate container 5eb063a6afd7
Step 7 : WORKDIR /home/bot
 ---> Running in 282c1d3afce7
 ---> 5f173b929721
Removing intermediate container 282c1d3afce7
Successfully built 5f173b929721
#
# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
hubot-sample           latest              5f173b929721        37 seconds ago      724.3 MB

imageができたので、そこから新しいコンテナを起動します

# docker run -it hubot-sample /bin/bash
bot@8d0968b2a418:~$ node --version
v7.7.3
bot@8d0968b2a418:~$

nodejsがインストールされた環境が起動しました。

ではさっそく Yeomanでソース生成です。Yeomanにはいろいろきかれますが、まあ適当に。

$ mkdir hubot-sample && cd $_
$ yo hubot

? ==========================================================================
We're constantly looking for ways to make yo better!
May we anonymously report usage statistics to improve the tool over time?
More info: https://github.com/yeoman/insight & http://yeoman.io
========================================================================== Yes
                     _____________________________
                    /                             \
   //\              |      Extracting input for    |
  ////\    _____    |   self-replication process   |
 //////\  /_____\   \                             /
 ======= |[^_/\_]|   /----------------------------
  |   | _|___@@__|__
  +===+/  ///     \_\
   | |_\ /// HUBOT/\\
   |___/\//      /  \\
         \      /   +---+
          \____/    |   |
           | //|    +===+
            \//      |xx|

? Owner Masatomix <masatomix@example.com>   ←Owner
? Bot name Hubot      ← Hubotの名前
? Description A simple helpful robot for your Company
? Bot adapter campfire
   create bin/hubot
   create bin/hubot.cmd
   create Procfile
   create README.md
   create external-scripts.json
   create hubot-scripts.json
   create .gitignore
   create package.json
   create scripts/example.coffee
   create .editorconfig
                     _____________________________
 _____              /                             \
 \    \             |   Self-replication process   |
 |    |    _____    |          complete...         |
 |__\\|   /_____\   \     Good luck with that.    /
   |//+  |[^_/\_]|   /----------------------------
  |   | _|___@@__|__
  +===+/  ///     \_\
   | |_\ /// HUBOT/\\
   |___/\//      /  \\
         \      /   +---+
          \____/    |   |
           | //|    +===+
            \//      |xx|
... 以下略

npm info ok

起動します

$ ./bin/hubot
... 略
npm info ok
[Mon Mar 20 2017 05:49:38 GMT+0000 (UTC)] INFO hubot-redis-brain: Using default redis on localhost:6379

Hubot>

起動しました。

ヘルプを表示

コマンドが分からないのでとりあえずヘルプ。

Hubot> hubot help
Hubot> Shell: Hubot adapter - Reply with the adapter
Hubot animate me <query> - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead.
Hubot echo <text> - Reply back with <text>
Hubot help - Displays all of the help commands that Hubot knows about.
Hubot help <query> - Displays all help commands that match <query>.
Hubot image me <query> - The Original. Queries Google Images for <query> and returns a random top result.
Hubot map me <query> - Returns a map view of the area returned by `query`.
Hubot mustache me <url|query> - Adds a mustache to the specified URL or query result.
Hubot ping - Reply with pong
Hubot pug bomb N - get N pugs
Hubot pug me - Receive a pug
Hubot the rules - Make sure hubot still knows the rules.
Hubot time - Reply with current time
Hubot translate me <phrase> - Searches for a translation for the <phrase> and then prints that bad boy out.
Hubot translate me from <source> into <target> <phrase> - Translates <phrase> from <source> into <target>. Both <source> and <target> are optional
ship it - Display a motivation squirrel
Hubot>

というわけで話しかけてみましょう。

Hubot> hubot echo Hello World
Hubot> Hello World

Hubot> hubot ping
Hubot> PONG

Hubot> hubot pug me
Hubot> http://28.media.tumblr.com/tumblr_ls9fa8S9lE1qfbmwho1_500.jpg

Hubot>

パグのリンクはきれてるみたいですが、いろいろ答えてくれるボットができました。 ソースはテンプレのままですが、そこをいじる事でいろんな事をしてくれるボットが作れそうですね。

関連リンク


この記事は

選択肢 投票
おもしろかった 0  
そうでもない 0  

Top / Hubot

現在のアクセス:3931


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS