GASを利用してMattermostにリマインダーメッセージを送信する
はじめに
コミュニティ内では有志でやっている輪読会があるが、公式で管理されているイベントではないので意外と忘れがちだった。
なので当日にリマインドができないか考え、またGASを使ったことがないなと思ってスクリプトを作ってみた。
(というより最近全然プログラミングしてない!Geek Outしなきゃという使命感に駆られたため、正直後者が目的になった...)
作成したスクリプト
送信したイメージは以下のような感じ
利用した技術
- Google Apps Script(GAS)
- スプレッドシート
- MattermostのIncoming Webhook
- ソース管理にClaspを利用
概要
シーケンス図は以下の通り(スクリプトだけ渡してGPTに作図してもらった)
sequenceDiagram participant TimeTrigger as 時間ベースのトリガー participant GAS as Google Apps Script participant Spreadsheet as スプレッドシート participant Mattermost as Mattermost TimeTrigger->>GAS: 12:00~13:00にsendReminders()実行 GAS->>Spreadsheet: アクティブなスプレッドシートを取得 Spreadsheet-->>GAS: アクティブなスプレッドシートを返す GAS->>Spreadsheet: "settings"シートのデータを取得 Spreadsheet-->>GAS: 設定データを返す loop 各設定の確認 GAS->>Spreadsheet: 対象のシートデータを取得 Spreadsheet-->>GAS: シートのデータを返す loop 各イベントの確認 GAS->>GAS: 日付の一致を確認 opt 日付が一致 GAS->>Mattermost: メッセージを送信 Mattermost-->>GAS: 受信確認 end end end
作ってみた感想
Slack appを作成したことのある人は正直1日で理解・作成できるクオリティだと思う。
他の人も見てる自身のtimesに送信するように作ったので、そういえば今日イベントだったと思い出すことに繋がっているといいな。
追加でやるなら
今回はとても小さい機能を作ったので、GASのコード自体Git管理する必要があったのか怪しいところではあるが、複数人で開発したりもっと大規模にやるならソースコード管理、TypeScript化、Jestなどのテストコード作成も視野に入るかと思う。
ただし、そこまで行くとGASでやる範囲を超えているのでは?という感覚もある。
最後に
Slackだと/remindコマンドで一発のところを、GASを使って丁寧に(?)やるとこんな感じという知見を得た。
参考
- Claspの使い方
- はてなブログへのMermaid記法の図の挿入方法