⚠️

公式Slack Appを作成せずにSlackツールをChrome拡張で作成する技術

2024/04/17に公開

この記事について

作例したサンプルコード

https://github.com/igara/slack_message_chrome_extension

内容としては所属しているSlackチームのチャンネルを取得してチャンネルにメッセージを送信するSlack API使用できるかテストしたものになっています。

chrome_extension

解説

全体のスクリプトの挙動を図式化しました。
追って解説していきます。

chrome_extension_architecture

popup, content_script, background イベント伝搬方法

addListener, sendMessageによるイベント送信でそれぞれのスクリプトに情報を伝えるようにしています。

  • イベント登録
chrome.runtime.onMessage.addListener((request, _, sendResponse) => {
  if (request.event === "任意のイベント名") {
    // 実行したい処理記載
  }
});
  • イベント送信
chrome.runtime.sendMessage(
  {
    event: "任意のイベント名",
    ...その他伝えたい情報など
  },
  () => {
    // 実行したい処理記載
  },
);

HttpOnlyのCookie取得

通常はHttpOnlyのCookieをdocument.cookieから取得できません。
Chrome拡張は権限を許可することによって使用できるAPIがあります。

https://developer.chrome.com/docs/extensions/reference/permissions-list?hl=ja

cookies を許可してHttpOnlyのCookieをbackgroundのスクリプトから取得しています。

今回は@crxjs/vite-pluginを使用したものでmanifest.jsonの記載はvite.config.tsに記載しています。

Slack APIのリクエスト

Slackをブラウザで開いて開発者ツールでSlack API Docsにあるものを実行してもCORSで弾かれます。
backgroundのスクリプトはHTML上で動作する環境とは異なり、NodeJSのような環境でAPIのリクエスト実行が可能です。

最後に

重ねてですが今回の方法はおすすめできる方法ではありません。
ですが、ちょっとしたハックで抜け道的に個人の業務改善や趣味に活用するための発想転換方法として思い出していただければと考えています。

参考リンク

GitHubで編集を提案
chot Inc. tech blog

Discussion