LoginSignup
5
10

More than 5 years have passed since last update.

Babel でお手軽モダン Hubot 開発

Last updated at Posted at 2017-03-12

Babel を使ってお手軽に ES201x でモダンな Hubot 開発を行えるようにしてみました。

TL;DR

  1. Configure your hubot following necojackarc-sandbox/hubot-babel-es201x
  2. Code your Hubot scripts in src/bot directory with Babel ES201x

プロローグ

偶然にも ChatOps 用の Bot を作ることになった俺達は、
CoffeeScript で書かれ時代に取り残された Hubot に遭遇したのだった……。

……。

…………。

Hubot の最終コミットが10ヶ月前になってて少し焦りました。

パッと調べても1いい感じの代替ツールが見つからなかったので、この更新頻度は安定の証、枯れたプロダクトだと信じて Hubot を使うことにしました。

ただし、CoffeeScript は流石にもう書きたくないので、Babel を利用して ES201x で書けるようにします。

お手軽度

Babel しか使わないのでかなりお手軽です。
また、Babel の設定もスッキリ少なめです。

仕組み

Hubot は src/scriptsscripts にある、.coffee.js ファイルを自動的に読み込みます。

ここにあるファイルは以下のようなファイルフォーマットであることが期待されます。

module.exports = (robot) ->
  # your code here

要は Hubot 用のスクリプトファイルです。

これを踏まえ、今回は以下のようなディレクトリを追加しました。

ディレクトリ 説明
dist トランスパイル後のファイル置き場
src/bot ES201x で書かれた Hubot スクリプト置き場
src/lib ES201x で書かれたファイル置き場2

簡単に流れを説明すると、

  1. src 以下で ES201x で開発を行う
  2. dist 以下に src 以下のファイルをトランスパイルし吐き出す
  3. scripts で dist/bot 以下のトランスパイルされた Hubot スクリプトを読み込む

となります。

設定手順

まずは Getting Started With Hubot に従い、Hubot を作成します。

次に Babel と必要なプリセット等を導入します。

$ npm install -D babel-cli babel-polyfill babel-preset-env

Babel の設定を .babelrc に記述します。

.babelrc
{
  "only": [
    "src"
  ],
  "presets": [
    ["env", {
      "targets": {
        "node": "current"
      }
    }]
  ]
}

ビルドコマンドを package.json に追加します。

package.json
{
  "scripts": {
    "build": "babel src -d dist"
  }
}

scripts に dist に吐き出された Hubot スクリプトを読み込むコードを追加します。

scripts/index.js
'use strict';

const fs = require('fs');
const path = require('path');

const ROOT = "./dist/bot";

const stripExtension = path => path.split('.').slice(0, -1).join('.');

module.exports = (robot) => {
  fs.readdirSync(ROOT).forEach((dir) => {
    require(path.join('..', ROOT, dir)).default(robot);
  });
};

最後に必要なディレクトリを作成して設定完了です。

$ mkdir -p src/bot src/lib

サンプルスクリプトによる動作確認

試しに、以下の Hubot スクリプトを src/bot/konosuba.js に配置して動かしてみます。

src/bot/konosuba.js
export default function(robot) {
  robot.hear(/アクア/, (res) => {
    res.reply('駄女神');
  });
}

bin/hubot で起動すると、

hubot-babel-es201x> アクア様
hubot-babel-es201x> Shell: 駄女神

無事、動きました!


  1. 12+ Frameworks to Build ChatOps Bots 

  2. Hubot スクリプト以外の JavaScript ファイル置き場として準備しました 

5
10
0

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
5
10