グローバルナビゲーションへ

本文へ

フッターへ

お役立ち情報Blog



Google Apps Script (GAS)を使った業務効率化「社員へのリマインドを自動化してみた」

当社では毎月実施するセキュリティチェックなど提出期限の決まった定型業務があります。
担当者が提出期限前に口頭やメールなどでリマインドを行ってくれていますが、定期的にリマインドを送る担当者の負担になってしまいます。

今回はGoogle Apps Script (GAS)を使ってGoogleスプレッドシートとSlackを連携させて、提出期限のリマインドを自動化して担当者の負担を減らす方法をご紹介します。

Slackの設定

まずはSlackアプリを新規作成します。以下のURLにアクセスしてCreate an AppボタンからSlackアプリを作成します。



Slackアプリ新規作成画面1

Create an Appを選択するとモーダルでアプリ名とWorkspaceの入力を促されます。

Slackにログインしていればログイン中のWorkSpaceが表示されるので、適当なアプリ名とWorkSpaceを選択してください。
右下のCreate Appボタンを選択すると基本情報画面が表示されます。

Slackアプリ新規作成モーダル


ローカルナビゲーションのIncoming Webhooksを選択してIncoming Webhooksの設定画面に移動します。

Incoming Webhooksへの導線


Activate Incoming WebhooksのボタンをOnに変更します。

Incoming Webhooksのアクティベート


ボタンをOnに変更すると画面下に新たにWebhook URLの一覧が表示されます。
初めてアプリを作成する場合はURLが何も登録されていませんので、Add New Webhook to Workspaceボタンから新規追加します。

Webhookの追加画面1

Webhookの追加画面2

Allowを選択すると先程の画面にWebhook URLが追加されます。


Webhook URLs
新規作成されたWebhook URLは後程使用するのでCopyボタンを押してメモしておきましょう。
Slackの設定は以上です。

Googleスプレッドシートにデータを入力する

Googleスプレッドシートには以下のような想定で作成してみました。

  • 最初の列は提出期限日
  • 最初の行に提出者の名前
  • 提出済みの人には✔ボタンを付ける
  • 提出日時に未提出(✔がない)人にリマインドを通知する

Googleスプレッドシート

Google Apps Scriptを作成する

Googleスプレッドシートの画面からGoogle Apps Scriptを作成します。
ページ上部のナビゲーションからツール ⇒ スクリプトエディタを選択すると別ウィンドウでスクリプトエディタが開きます。

スクリプトエディタ

Google Apps Scriptにコードを追加する

スクリプトエディタには以下のコードを記述しました。

function main() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var data = sheet.getDataRange().getValues();
    var today = new Date();
    var lastCol = sheet.getLastColumn();

    // 1行目にある名前の一覧を取得します
    var names = data[0].slice(1, lastCol);
    Logger.log(names);

    // 今日の日付と一致する一列目の日付の行を取得します
    var found = data.slice(1, data.length).filter(function (row) {
        var dueDate = row[0];

        return Utilities.formatDate(today, 'Asia/Tokyo', 'YYYY/MM/dd') === Utilities.formatDate(dueDate, 'Asia/Tokyo', 'YYYY/MM/dd');
    })[0];
    Logger.log(found);

    // 日付が一致しない時は何もしません
    if (typeof found === 'undefined') {
        return false;
    }

    // 未提出の名前の一覧を作成します
    var unsubmitted = [];
    found.slice(1, found.length).forEach(function (value, index) {
        if (value.length === 0) {
            unsubmitted.push(names[index]);
        }
    });
    Logger.log(unsubmitted);
    
    // 未提出の人がいる場合はSlackでメッセージを送信します
    if (unsubmitted) {
        sendMessageToSlack(Utilities.formatDate(found[0], 'Asia/Tokyo', 'YYYY/MM/dd'), unsubmitted);
    }
}

function sendMessageToSlack(dueDate, unsubmitted) {
    var url        = '先程コピーしたWebhook URL';
        
    var payload = {
        "blocks": [
            {
                "type": "section",
                "text": {
                    "type": "mrkdwn",
                    "text": "提出期限は" + dueDate + "までです\n未提出の方は早めに提出するように頑張りましょう"
                }
            },
            {
                "type": "divider"
            },
            {
                "type": "section",
                "text": {
                    "type": "mrkdwn",
                    "text": ":japanese_ogre: 未提出者"
                }
            },
            {
                "type": "section",
                "fields": unsubmitted.map(function(name) {
                    return {
                        "type": "plain_text",
                        "text": name,
                        "emoji": true
                    };
                })
            }
        ]
    };
    var params = {
        "method": "post",
        "contentType": "application/json",
        "payload": JSON.stringify(payload)
    };

    var response = UrlFetchApp.fetch(url, params);

変数urlの値を先程メモしておいたWebhook URLに書き換えます。

function sendMessageToSlack(dueDate, unsubmitted) {
    var url        = '先程コピーしたWebhook URL';

payloadのAPIの詳細は以下のリファレンスを参考にしてください

Slackへの通知の整形方法はBlock Kit Builderが便利でした。

参考

Google Apps Scriptの動作を確認する

実際にSlackにメッセージが送信されるか確認してみましょう。

※当日の日付の時にしかメッセージを送信しないので、Googleスプレッドシートに当日の日付の行を追加します。

Googleスプレッドシートに1行追加


スクリプトエディタの実行ボタンを選択して、スクリプトを実行します

GAS 実行ボタン


初めての場合は認可処理を求められるので許可を確認を選択します。

認可処理1

認可処理2


警告画面が表示されますが、左下の詳細ボタンからアプリを選択します。

警告画面1

警告画面2


アプリを選択するとGoogleアカウントへのリクエスト許可画面が表示されるので内容を確認して許可を選択します。

Google認可画面


無事Slackに通知が届きました。

Slack 通知

Google Apps Scriptにトリガーを追加する

このままではスクリプトエディタ画面から実行ボタンを押す時だけしか実行されません。
定期的に自動で実行されるようにGoolge Apps Scriptにトリガーを設定していきます。

スクリプトエディタの現在のプロジェクトのトリガーボタンからトリガーの設定をします。

トリガーボタン

トリガーの一覧画面右下のトリガーを追加ボタンを選択します。

トリガー一覧


イベントのソースを選択で定期的に実行したい時間を適宜設定します。 今回は以下の通り設定してみました。

イベントのソース 時間主導型
時間ベースのトリガーのタイプ 週ベースのタイマー
曜日を選択 毎週月曜日
時刻を選択 午前9時~10時

トリガーを追加モーダル

これで定期的に実行されるようになりました!

さいごに

駆け足ですがGoogle Apps Scriptを使ってGoogleスプレッドシートのデータからSlackに通知を送るまでの流れをお伝えしました。

面倒な事は自動化してより重要な業務にフォーカスできるようにしていきたいですね。

この記事を書いた人

美髭公
美髭公事業開発部 web application engineer
2013年にアーティスに入社。システムエンジニアとしてアーティスCMSを使用したWebサイトや受託システムの構築・保守に携わる。環境構築が好き。
この記事のカテゴリ

FOLLOW US

最新の情報をお届けします