会社で総務的な仕事をしていると、
第一営業日に必ずこんなことをやる!という業務が出てきますよね。
今回は、GoogleAppsScriptのトリガーで「毎月1日」に実行する設定をしているけど、1日が平日じゃなければ月曜に実行させたい
という気持ちで書いたコードを記載します。
外部の会社と複数のチャットワークチャンネルでやり取りしていて、毎月1日に全チャンネルに「請求書ください」とつぶやくbotを作成したくて以下のようなコードを書きました
function checkDay(){
var day = new Date();
var setTime = new Date();
var day_num = day.getDay();
//曜日毎の処理わけ
if(day_num != 0 || day_num != 6){
sendCw()
} else if (day_num == 0 ){
setTime.setDate(setTime.getDate() + 1);
setTime.setHours(9);
setTime.setMinutes(00);
ScriptApp.newTrigger('sendCw').timeBased().at(setTime).create();
} else if (day_num == 6){
setTime.setDate(setTime.getDate() + 2);
setTime.setHours(9);
setTime.setMinutes(00);
ScriptApp.newTrigger('sendCw').timeBased().at(setTime).create();
}
}
function sendCw(){
//チャットワークに通知する設定
}
これだけです。
詳細
var day_num = day.getDay();
これでまず、曜日を取得します。
曜日は数字としてデータが返ってきます。
それぞれ、以下のように対応しています。
0 = 日曜
1 = 月曜
2 = 火曜
3 = 水曜
4 = 木曜
5 = 金曜
6 = 土曜
なので、実行した日が
0(日曜)もしくは6(土曜)以外。
つまり平日であれば、その日のうちにSendCWを行います。
もし、実行した日が日曜や土曜なら、次の処理に進みます。
次が私的に少し詰まったところです。
利用したのは、
ScriptApp.newTrigger
というものです。
これは、読んで字の如しですが
新しくトリガーをセットできるものです。
今回は、
土曜であれば今日+2日後(月曜)
日曜であれば今日+1日後(月曜)
の、それぞれ9時に、sendCwというファンクションを動かす
という設定を行いました。
この、日時の入れ方はいろいろあるようで、かなり混乱しましたが、こちらの記事を参照し、解決まで進みました。
今回はchatworkで利用しましたが、
今後は社内メンバーへのSlack通知にも、使いたいと思っています。
トリガーを新たにセットできるとなると、かなりできることも広がりますね!