もふもふ技術部

IT技術系mofmofメディア

テックトーク管理用Slack Botでテックトーク運営を自動化した

こんにちは。出口です。 先日紹介したテックトーク用のSlack Botを作りました。

テックトークについては以下の記事を参照してください。

www.mof-mof.co.jp

Slack Botのアーキテクチャは以下の通りです。

メインはGoogle Apps Script(GAS)です。
テックトークはNotionのデータベースで管理しています。
GASを使ってNotionのDBを読み取り、Slackに通知するものです。

TSで書いたものをVite + RollupでJSにトランスパイルしてclaspを使ってGASに反映する形にしました。
Vitestでテストも書いてます。

vite.config.jsの内容は次の通りです。

import path from "node:path";
import rollupPluginGas from "rollup-plugin-google-apps-script";
import { defineConfig } from "vite";

export default defineConfig({
  plugins: [
    rollupPluginGas({
      manifest: {
        copy: true,
      },
    }),
  ],
  build: {
    rollupOptions: {
      input: "src/index.ts",
      output: {
        dir: "dist",
        entryFileNames: "index.js",
        format: "iife",
      },
    },
    minify: false, // trueにすると関数名が消えるのでfalse必須
  },
  resolve: {
    alias: {
      "@": path.resolve(__dirname, "./src"),
    },
  },
});

rollup-plugin-google-apps-scriptを使っています。

github.com

トラブルシューティング

Notionのデータベースからデータが取得できない

データを取得するには、Notionのインテグレーションとデータベースを接続する必要があります。

インテグレーションはワークスペースのオーナーでないと作成出来ないので注意が必要です。

定期実行の設定が思った感じに出来ない

GASはトリガーを設定して定期実行が可能ですが、設定の最小単位が1時間なので、そのままだと決まった時間に定期実行することは出来ません。

// 毎週金曜日9時〜10時のどこかで実行される
ScriptApp.newTrigger('notifyTechTalkReminder')
  .timeBased()
  .onWeekDay(ScriptApp.WeekDay.FRIDAY)
  .atHour(9)
  .create();

特定の時間を指定して1回だけ実行するトリガーの設定は可能なので、これを使って処理を実行したら、次のトリガーを設定することで無限に設定し続けるようにしました。

こんな感じです。

export function setTechTalkReminderTrigger() {
  deleteTrigger("executeTechTalkReminder");

  const executionDate = getNextWeeklyExecutionDate(5, 9, 0); // 次の金曜日の9時を取得する
  ScriptApp.newTrigger("executeTechTalkReminder")
    .timeBased()
    .at(executionDate)
    .create();
}

export function executeTechTalkReminder() {
  notifyTechTalkReminder(); // Notion APIでデータ取得して、Slackに通知するメソッド
  setTechTalkReminderTrigger();
}

まとめ

TypeScriptとGoogle Apps Scriptを組み合わせて、テックトーク管理を自動化するSlack Botを開発しました。

Notionのデータベースと連携することで、チームのナレッジ管理と通知の自動化を実現できました。

今後もフィードバックを基に改善出来たらなと思っています。

同様の課題を持つ方々の参考になれば幸いです。