その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

chat ops について

chat ops について,何が嬉しいのかとか,その辺を上手く言葉にできていなかったので言葉として記しておくこととします.
chat ops のメリット・デメリットなんかは先達によって散々語り尽くされていると思うところですが,自分の思考をまとめるために……


chat ops というのは基本的に「chat を共通のコマンドライン」と見なして,その上で様々な作業,例えばデプロイなんかを行なうことを指すと思います.
「共通のコマンドライン」はチームの知識が詰まった道具箱であり,それを共有することは大きな力になると思います.
その「共通のコマンドライン」で作業することの何が嬉しいかというと,最も大きなものでは「作業の属人化を避けることができる」というものが挙げられるでしょう.
作業の属人化を避けるというのはすなわち誰でも作業可能になるということで,つまりこれは「お願いします脳」に陥ることを防ぐ大きな助けになる事を意味すると思います.
(とは言え,それはそのチャットを介して行われる作業がブラックボックス化されているというだけということでもあり,本当の属人化を防ぐためにはその裏側に対する理解を深める必要があるとも思います.例えばデプロイだったらチャットを介して呼ばれるデプロイスクリプトを読むなど)


ところで,「コマンドライン」といえば入力するだけではなく,その出力を加工して新たな副作用を生むことも可能です.
chat ops でも同様に,能動的にコマンドを発行するだけでなく,チャットに流れる文言を受けて,その内容に基づいて任意の処理を実行させることが出来ます (というか仕組み的には,能動的なコマンド発行に見えているものも,一旦その命令 (メッセージ) がチャットに書き込まれて,その「チャットに流れた命令」を bot やらなにやらが解釈して対応する処理を行っているので当然の話).
例えば,バッチ処理の開始時や終了時にその結果をチャットに流して,そのチャットメッセージに引っ掛けてメールで投げる,みたいなものが考えられるでしょう.

挙げた例はメール送信処理というものでしたが (あまり汎用的な良い例を思いつかなかった……),もっとプライオリティの低い (失敗しても構わないような,しかしあると便利な) 処理であれば,できるだけその処理をプロダクションコードに含めたくないというのが心情というものです.
万が一そのプライオリティの低い処理が失敗してしまったばかりに,他の重要な処理を巻き添えにして死んでしまっては目も当てられません.
そこで,そういった処理の本体はプロダクションコードに含めずに,その代わりにイベントに応じたチャットのメッセージにフックさせることで,他のプログラムに優先度の低い処理を委譲してしまうという方法が考えられると思います.
そうすることで,その「他のプログラム」がもしも失敗してしまっても,処理の本体は巻き添えを食わずに処理を継続することが可能となります.
つまりチャットを,プロダクションコードを一切いじること無く挙動を拡張することを可能にするハブのような存在として扱うことで,変更による破壊から身を守ることが出来るようになるという感覚です.この機構に乗ることによって,プロダクションコードを気にせず安心して挙動を拡張することが可能となるというメリットを享受することができます.

とは言え,何でもかんでもチャット経由で処理させようとすると処理の内容がプロダクションコードと chat ops 用のコードとで分散してしまって良くないので,適切な分離を心がける必要はあると思います.


また,chat ops につきまとう難題として権限分けの話題があると思っていて,ここについては何か良い方法があるのかどうかよく分かっていません.
誰でも彼でもデプロイ出来てしまえばそれは問題ですし,チャットに流れてくる内容をあらゆる所に無権限でフォワードされても困ってしまいます.
User ID で縛るロジックを chat opsスクリプトに仕込むみたいな素朴な方法がパッと思いつきますが,あまりにアドホックというか……
(この辺を上手く扱えるようなチャットのサービスってあるんですかね?)


後,これは当然のことですが,こうしたチャットを介して処理を行なう際はチャットが SPOF になってしまうので,
チャットが死んだ時に運用不能になるような致命的な処理はここでは行なうべきでは無いと思います.


まあ,色々書いた上で身も蓋もない話ですが,コマンドラインでやれば良いものはコマンドラインでやれば良いし,GUI でやれば良いものは GUI でやれば良いし,チャットでやれば良い物はチャットでやれば良いと思います.適材適所で.
chat ops をしたいからと言って,本来不要なメッセージまでチャットに流してしまうのは本末転倒という感じがありますので……