Hubot / ChatOps とは

これは [Hubot Advent Calendar 2014][hubot-adventar-2014] の 1 日目の記事です。

Hubot Advent Calendar は 2014-12-01 時点で 3 / 25 という状況なので、@bouzuya の貴重な昼休みをつかって、細切れに Hubot の解説をしていくイベントになりました (適当) 。

<ins>連載の目次を追加しました。</ins>

- [第 1 回 『Hubot / ChatOps とは』][hubot-adventar-2014-01]
- [第 2 回 『Hubot のインストール』][hubot-adventar-2014-02]
- [第 3 回 『Hubot を Heroku で動かして Slack から話す』][hubot-adventar-2014-03]
- [第 4 回 『Hubot スクリプトを追加インストールしよう & 自分だけの Hubot スクリプトをつくろう』][hubot-adventar-2014-04]
- [第 5 回 『簡単な Hubot スクリプトをゼロからつくろう』][hubot-adventar-2014-06]
- [第 6 回 『簡単な Hubot スクリプトをもっとつくろう (おみくじ系)』][hubot-adventar-2014-07]
- [第 7 回 『スクレイピングする Hubot スクリプトをつくろう』][hubot-adventar-2014-09]
- [第 8 回 『Hubot でホームページをつくろう』][hubot-adventar-2014-10]
- [第 9 回 『Hubot スクリプトの読み込み処理を読んでみよう』][hubot-adventar-2014-11]
- [第 10 回 『設定を読み込む Hubot スクリプトをつくろう』][hubot-adventar-2014-16]
- [第 11 回 『robot.brain を使った Hubot スクリプトをつくろう][hubot-adventar-2014-18]
- [第 12 回 『robot.brain を永続化する Hubot スクリプトをつくろう』][hubot-adventar-2014-19]
- [第 13 回 『いまさらだけど Hubot のドキュメントを読んでみよう』][hubot-adventar-2014-21]
- [第 14 回 『Hubot スクリプトのテストやその環境を知ろう』][hubot-adventar-2014-22]
- [第 15 回 『Hubot 標準同梱の Shell アダプターを読んでみよう』][hubot-adventar-2014-23]
- [第 16 回 『使えない Hubot アダプターをつくろう』][hubot-adventar-2014-24]

回数は十分にとれるので、毎日すこしずつ、@bouzuya の知る範囲で解説していきたいと思います。

# Hubot とは

Hubot とはなにか。もうたくさんの解説あると思いますし、「ドキュメント読め」って感じですが、あえて最初からいきましょう。

Hubot は公式サイト ( [hubot.github.com][] ) によると 

> Hubot is your company's robot.

だそうです。もうすこしまじめに書くなら、

**GitHub** によってつくられた **BOT** です。

**CoffeeScript** で書かれており、 **Node.js** で動きます。**MIT** ライセンスで公開された **OSS** であり、**Heroku などの環境に簡単にデプロイ** できます。

デプロイをはじめとした **タスクの自動化** などが可能であり、独自の **スクリプト** を追加できます。また **アダプター** により、異なるチャットにも対応できるため、一度、書いた Hubot スクリプトは、どのチャットでも動きます (大体は) 。

リポジトリは [github/hubot][] にあります。今日時点の最新バージョンは 2.9.3 です。

概要はそんなところでしょうか。

# Hubot は実用的なのか？

では、この Hubot は実用的なのでしょうか？ 導入を検討する価値があるのでしょうか？

それはコンテキスト次第なので断言できません。

しかし、実際に Hubot を使い、役立てているであろう GitHub を見るのが良いと思います。ぼくが知っているのは、以下の発表・資料です。ここでは **ChatOps** というキーワードとともに Hubot について話されています。

[Ops for Everyone][ops-for-everyone]

日本語翻訳つきの動画もついているので、そちらを見ると良いと思います。

動画を見るのが面倒というせっかちな人のために、簡単に ChatOps について説明します。

# ChatOps とは

ChatOps ってなんでしょう。実は、ぼくも詳しくは知りません。 GitHub の社員でもないですし、細かい定義を知らないからです。

おおまかに言うと GitHub では **Hubot** を使って、**チャットを共有のコマンドライン**として扱い、そこを通じてデプロイなどをしているらしく、そういった Ops を彼らは **ChatOps** と呼んでいるようです。

Chat で Ops をするから **Chat + Ops = ChatOps** なのでしょう。

# ChatOps のメリットは？

この ChatOps のメリットは「**共有**」にあります。

デプロイは往々にして属人的になりがちな作業のひとつです。個人の Terminal などでこれを実行してしまうと、問題が起きたときの対応も隠れてしまいますし、その結果も見えづらくなってしまいます。結果として、すぐに職人 (皮肉です) が生まれ、彼らしか知らない謎の手順でしかデプロイができなくなってしまいます。

ChatOps であれば、チャットをコマンドラインとして使い、コマンドを実行するので、その操作は明らかですし、必ず自動化されますし、誰でも同じように実行できます (権限の制御はできます、詳細はまた後日) 。実行ももちろん、結果も共有できるので、知らない間にデプロイされていた、そのデプロイに実は失敗していた、それを個人の対応で片付けてしまっていた、そんな運用はなくなることでしょう。

デプロイ以外にも、個人ではなくチームに属すべきコマンドというのは意外と多いものです。そういったものの実行の場としてのチャット、実行するための仕組みとしての Hubot があるのです。

# 最後に

@bouzuya の働いている [FaithCreates Inc.][faithcreates] でも :sushi: (sushi) という名前の Hubot がおり、 ChatOps を実践しています。

:sushi: は [faithcreates/sushi][] として GitHub に公開しているので、誰でも同じものをデプロイすることができます。興味のある方はそちらも参照ください。

[faithcreates]: http://www.faithcreates.co.jp/
[faithcreates/sushi]: https://github.com/faithcreates/sushi
[github/hubot]: https://github.com/github/hubot/
[hubot.github.com]: https://hubot.github.com/
[hubot-adventar-2014]: http://www.adventar.org/calendars/384
[ops-for-everyone]: https://speakerdeck.com/johndbritton/ops-for-everyone
[hubot-adventar-2014]: http://www.adventar.org/calendars/384
[hubot-adventar-2014-bouzuya-index]: http://qiita.com/bouzuya/items/c7d0ad80c357aab6b696
[hubot-adventar-2014-01]: http://qiita.com/bouzuya/items/c7d0ad80c357aab6b696
[hubot-adventar-2014-02]: http://qiita.com/bouzuya/items/11c0c6da2b3ad54b827f
[hubot-adventar-2014-03]: http://qiita.com/bouzuya/items/2a200c9e8a45e2478bc2
[hubot-adventar-2014-04]: http://qiita.com/bouzuya/items/4c0206d72ff22ade9339
[hubot-adventar-2014-05]: http://pasero.net/~mako/blog/s/685
[hubot-adventar-2014-06]: http://qiita.com/bouzuya/items/4e051f68f8d68a2944b0
[hubot-adventar-2014-07]: http://qiita.com/bouzuya/items/2e935c99647b93d8ee1d
[hubot-adventar-2014-08]: http://udzura.hatenablog.jp/entry/2014/12/08/182744
[hubot-adventar-2014-09]: http://qiita.com/bouzuya/items/587c4e920151342e6f1d
[hubot-adventar-2014-10]: http://qiita.com/bouzuya/items/8e8ee8e2e8f83513ad35
[hubot-adventar-2014-11]: http://qiita.com/bouzuya/items/3e239bc530e7c2c3a26c
[hubot-adventar-2014-12]: http://qiita.com/hiconyan/items/3e5481a61657890624dc
[hubot-adventar-2014-13]: http://pasero.net/~mako/blog/s/689
[hubot-adventar-2014-14]: http://ja.ngs.io/2014/12/14/hubot-qiita/
[hubot-adventar-2014-15]: http://youngforever.hatenablog.com/entry/2014/12/15/113236
[hubot-adventar-2014-16]: http://qiita.com/bouzuya/items/d65a394cac9e76b56d3d
[hubot-adventar-2014-17]: http://qiita.com/hiconyan/items/baf6ac56129a26d8ac0c
[hubot-adventar-2014-18]: http://qiita.com/bouzuya/items/d5fd0ef9a8cb100933f4
[hubot-adventar-2014-19]: http://qiita.com/bouzuya/items/ae1cb5610a64794bc522
[hubot-adventar-2014-20]: http://bochibochibocchi0095.hatenablog.com/entry/2014/12/21/000710
[hubot-adventar-2014-21]: http://qiita.com/bouzuya/items/ca69548c813e87c2845a
[hubot-adventar-2014-22]: http://qiita.com/bouzuya/items/e23426ecf039154bed7b
[hubot-adventar-2014-23]: http://qiita.com/bouzuya/items/4a6bad68b4b02c17079e
[hubot-adventar-2014-24]: http://qiita.com/bouzuya/items/3664e82984117ceb7ff9