吉田の雑記

エンジニアとしてのアウトプット中心でその他のことも書きます

GASを利用してMattermostにリマインダーメッセージを送信する

はじめに

コミュニティ内では有志でやっている輪読会があるが、公式で管理されているイベントではないので意外と忘れがちだった。
なので当日にリマインドができないか考え、またGASを使ったことがないなと思ってスクリプトを作ってみた。
(というより最近全然プログラミングしてない!Geek Outしなきゃという使命感に駆られたため、正直後者が目的になった...)

作成したスクリプト

github.com

送信したイメージは以下のような感じ

gyazo.com

利用した技術

概要

シーケンス図は以下の通り(スクリプトだけ渡して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の使い方

dev.classmethod.jp

staff.hatenablog.com