これはなに
うちの会社では有給を取るときに以下の作業をしなければいけません。
- カレンダーに予定登録
- メール送信
ちょっと手間だし忘れたりすることもあるので、手作業はせめて1回にしたいところです。
予定をブロックするために、カレンダーは必ず登録するので、メール送信をGASで自動化。
作り方
スクリプト
AbsenceMail.js
function AbsenceMail() {
let myCalendar = CalendarApp.getCalendarById('☓☓☓@gmail.com'); // 自分のメールアドレス
let today = new Date();
// イベントを取得
let myEvent = myCalendar.getEventsForDay(today);
// イベントの中に”休み”という件名のものがあれば、メールを送信する
for(let i = 0 ; i < myEvent.length ; i++ ){
if(myEvent[i].getTitle() == '休み'){
let dateString = Utilities.formatDate(today, "JST", "M/d"); // 今日の日付
let recipient = '☓☓☓@gmail.com'; // 宛先
let myName = '某'; // 自分の名前
let subject = `【勤怠連絡】${dateString} 有給 ${myName}`;// 件名
let body = '今日は休みだ\n'
+ 'わっしょいわっしょい';
GmailApp.sendEmail(recipient, subject, body);
};
}
}
あとはこれを毎朝実行するように、トリガーを設定すればOK。
と思いきやまだ続きます。
時間設定を変更する
new Date()
の出力結果が、アメリカ時間(-13h)になってしまいます。
これでは朝実行したら昨日の予定を取ってきてしまうので、時間設定を日本時間に変更します。
手順は以下
- サイドメニューの
プロジェクトの設定
から「appsscript.json」マニフェスト ファイルをエディタで表示する
にチェックを入れる
- エディタで
appsscript.json
を開いてtimeZone
の設定をAsia/Tokyo
に変更する
appsscript.json
{
"timeZone": "Asia/Tokyo",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}
これでようやく日本時間の今日 の予定を取ってきてくれる。
最後に
これでメール忘れの心配はなくなりました。
応用したら会議前にSlackとかで「資料読めよ」的なリマインドにも使えそう。
曜日固定の定例会議なら、Slackワークフローの方がお手軽ですが。