突然だが、あなたは締切を守れる人間だろうか?きっと自信を持ってYESと答えられるのは、3割にも満たないはずだ。
僕はというと、やはりYESと答えられる自信はない。むしろ締切日を忘れることもあるぐらいだ(!!)
そこで思いついたのは、Google Apps Scriptを利用してスケジュールをメールで通知する方法だ。この記事を読めば、きっとあなたも締切を過ぎる罪悪感に苛まれることなく日常を送れるようになるだろう…
Google Apps Scriptとは?
Google Apps Script(GAS)とは、Googleが提供する11のサービスをクラウド上で操作できるサービスのことだ。
コードをぶち込み、Google スプレッドシートを操作できる点ではExcel VBAに似ているが、より幅広く運用できる点、Javascriptをベースに作られている点で異なる。
Google Apps Scriptは、Google スプレッドシートの「ツール」→「スクリプトエディタ」から開くことができる。
Google Apps Scriptを使う背景
僕はGoogle スプレッドシート、Todoist、Google Keep、Googleカレンダーを用途ごとに分けて利用している。
- Google スプレッドシート:進捗管理
- Todoist:今日1日のタスクの把握
- Google Keep:1週間のタスクの把握
- Googleカレンダー:1ヶ月単位のタスク(予定)の把握
特に進捗管理は重要だ!別サイトの更新に締め切りを設けているにもかかわらず、1週間も更新が遅れることがざらにあるからだ。
たとえば以下の画像のように、締切日が過ぎると行が赤くなったり、締切2日前になると行が黄色くなるよう条件付き書式で設定してある。
問題は、個人運営サイトのためケツを叩いてくれる人がいないことだ(もちろん物理的にケツを叩かれることは嫌いだ)。
そこでタイムリミットが超過・間近の場合に、メールで通知されれば問題は解決されると考えたのだった。
スクリプトの説明
まずは組んだスクリプトをご覧いただこう。
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 39 40 41 42 43 44 45 46 47 48 49 50 51 |
function mailSend() { var mySs = SpreadsheetApp.getActiveSpreadsheet(); //スプレッドシートを取得 var mySheet = SpreadsheetApp.getActiveSheet(); //シートを取得 var today = new Date(); //今日の日付を取得 var strTo = "メール"; //To var strName = "公務員辞めました"; //苗字 var strFrom = "メール"; //From var strSender = "時間を司る者"; //差出人 /* 繰り返し計算 */ for (var i = 2; i <= 200; i++) { var ai = mySheet.getRange(i, 2).getValue(); //Ai列を取得 var ci = mySheet.getRange(i, 3).getValue(); //Ci列を取得 var di = mySheet.getRange(i, 4); //Di列を取得 var fi = mySheet.getRange(i, 6).getValue(); //Fi列を取得 var dateDi = new Date(di.getValue()); //Di列のDateを作成 var dt = dateDi.getTime() - today.getTime(); //dateDiから今日の日付を引く var day = Math.ceil(dt / 1000 / 60 / 60 / 24); //日付に変換 if (fi == "完了") /* Fi列が完了なら何もしない */; else if (0 < day && day <= 2) { //2日後の日付と締切日を比較 /* メール本文を準備 */ var strSubject2 = ci + "の" + ai + "が迫っています!"; var strBody2 = strName + "君\n\n" + ai + "の期限が" + day + "日に迫ってきてるんですけど本当に大丈夫ですかね?\nチャラチャラしてる暇なんてないですからね?"; /* メールを送信 */ var send = GmailApp.sendEmail( strTo, strSubject2, strBody2, { from: strFrom, name: strSender } ); } else if (day <= 0) { //今日の日付と締切日を比較 /* メール本文を準備 */ var strSubject1 = ci + "の" + ai + "が遅れています!"; var strBody1 = strName + "君\n\n" + ai + "が" + (-day) + "日遅れてますけど。\n本当にやる気あるんですか?どうなっても知らないですよ?"; /* メールを送信 */ var send = GmailApp.sendEmail( strTo, strSubject1, strBody1, { from: strFrom, name: strSender } ); } } } |
作成にあたっては以下のページを参考にさせていただいた。
- 【幹事必見!】スプレッドシートの入力が完了したらチャットワークに自動通知する方法
- Google Apps Script(JavaScript)で現在の日付を取得する方法 – Qiita
- 【JavaScript】日付処理 – Qiita
- JavaScriptで小数を四捨五入、切り捨て、切り上げする方法
なお、ズブのど素人が組んだため、本職のプログラマの皆さんからは突っ込みどころ満載に見えるかもしれない。
2つのパターンの実行
それでは試しに実行してみよう。あなたの元にメールが送信されるのは以下のいずれかの条件が揃っている場合だ。
- 締切日が過ぎている場合
- 締切が1、2日前に迫っている場合
①締切を過ぎている場合
もしもD列の日付が今日か今日以前の日付である場合、お怒りのメールが飛んでくる。たとえあなたにやる気がなく締切を過ぎてしまったとしても、必ず課題に取り掛かることだろう。
②締切が1、2日前に迫っている場合
もしもD列の日付が今日の1、2日後に迫っている場合、催促のメールが飛んでくる。たとえあなたが女遊びに耽っていたとしても、締切前に課題を終わらすよう全力を尽くすことだろう。
実行する上での注意点
実行する上での注意点もお伝えしておきたい。
Google Apps Scriptのスクリプトでは、ひとまずD列の日付を200行取得しているが、Gmailの送信は1日に100通しか送信できない(Quotas for Google Services | Apps Script | Google DevelopersのEmail recipients per dayの項目参照)。
そのため、実行結果によっては1日の上限に達する可能性がある。実際、僕は試験的にスクリプトの実行を繰り返すことで1日の上限に到達してしまい、Gmailが送信できなくなってしまった。
解決策としては、動作確認の際にメール送信を極力せず最小限の回数で済ませるなどの方法が考えられるが、全く詳しくないので詳細は省かせていただく。
ちなみに、メルマガなど大量のメール送信の必要に迫られている方はG Suiteの加入を検討してみてはいかがだろう?月500円で1日に送信できるGmailの数が1,500にまで伸びるので、かなり余裕ができるはずだ。
コメントを残す