マイベストプロ京都
拾井央雄

知的財産や技術系法務に強い理系出身の法律のプロ

拾井央雄(ひろいおうゆう) / 弁護士

京都北山特許法律事務所

コラム

Google Apps Script で明日の予定メールに挑戦!

2021年5月15日 公開 / 2021年6月7日更新

テーマ:徒然コラム

コラムカテゴリ:ビジネス

コラムキーワード: 業務効率化 ツール

業務管理
前回、Google Apps Scriptを使って、SpreadSheetからGoogleカレンダーに予定が書きこめるようになりました。

次は、Googleカレンダーに書き込んだ予定を、前の日の夕方に自分宛てにメール送信するリマインダーを作ってみましょう。
GASを使えばカレンダーから予定を読み込めますし、Gメールを送信することもできます。

まず、予定を読み込むカレンダーを取得して、変数calendarに格納します。

let calendar = CalendarApp.getCalendarById(id);

"id" は「カレンダーの設定」の「カレンダーID」に表示される"xxx@xxx.xxx"のことですね。

そしてそのカレンダーから予定を取得して、変数eventsに格納します。

let events = calender.getEventsForDay(date);

この"date"に明日の日付をセットしておきます。

let date = new Date();
date.setDate(date.getDate() + 1);

明日の予定が複数あった場合は、events[0]から順番に格納されます。

let event;
for(var i=0; i < events.length; i++){
event = events[i];
}

で、"event"に格納しながら順番に取り出すことができます。

次は、この"events"からメールに書きたい項目を抜き出して、文面を作ります。
何も予定がないときは、 「予定はありません」と書くことにします。

これをするために、"events"の中身があるかどうかを判別して、分岐させましょう。

if(events.length > 0){ //予定が何かある場合
//メールの文面作成
}
else {
//「予定はありません」
}

メールの文面としては、「10時00分 ~ 12時00分 : あの件」のようにします。
時間は読みやすい形式に変換しましょう。

"mailContents"に文面を格納することにして、

let mailContents = "";

開始時間を、

mailContents += Utilities.formatDate(event.getStartTime(),"GMT+0900","HH時mm分") + " ~ ";

終了時間を、

mailContents += Utilities.formatDate(event.getEndTime(),"GMT+0900","HH時mm分") + " : ";

そして件名を、

mailContents += event.getTitle() + "\n";

とします。

終日の予定がある場合、終日の予定を判別する関数を使って、終日予定でない場合にだけ時間をセットするようにします。

if(event.isAllDayEvent() == false){ //終日予定でない場合
//時間のセット
}

そしてこの"mailContents"をメール送信します。

メールの送信は次のようにします。

MailApp.sendEmail(mailto, mailTitle, mailContents);

"mailto"は送信先のメールアドレス、"mailTitle"はメールの件名です。

これを、トリガーを使って、毎日自動で送信します。
スクリプトエディタの左に"<>"みたいなのがありますから、そこにマウスを持っていって「トリガー」をクリックします。
「実行する関数」のところは、もちろんメールを送信する関数をセットします。
「イベントのソースを選択」は「時間主導型」、「時間ベースのトリガーのタイプを選択」は「日付ベースのタイマー」、「時刻を選択」は関数を実行したい時間を入れます。

実行させる時刻に1時間の幅がありますので、 毎日17:00ちょうどに送信するには一工夫必要です。
17:00に実行するトリガーを作成する関数を書いて、この関数をトリガーで前もって起動させるようにします。

function setTrigger(){ //scheduleMailを毎日17:00に呼び出すトリガーを作成する関数
const time = new Date();
time.setHours(17);
time.setMinutes(00);
ScriptApp.newTrigger('scheduleMail').timeBased().at(time).create();
}

つまり、"setTrigger"を毎日17:00よりも前にトリガーで起動するというわけです。
ただし、毎日トリガーが作成されていきますから、"scheduleMail"が実行されたら作成したトリガーを削除するようにした方がいいでしょう。

function delTrigger() { //scheduleMailを呼び出したトリガーを削除する関数
const triggers = ScriptApp.getProjectTriggers();
for(const trigger of triggers){
if(trigger.getHandlerFunction() == "scheduleMail"){
ScriptApp.deleteTrigger(trigger);
}
}
}

休みの日までこんなメールが来るとうんざりしますから、休業日は実行しないように、金曜日には月曜日の予定をメールするように、カレンダーの休業日を判別する工夫も必要でしょう。
 

この記事を書いたプロ

拾井央雄

知的財産や技術系法務に強い理系出身の法律のプロ

拾井央雄(京都北山特許法律事務所)

Share

関連するコラム

拾井央雄プロへの
お問い合わせ

マイベストプロを見た
と言うとスムーズです

お電話での
お問い合わせ
075-708-5826

 

※申し訳ございませんが電話相談は実施しておりません。
※リモートワーク中は、発信専用番号(着信しません)"070-5044-3569"からお電話を差し上げることがございます。

勧誘を目的とした営業行為の上記電話番号によるお問合せはお断りしております。

拾井央雄

京都北山特許法律事務所

担当拾井央雄(ひろいおうゆう)

地図・アクセス

拾井央雄のソーシャルメディア

facebook
Facebook
  1. マイベストプロ TOP
  2. マイベストプロ京都
  3. 京都のビジネス
  4. 京都の法務・契約書
  5. 拾井央雄
  6. コラム一覧
  7. Google Apps Script で明日の予定メールに挑戦!

© My Best Pro