Featured image of post 【目次】PerlでSlackボット指令センターを作る(全9回)

【目次】PerlでSlackボット指令センターを作る(全9回)

Perl と Moo で Slack ボットを作りながら、Command・Mediator・Observer を学ぶ全9回の連載。目次を兼ねた案内板で、読む順と各回の内容をまとめています。

Slack に送ったメッセージを受け取って返すだけのボットを、Perl と Moo で作るところから始めます。そこへ /deploy や /log といったコマンドを足していくと、if-elsif がすぐに手に負えなくなります。その困りごとを1つずつ片付けていくと、Command・Mediator・Observer という3つのデザインパターンになります。最後は、権限チェックとエラー処理まで備えた ChatOps の「指令センター」が動きます。

このページは目次を兼ねた案内板です。通して作るなら「全9回」を順に、特定の困りごとがあるなら「困りごとから探す」から選んでください。

  • 対象: Perl の基本と Moo の入門を終えた方
  • 使うパターン: Command、Mediator、Observer

読み方

  • 通して読む: 第1回から順に。コードは前の回の続きで、各回の終わりに次の回で直す問題が示されます
  • パターンだけ知りたい: 第3回で if-elsif の行き詰まりを確かめてから、第4回(Command)→ 第5回(Mediator)→ 第6回(Observer)。前提のコードは第1〜2回にあります
  • 全体像だけ見たい: 第7回の動作の流れと、第9回のアーキテクチャの振り返り

全9回

  1. Slack のメッセージを Perl で受け取って返信したい。Webhook サーバーと署名検証から始める
  2. Slack から /deploy や /restart を実行したい。まず正規表現で振り分けて動かす
  3. コマンドを足すたびに if が伸びていく。ログ・SQL・ユーザー管理を足して破綻を確かめる
  4. コマンドごとの if を片付けたい。コマンドを Command オブジェクトにして追加しやすくする【Command】
  5. コマンドの振り分けや権限チェックが本体に散らばる。仲介役を Mediator に一元化する【Mediator】
  6. 実行結果を Slack 返信・監査ログ・メトリクスに流したい。通知を Observer に任せる【Observer】
  7. Mediator・Command・Observer をつなぐと、どう動くのか。指令センターを組み上げて動かす
  8. コマンドが die したり、権限のないユーザーが叩いたりしたら。エラー処理と権限を Mediator に集める
  9. 指令センターが形になった。3つのパターンの役割分担を振り返り、ChatOps で次に伸ばす先を考える

困りごとから探す

Slack からメッセージを受け取って返したい

  • 第1回 — Plack で Webhook を受け取り、返信し、署名検証でなりすましを防ぐ

コマンドが増えて、分岐が伸び続けている

  • 第2回 — 正規表現でコマンドを振り分ける素朴な実装
  • 第3回 — 機能を足すたびに if-elsif が破綻していく様子
  • 第4回 — コマンドを Command オブジェクトにして、追加を新しいクラスで済ませる

振り分けや権限チェックが本体に散らばっている

  • 第5回 — Mediator に集めて、各コマンドは必要な権限を宣言するだけにする
  • 第8回 — エラー処理とタイムアウトを dispatch の一か所に集める

実行結果を Slack 返信・監査ログ・メトリクスに流したい

  • 第6回 — Observer で通知し、コマンドのコードに触れず出力先を増やす

パターンの組み合わせ方を知りたい

  • 第7回 — 3つのパターンがつながって動く流れ
  • 第9回 — 役割分担の振り返りと、非同期処理・Block Kit・AI 連携という発展先
comments powered by Disqus
システム開発・AIワークフローのご相談は Meetsource へ
Hugo で構築されています。
テーマ Stack は Jimmy によって設計されています。