notebook

都内でWEB系エンジニアやってます。

Slack Workflow BuilderのWebhookを使って簡単記録用APIを作る

Slack Workflow BuilderのWebhookとスプレッドシート連携を組み合わせてわざわざ用意するほどでもないような記録用のAPIを作れそうだったのでやってみた

流れとしては下記

  • Webhookの設定を行いURLを発行
  • リクエストを受け取りスプレッドシートへ記録

Webhook

Webhookを起点にワークフローを発火させることが可能

Slack以外のワークロード上からWebhookへリクエストを行いワークフローを発火、設定内容に従いカスタマイズされた通知を行うなどが行える

本当に簡易な通知だけを行いたい場合であればわざわざプログラム側でSlackのモジュールを読み込まずともHTTPリクエストを飛ばすだけで通知できる点がメリット

スプレッドシート連携

あらかじめ設定した内容にしたがい、スプレッドシートの操作を行える

Slack Workflow Builderとの連携では次の操作を行える

  • 行の操作
    • 追加
    • 削除
    • 更新
    • 選択

選択というのは、SQLでいうWHERE A ="hoge"というような取得の方法

GUI上でどのカラムがどの値のレコードというのを指定する

更新、削除については、選択を行い対象レコードを絞ったうえで更新、削除を行う

制約

色々使ってみたがスプレッドシート連携では下記のような制約があった

  • 絞り込み

絞り込み後の対象レコードは必ず1行になっている必要がある

1行に絞り込めなかった場合はエラーとなる

そのため、スプレッドシート側で関数などを駆使し絞り込み対象のレコードが1行になるよう工夫する必要がある

  • メンション

スプレッドシートから取得した値を元にメンション化するというのは執筆時点ではできないよう(問い合わせして聞いた)

簡易記録API

ということでサクサク作っていく

あらかじめ連携対象のスプレッドシートは準備しておく

今回は1行目のヘッダ用の行にts,service,key,valueを記載した

設定のスクショを載せておく

全体感

Webhook設定

スプレッドシート連携の設定

試し

実際に使う場合は、リクエスト対象を発行されたWebhookのURLに差し替え実行する

$ curl -X POST https://hooks.slack.com/triggers/hoge/fuga/piyo -d '{"service":"hoge", "key":"key1","value":"hoge"}'

結果

いい感じ

メリデメ

この手法のメリット・デメリットは下記

ほとんどWebhookについてって感じではあるが…

  • メリット

    • 維持管理コストがほぼ不要
    • 通常何かしらのエンドポイントを用意する場合ドメイン管理やサーバ、実行環境の用意、データ保存領域のメンテナンスなどが必要だがそのあたりをまるまるSlackにお任せできてしまえる
    • これだけでも個人的にはかなりポイント高いなーと感じている
  • デメリット

    • 認証などの機能はない
    • 公開状態のURL(URLさえ知っていれば誰でもアクセスできる)

おわり

SlackのWorkflow BuilderとWebhook、スプレッドシート連携を組み合わせて記録用のAPIを作ってみた

考えれば他にもあると思うが、ざっと思い付くだけでも次のような用途で使えそう

  • Rubocop、各種Linterの警告数推移
  • テストカバレッジの数値
  • デプロイタイミングの記録

この辺はずっと課題感を感じていた部分ではあるのでこのくらいの労力で実現できるのはかなり嬉しい感がある

個人的にはWorkflowがv2になって自分のマイドライブ以外の共有ドライブにあるファイルとの連携ができるようになり、さらにUIも改善されたイメージなので結構満足

よければ真似してみてください