今回は、Google Apps Scriptを活用して、Slackに特定の条件で自動的に通知を送るプログラムを書いていきます!
仕事で「何度も同じような連絡をSlackでしてるなぁ。」と思ったら、自動化のサインです!自動化したってついでに周りの同僚の仕事も奪ったりましょう!
ここでは、「今日予定が書き込まれていたら、『タスクあるよ!』」と通知してくれるプログラムを作っていきます。
Slackの設定
まずは、通知を行いたいSlackの設定を行っていきます。
Slackを立ち上げて、チャンネルの右側の「▼」マークをクリックして、「Customize Slack」を選択します。
次に、遷移先のページで「Menu」という箇所をクリックし、そのあとに「Configure Apps」をクリックします。
検索欄に「Incoming WebHooks」と入力して、Incoming WebHooksを選択します。
次の画面で、「Add Configuration」をクリックします。
チャンネルを選択して、「Add Incoming WebHooks integration」ボタンをクリックします。*チャンネルはここで指定したもの以外にも通知できるし、のちのち変更することもできるので、ここでは適当に選択してOKです。
以上で、WebHook URLが表示されているはずです!これをメモしておきましょう。Google Apps Scriptで使います!
そして、こちらのページを下までスクロールしていくと、画像の設定ができる箇所があります。
通知を行う際のアイコン画像を設定したい時は、ここで画像をアップロードして「Save Settings」しておきましょう。
これで、Slackの設定は完了です。次に、Google Apps Scriptにプログラムを記入していきます。
GoogleSpreadSheetの設定
ここからは、GoogleSpreadSheetの設定を見ていきます。
まずは、任意のGoogleSpreadSheetを選択します。ここでは、上の画像のような形式・内容になっているスプレッドシートを想定します。
「ツール」 → 「スクリプトエディタ」を選択します。
すると、上の画像のようなコードを記載できる画面が表示されます。
ここにプログラムを書いていきます。今回は、今日タスクを持っている人がいた場合に、その人とタスクの内容をSlackに通知してくれるプログラムを書いていきます。
var isTask; var postText; var tasks = []; /* ** 今日の日付でタスクがあればSlack通知する */ function postCReviewEventRemind(){ /* 平日でなければ処理中断する */ var currentDate = new Date(); var weekday = currentDate.getDay(); if (weekday == 0 || weekday == 6) { return; } var calendar = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com'); if (calendar.getEventsForDay(currentDate, {max: 1}).length > 0) { return; } searchSheetAndSetTasks(); taskText(this.isTask); var postText = this.postText postSlack(postText) } /* ** textをslackに通知する */ function postSlack(text){ var url = "WebHooksのURL"; var options = { "method" : "POST", "headers": {"Content-type": "application/json"}, "payload" : JSON.stringify({ "channel" : "general", // 通知先チャンネル名 "text" : text, }) }; UrlFetchApp.fetch(url, options); } /* ** タスクのあるなしによって文章変更 */ function taskText(isTask){ var time = new Date(); var month = time.getMonth() + 1; var day = time.getDate(); var today = month + "月" + day + "日" var postText; if (isTask) { this.postText = "今日(" + today + ")はタスクあり!\n" for (var i = 0; i < this.tasks.length; i++) { this.postText = this.postText + "\n" + (i + 1).toString() + "人目 タスク:" + tasks[i][2] + "\n担当:" + tasks[i][1] + "さん\n" } } else { this.postText = "今日(" + today + ")はタスクなし!\n" } } /* ** 今日タスクがあるのか判定し、あればタスクの配列をセットする */ function searchSheetAndSetTasks(){ this.isTask = false; var today = new Date(); var splitedToday = today.toString().split(" "); var sheet=SpreadsheetApp.getActiveSheet(); var range=sheet.getRange("A1:A10"); for (var i = 1; i < range.getNumRows(); i++) { /* 今日タスクがあるか、月・日・年で順を追って判定していく */ var time = range.getCell(i,1).getValue().toString(); var splitedTime = time.split(" "); if (splitedToday[1] == splitedTime[1]) { if (splitedToday[2] == splitedTime[2]) { if (splitedToday[3] == splitedTime[3]) { this.isTask = true; this.tasks.push(sheet.getRange("A" + i + ":C" + i).getValues().toString().split(",")); } } } } }
WebHooksのURLは自分のものをコピペし、channelは自分の通知を行いたいチャネル名に変更しましょう。
以上のプログラムを記述したら、「Commnd」+「S」で編集内容を保存しましょう。
次に、ファイルの実行のために「実行」→「関数を実行」→「postTaskNotification」を選択します。
初めてのファイル実行の時は、「承認が必要です」という表示がでます。承認してあげましょう。
「許可を確認」→「詳細」→「xxx(←スプレッドシートの実行ファイル名)に移動」をクリックします。
アクセス権限を付与するため、「許可」をクリックします。
以上でアクセス権限を付与することができたら、再度スクリプトを実行してみましょう。
通知先に設定したチャンネルを確認すると、通知が来ているはずです!素晴らしい!
*ちなみに、以下のコードで、動作を平日限定にしているので、平日の場合は通知が送信されません。
/* 平日でなければ処理中断する */ var currentDate = new Date(); var weekday = currentDate.getDay(); if (weekday == 0 || weekday == 6) { return; } var calendar = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com'); if (calendar.getEventsForDay(currentDate, {max: 1}).length > 0) { return; }
祝日でも実行したい時は、「if (weekday == 0 || weekday == 6)」の箇所の「0」か「6」を任意の数字に変更しましょう。(日曜日→0、月曜日→1、...土曜日→6という対応になっているので、土曜日の場合は6を、日曜日の場合は0を他の数字に変更して再度実行してみれば、うまく送信されるはずです。)
さらに、このプログラムを毎回「実行」としなくても済むように、トリガーを設定して自動で処理が走るようにしておきましょう。
タイマーのようなマークの「現在のプロジェクトのトリガー」をクリックし、画像のように設定していき、「保存」します。これによって、平日の12時~13時の間に、タスクがある場合にはチャンネルに自動的に通知が行われます!!いつもの連絡作業をちょこっと自動化できました!!
プログラムの変数を少し変更したりすれば、特定の条件でのSlack連絡は自動的に行うことができるようになり、作業を自動化することができます!
Google Apps Scriptの偉大さを知った日でした。
作業自動化については、今後も紹介していきますね!
詳解! Google Apps Script完全入門 ~Google Apps & G Suiteの最新プログラミングガイド~
高橋宣成 (著) 秀和システム (2018/1/1) |
では!