ChatOpsでなにができるのかまとめ

ChatOpsを「Chatというインターフェースでサービスやプログラムと連携することによる業務改善」ととらえた時、どのような活用方法があるのかを雑多に調べて勝手にカテゴリわけしてみました。特に複数の要素について説明されていた文書などは印象に残ったものだけで分類しており、基本的に筆者の主観によるものです。

とりあえず目に入ったものを片っ端から見ていった感じですが、ここが違うよとか、こういう事例もあるよというご指摘は歓迎です。


サービスインターフェース
======

利用ユーザ側からシステム・サービスに対してなんらかの働きかけをするもの。

ビルドやデプロイの管理
-----

ChatOpsの本懐（らしい）。Chatでビルドやデプロイの命令を発行する。コマンドを単純化し余計なステップを極力なくすことで特定の個人やエンジニアに依存しないオペレーションが可能になる。

- [チャット経由でデプロイする](http://qiita.com/r7kamura/items/5e7b9c27693bcc4a5a39)
- [非エンジニアが自然とChatOpsを使いこなせるようになった話](http://developer.animatelab.com/entry/2015/12/17/093000)
- [プログラミングいらずのChatOpsがあなたの元に。そう、Typetalkならね](https://nulab-inc.com/ja/blog/typetalk/chatops-without-programming/)
- [ChatOps時のブランチ運用戦略(実装 / コードレビュー / 関係者確認 / 自動テスト / デプロイを円滑に行う)](http://qiita.com/s-kiriki/items/194d266e0de070131a25)
- [SUUMOスマホサイトでのChatOps事例](https://tech.recruit-sumai.co.jp/smp_suumo_chatops/)
- [ChatOps( Slack / Hubot / Docker )で検証環境をポンポン作って、ポンポン捨てる](http://qiita.com/s-kiriki/items/501c08d22827def4ec9f)
- [開発しにくかった現場がなぜ素早くリリースできるようになったか？ SUUMOのChatOps活用術](https://codezine.jp/article/detail/9339)
- [ビジネスチャットツールdirectからSORACOM Airの速度クラスを変更する](http://qiita.com/yamaryu0508/items/0e4d09ee43ce1c7d436f)
- [ChatOps とは何か？どのように進化し、受け入れられ、重要視されるようになったのか？](http://japan.blogs.atlassian.com/2016/01/what-is-chatops-adoption-guide/)
- [ChatOpsでOSのセキュリティアップデートを自動化出来るようにした](http://blog.glidenote.com/blog/2014/09/12/chatops-security-update/)

外部サービスとのインタラクション
-----------

外部サービスの操作をChat経由で実施する、あるいはChatに常駐するbotに仲介させる。自動化や単純化されたコマンドの他に、外部サービスからのイベント通知と連動しやすい（通知を見る→直ぐに反応できる）という使い方ができる。

- [BotkitのConversationでプルリクをマージする](http://qiita.com/hiconyan/items/feb4f08068e00c8d13b9)
- [HubotにGitHubのプルリクエストを自動でアサインさせる](http://qiita.com/s-kiriki/items/4b38af4ebd05bad70eb7)

参照コマンドの発行
------------

上記2つと似ているが、システムへの変更を加えるのではなく参照だけのもの。外部サービスへ参照も含む（事例ではWikipeidaへの検索）。検索などで最低限決めないとならない条件などを再定義することで、エンジニアの人でも参照のための手順が楽になり、さらに非エンジニア役職の人が触りにくかったような情報でも自力で参照できるようになる。

- [SlackからHubotを経由してDBを参照する](http://tech.sanwasystem.com/entry/2015/10/01/003625)
- Slackで，世界を，もっと，はたらきやすく
コミュニケーションの向上をめざして――サーバーワークスの場合 ([Software Design 2016年1月号](http://gihyo.jp/magazine/SD/archive/2016/201601))

現実世界とのインタラクション
-------------

現実世界での手続きをChatにのせるアプローチ。必ずしもChatから叩く直接的な優位性はないが、普段使っているインターフェースだけで完結すること、手続きを他の人と共有しやすいというところが良さ。

- [hubot + Twilioで寝ている社長を無理矢理起こす](http://qiita.com/uiureo/items/571035ec24ddf987ce4f)
- [会社に蔵書管理 ChatOps を導入してみて感じていること](http://qiita.com/kyrieleison/items/e88f78328aa67ec4d16e)

リソースなどの状態管理
--------------

事例ではstaging環境が使用中かどうかを管理している。

- IRCからHubot中心のChatOpsへ XFLAGスタジオ「モンスターストライク」の裏側 ([Software Design 2016年1月号](http://gihyo.jp/magazine/SD/archive/2016/201601))


通知
======

発生したイベントの周知や報告。

障害・システム状態監視の通知
-----

一番需要が高いと思われる通知。単純にログの転送などではChatが埋まってしまうので、必要な情報だけを通知する工夫が必要だが、そのあたりは従来の障害監視などと同じ。普段使いのインターフェースに通知することで、担当者の応答性を高めることや、通知されたイベントについてそのままメンバーとコミュニケーションできるのが強み。

- [ZabbixとSlackでChatOpsのススメ](http://qiita.com/usiusi360/items/7ce5cdec5940589f28af)
- [ChatOpsによるアプリケーションのエラー監視 (Slack / Hubot / SQS)](http://qiita.com/s-kiriki/items/a59cb9ef28137a2d5c93)
- ゆるきゃら「ぺこbot」が生まれた理由
ぺこbot爆誕！＠Socket ([Software Design 2016年1月号](http://gihyo.jp/magazine/SD/archive/2016/201601))
- エンジニアのためのより良い環境づくり
はてなにおけるChatOpsのこれまでとこれから ([Software Design 2016年1月号](http://gihyo.jp/magazine/SD/archive/2016/201601))


事前に決まっている予定の通知
------

事例では定期的に変わる当番をその都度通知してくれる、というもの。事例はプライベートでの活用方法だが、業務における当番やゴミ捨て当番の通知なども他事例であり。
あとは、スケジュールサービスと連動させて特定のイベントが発生した、あるいは発生する直前に通知するという他事例もあり。

- [我が家を支えるChatOps](http://qiita.com/ogataka50/items/5e36000ed3cb01e1090c)

チームなど活動の通知
------

比較的粒度の細かい個人の活動を特定チャネルに流し込むことで、メンバーの活動状況を可視化する。Twitterのようにひとりごと？を自分で流し込む他に、レポジトリへのcommitのような活動や、情報共有ツールへの投稿なども自動的に取り込むと、より可視性が高まる。

- [Slackで簡単に「日報」ならぬ「分報」をチームで実現する3ステップ 〜 Problemが10分で解決するチャットを作ろう](http://c16e.com/1511101558/)


現実世界におけるイベントの通知
------

現実世界でのイベントをセンスする方法が必要だが、通知のインターフェースを一本化するという点においてメリットがある。特に2番めの事例で来客通知をChatに流すというのが興味深かった。あまり事例をみかけなかったが、いろいろなセンサーと組み合わせると面白いことができそう。

- [Slack による荷物配達・受け取りの効率化について](http://qiita.com/pine613/items/729cc123572acbc6cd06)
- [Hubotを導入して 1年で感じた事](https://speakerdeck.com/akira_hamada/hubotwodao-ru-site-1nian-degan-zitashi)


雑談・ほのぼの
=====

業務改善などに直接寄与しないが、人を和ませたりするもの。これはこれで重要。

- [DocomoruでBOTと雑に会話する](http://qiita.com/r7kamura/items/55f398624dbce1c6dc14)
- [SlackでLitaと雑談してみる](http://qiita.com/tsumori/items/4a9b8480d4f8d9b7207a)
- [Slackに住む僕らのペット(Capybara)](http://qiita.com/chory_amam/items/6daff58d773c169f6781)
- [Cloudn PaaSチームのChatOps実践](http://www.slideshare.net/jacopen/cloudn-paaschatops?ref=http://hubot-chatops.connpass.com/event/9370/presentation/)
- [2015年にプライベートで作ったbotたち](http://qiita.com/treby/items/aa731e4e75d2efa1f0b4)


余談
-------------

### 画像を使ったチャットコミュニケーション

- [Botkit + ImgurでプルリクにLGTMする](http://qiita.com/hiconyan/items/f850a901852f7d6b56df)
- [Slackで特定の文字列に対してbotにEmojiリアクションさせる](http://qiita.com/Horie1024/items/b24ef0f137d9fddb1b5c)


ChatOpsをやるにあたってのメリットまとめ
======================

調べた結果の感想です。

- **共通インターフェース**。常に立ち上げているツールでいろいろなことができる。一昔前？のUnixエンジニアのterminalと同じ。ただしコマンドなどが増えると結局は学習曲線の問題に直面する。
- **インタラクティブ性がある**。通知を受け取るインターフェースと何かの動作をするためのインターフェースが統一しやすい。
- **応答性**。常時利用している可能性の高いツールなので、素早く通知などを検知し対応にうつれる。逆に言うと通知されるべきメッセージの制御は重要。
- **共有がしやすい**。チーム内で何をやったかの可視化になる。
- **記録に残しやすい**。明示的に記録をするという手続きをしないでも作業記録が残り、後からの検索も容易
- **業務プロセスの再定義**。結局のところ必要な入力・出力パラメータは何か？というのがはっきりする。逆にいうとこれがはっきりしていないとあまり意味が無い。

参考
- [ChatOpsのバッドノウハウ](http://qiita.com/kotatsu360/items/4fd049de3a9137981e6a)