LoginSignup
4
7

More than 5 years have passed since last update.

HubotとTypeScriptでChatwork botを作ってみる

Last updated at Posted at 2018-01-30

こちらの記事を参考にしてHubotとTypeScriptを使ってChatwork botを作ってみたいと思います。
https://qiita.com/S_Shimotori/items/3da73b05bfdc3c582995
http://hatappo.hatenadiary.jp/entry/2015/07/19/034412

今回作るbotに関して

  • とりあえず、"hello"と送ったら"world"を返すような本当に簡単なもの
  • HubotのscriptはTypeScriptで記述しコンパイルする
  • 動かす環境はCentOS7系

Node.jsの導入

$ sudo yum install epel-release
$ sudo yum install nodejs npm

TypeScriptを入れる

$ npm install -g typescript
$ npm install @types/node --global
$ npm install @types/hubot --save

hubotを入れる

$ npm install -g hubot hubot-chatwork yo generator-hubot

とりあえずhubotを生成して動かしてみる

$ mkdir kevin
$ cd kevin
$ yo hubot --adapter chatwork

実行するとHubot君がでてきてメールアドレスやbotの名前などの入力を求められるので入力する(特に設定の必要がなければ適当にEnter押すだけでもでも可)

                      _____________________________
                    /                             \
   //\              |      Extracting input for    |
  ////\    _____    |   self-replication process   |
 //////\  /_____\   \                             /
 ======= |[^_/\_]|   /----------------------------
  |   | _|___@@__|__
  +===+/  ///     \_\
   | |_\ /// HUBOT/\\
   |___/\//      /  \\
         \      /   +---+
          \____/    |   |
           | //|    +===+
            \//      |xx|
? Owner   dummy@dummy.mail
? Bot name   kevin
? Description   Chatwork bot Test

生成が終わるとjsonファイルやらscriptsやらがいろいろ出来上がる。
動かすときにhubot-script.jsonでエラーがでるので削除。
external-scripts.jsonのheroku関連行を削除。
以下で実行kevin pingと打って、PONGが返ってくればOK

$ ./bin/hubot
kevin> kevin ping
kevin> PONG

Chatworkアダプタの環境変数を設定

export HUBOT_CHATWORK_TOKEN="<CHATWORK_TOKEN>"
export HUBOT_CHATWORK_ROOMS="<ROOM_ID>"
export HUBOT_CHATWORK_API_RATE="<RATE>"

Chatworkから実行してみる

以下を実行してbotを起動

$ ./bin/hubot -a chatwork -n test-bot

Chatworkの指定のROOMからtest-bot pingを実行し、PONGが返ってくることを確認

TypeScriptを書く

基本的な記法等は本やら記事やらがたくさん出回っているので省略。

TypeScriptからJavaScriptを生成する際に型定義ファイルが必要となるが、今回使用するものは以下を参考にして作成する。
(@types/hubotをインストールしたことで必要がなくなったため打消し)
http://qiita.com/itoshiki/items/65d24b197d830054f501

hello.ts(/kevin/scripts/hello.ts)

import hubot = require("hubot");

module.exports = (robot: hubot.Robot): void => {
    robot.respond(/hello/i, (msg: hubot.Response)=>{
        msg.reply("world!");
    });
};

型定義ファイルを同じ階層に設置し、JavaScriptにコンパイルする。

$ tsc scripts/hello.ts

成功するとhello.jsが出来上がっている。

出来上がったhello.js

"use strict";
exports.__esModule = true;
module.exports = function (robot) {
    robot.respond(/hello/i, function (msg) {
        msg.reply("world!");
    });
};

これで準備OK。

もう一度botを起動する。

$ ./bin/hubot -a chatwork -n test-bot

Chatworkからtest-bot helloと送信しworld!が帰ってくることを確認。
ということで一応完成になります。
初のQiita記事なので手順に抜け、記法の誤りなど多々あるかもしれませんが悪しからず…。

作ってみた感想

  • 初めて手をつけた割には、思っていた以上にすんなりとできた。とても使いやすい。
  • TypeScriptに関する知識がほぼ皆無だったので少し手こずった(ちゃんとした書き方がまだわかってない)。これを機に勉強しようと思う…。
  • ChatworkでたたいてからResponseが来るまでが割と長いなーという印象

今後の展開

  • 業務において使用。今回作ったbotを使ってpythonで作成したテストコードの自動実行をし、結果をChatworkにだせるようにする。
4
7
4

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
4
7