2016/11/18
SlackとGoogle Apps Scriptで定時作業のリマインダーをお手軽作成
目次
はじめまして。今年4月に新卒で入社しました、ゆうみです。
実家を出て半年が経ち、一人暮らしにすっかり慣れてきました。仕事にもだんだんと慣れてきましたが、まだまだ目の前の業務をこなすことで精一杯です。
さて、そんな業務の中に各システムの監視業務があります。監視業務にはいくつか種類があり、その1つに定時作業があります。これは営業時間内の1時間毎に実施します。1時間毎となると、他の業務をしているとすっかり忘れてしまうかもしれません。そこでリマインダーツールを使おうと探しました。しかし、定時作業は担当者4人が日替わりで実施しています。担当でない日にはリマインダーの通知を止めたいのですが、いちいちリマインダーの設定をするのは面倒です。さらに、担当を交代することもあり、その度に設定するのもやはり面倒です。
そこでSlackとGoogle Apps Scriptでリマインダーを自作することにしました。どちらも以前の記事で紹介しています。Slackについてはこちら、Google Apps Scriptについてはこちらから参照できます。この2つのツールを使えばとてもお手軽にリマインダーを作成できるのでご紹介します。今回は、より分かりやすくするために、私1人だけのリマインダーの作成法をご紹介します。
管理表の準備
リマインダーツールを作る前に、まずGoogleスプレッドシートで定時作業担当者の管理表を作成します。私たちは、現在次のような管理表を使っています。
3行目に書かれている人がその日の定時作業担当者です。その日の定時作業が済んだら4行目に〇を付けます。ここでポイントとなるのは担当の日に名前が書いてあることです。これにより自分が担当かどうかを自動で判定することができます。
リマインダーの処理の流れは次の通りです:
- Google Apps Scriptでその日が担当かどうか判定します。
- 担当の日ならばSlackに通知を送信します。
- 1~2を1時間ごとに繰り返します。
たったこれだけの単純な処理ですが、1度作ってしまえばいちいち設定しなおす必要がなくなるのでとても便利です。では、さっそくリマインダーの作成に移ります。
リマインダーの作成
ステップ1: Slackの準備
まず、Slackで通知を受け取る準備をします。通知を受け取るには、Slackのサービスである「Incoming WebHooks」を利用します。
- Slackにサインインして、チームのメニューから「Apps & integrations」を選びます。
- Incoming WebHooksの編集画面を開き、「Add Configuration」をクリックします。
- 通知するチャンネルを選択し、「Add Incoming WebHooks Integration」をクリックします。今回は私個人のプライベートメッセージに送ります。もちろん、どのチャンネルにも通知できます。
- 「Webhook URL」にあるURLをコピーします。このURLはスクリプト作成時に使用します。
ステップ2: スクリプトの作成
次に、Google Apps Scriptで担当の日かどうか判断し、Slackに通知するスクリプトを作成します。スクリプトエディタの開き方は以前の記事の「スクリプトエディタを開く」をご参照ください。このスクリプトを1時間おきに自動実行する設定は次のステップで説明します。スクリプトの処理の流れは次の通りです:
- スクリプト実行時の日付をもとに、管理表からその日の担当者の名前を取得します。
- スクリプト実行時の時間が営業時間内であり、その日の担当者の名前が自分の名前と一緒ならばSlackに通知します。
- 通知は、「リマインダー」という名前で、「@yumi 定時作業をしましょう」という内容です。
具体的なスクリプトは下の画像の通りです。今回は関数名をsendToSlackとし、営業時間を10時から18時までとしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
function sendToSlack() { // 管理表のURL var sheetUrl = "https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/edit"; // 担当者名が記述されている行の番号 var nameRow = 3; // 管理表の氏名が書いてある最初の列の番号 var firstColumn = 2; // 自分の氏名 var name = "ゆうみ"; // Webhook URL var WebhookUrl = "https://hooks.slack.com/services/xxxxxxxxxx/xxxxxxxx/xxxxxxxxxxxxxxxxxx"; // 日にちを取得 var date = new Date().getDate(); // 時間を取得 var hour = new Date().getHours(); // 管理表シートを取得 var sheet = SpreadsheetApp.openByUrl(sheetUrl).getSheets()[0]; // 担当者の氏名を取得 var staffName = sheet.getRange(nameRow, firstColumn + date - 1).getValue(); // 営業時間内かつ担当の日ならメッセージを送信 if (10 <= hour && hour <= 18 && staffName == name) { // Slackに送信する内容 var payload = { username: "リマインダー", text: "@yumi 定時作業をしましょう", link_names: 1 }; // Slackに送信 UrlFetchApp.fetch(WebhookUrl, { method: "POST", payload: JSON.stringify(payload) }); } } |
ステップ3: 自動実行の設定
最後にステップ2で作成したスクリプトを1時間おきに自動実行する設定をします。実は、Google Apps Scriptではこの設定がとてもお手軽にできます。
- スクリプトエディタ上部のメニューから時計のアイコンをクリックします。
- トリガーの一覧が表示されます。まだトリガーが登録されていなければ「トリガーが設定されていません。今すぐ追加するにはここをクリックしてください。」をクリックするとトリガーを追加できます。
- トリガーの「実行」と「イベント」を下の画像のように設定して保存ボタンをクリックします。
リマインダー完成
以上でリマインダーが完成しました。あとは、定時作業の時間になって通知が来るのを待つだけです。もちろん他の業務をしながら待ちましょう。しかし、最初の通知は、来るのを今か今かと待っているのもいいかもしれません。私は定時作業の1分前からじっと最初の通知が来るのを待っていました。
ここで注意していただきたいことは、例えば今回リマインダーの通知時間の範囲を10時から18時に設定しましたが、時間主導型トリガーの仕様上、10時ちょうどや11時ちょうどにリマインドが来るとは限らないことです。(参考:Installable Triggers | Apps Script | Google Developers)したがって、厳密に時間が決められている作業へのリマインダーとしては向いていません。
最後に
いかがでしたか?今回はとても単純なリマインダーを作りました。工夫次第では、例えば
- 自動実行の間隔を1分おきにして通知時間の精度を高くする
- 希望する人にもリマインダーを送る
- 目覚まし時計のスヌーズ機能のように、通知に気づかなかったときのために5分後にもう1度通知をする機能を付ける
- 前日のチェック欄に〇がついてない人に「〇が付いてないよ!」と通知をする
- Slackの通知をカラフルにする
といったこともできます。みなさんもぜひ自分なりのリマインダーを作ってみてください。