Skip to content

Slack app 関連情報まとめ

What's this?

Quden の Slack app を作成するにあたって調査したことをまとめています。

Overview

2022年8月24日現在、Quden の Slack 通知は deprecated な incoming webhooks の機能を利用して実装されている。

現在の方法では、下記のような問題がある。

  • ユーザーに slack の設定画面にアクセスしてもらい URL を発行してもらわなければならず手間である
    • Quden チャンネルごとに通知する Slack チャンネルを変えようものなら、手間はそのパターンの数だけ増えていく
  • 廃止される可能性のある Deprecated な機能は使いたくない

そこで、こちらのドキュメントで推奨されているような方法で Quden の Slack app を作成して、Quden に関する情報更新通知をしたり、あわよくば Quden に関する操作を Slack 側から行うようにしてきたい。issue は下記である。

Quden において、Slack app を用いて実現したコアの機能は以下の通り。

  • Quden の情報更新(新規クリップ追加時、コメント追加時など)通知を Slack App を経由して行うように置き換える
  • Quden のチャンネルごとに、通知対象かどうかを設定する

これを実現するには以下のような方法がありそう。

  • 1: incoming-webhook を permission scope に持ったシンプルな Slack app を作成する
    • メリット
      • 現在の webhook URL を代替する形になる
    • デメリット
      • Slack に対するリッチな操作ができない
  • 2: incoming-webhook だけでなく chat.postMessagechannels.read なども permission scope に持たせた Slack app を作成する
    • メリット
      • Quden の web アプリケーションと Slack をリッチに連携できる
    • デメリット
      • 実装はやや複雑になる

結論としては 2 の方法で Slack app を作成していきたい。

実装の概要としては以下のような形になりそう:

  1. OAuth を利用して Quden の Slack app をインストールしてもらう
    • このとき、広めの scope で permission をリクエストする
  2. OAuth フローに従い、access token を取得する
  3. 別途、どの Quden チャンネルの変更通知を Slack チャンネルに通知するかどうかに関する情報を DB に構造化して保持する
    • TODO: 要仕様検討
    • Quden channel と slack channel の紐付けができていればいいので、Quden の web アプリケーション側から設定できてもよいし、GitHub のように Slack 側からスラッシュコマンドで設定できるようにしてもよい
      • おそらく最初は前者の Quden の web アプリケーション側から設定する形になるが、後者の形にも対応できるようなデータ構造にしたい
  4. 既存の incoming webhook url を呼び出している仕組みを利用しつつ、バックエンドアプリケーションから、slack client を利用して各種処理を行う

Resources