みなさん、こんにちは! うえはらです。
2回にわたり、Google Apps Scriptでトリガーの作成と削除についてお伝えしました。
実行したい処理に、チャットワークへの送信を設定すると、毎日指定の時間に送信されると思います。
ところで、毎日送信されるようになったのはいいですが、休みの日は仕事のことは忘れたいですよね?
そこで今回は、Google Apps Scriptで営業日を判定してトリガーを作成する方法をお伝えします。
前回のおさらい
まずは、前回のおさらいです。
2回分を合わせるとこのようになります。
function myFunction(){ delTrigger(); /* 実行したい処理(チャットワークへ送信など) */ } function setTrigger(){ var setTime = new Date(); setTime.setHours(08); setTime.setMinutes(50); ScriptApp.newTrigger('myFunction').timeBased().at(setTime).create(); } function delTrigger() { var triggers = ScriptApp.getProjectTriggers(); for(var i=0; i < triggers.length; i++) { if (triggers[i].getHandlerFunction() == "myFunction") { ScriptApp.deleteTrigger(triggers[i]); } } }
「編集」→「現在のプロジェクトのトリガー」から8時より前の時間にsetTriggerを呼び出すトリガーを設定しておけば、毎朝8:50分にmyFunctionが実行されるようになります。
myFunctionが実行されるとdelTriggerが呼び出されて、使用済みのトリガーは削除され、実行したい処理へ移っていきます。
ここまでよろしいでしょうか。それでは、営業日を判定してトリガーを作成する方法にいきたいと思います。
カレンダーどおりの営業日のみトリガーを作成する
以前、Google Apps Scriptで営業日を判定する関数についてお伝えしていますので、これを利用したいと思います。
トリガーを設定する「setTrigger」から日付をわたして、土日と祝祭日でなければ、「true」が返ってくるようにします。
function isBusinessDay(date){ if (date.getDay() == 0 || date.getDay() == 6) { return false; } var calJa = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com'); if(calJa.getEventsForDay(date).length > 0){ return false; } return true; }
後は、「true」が返ってきたときに、トリガーを作成するようにif文で条件分岐すればいいですね。
トリガーを作成するスクリプトを下記のように変更します。
function setTrigger(){ var setTime = new Date(); setTime.setHours(08); setTime.setMinutes(50); if isBusinessDay(date){ ScriptApp.newTrigger('myFunction').timeBased().at(setTime).create(); } }
if文を一行追加するだけで完成です!
色々な関数を作成しておけば、機能を簡単に追加できて便利ですね。
会社独自の営業日に合わせてトリガーを作成する
次は、会社の営業日がカレンダーどおりではない場合について考えてみます。
この場合もGoogleカレンダーを使用していきます。
Googleカレンダーに「休業日」を登録する
会社の営業日のカレンダーを追加して、今回は休みの日に「休業日」を登録するようにしました。
この営業日のカレンダーから当日のイベントを取得し、イベント名が「休業日」であれば「false」を返し、そうでなければ「true」を返す関数を作成します。
イベント名が「休業日」かどうかを判定する関数
当日のイベントをGoogleカレンダーから取得する方法は下記をご覧下さい。
イベント名だけを取得したいので、下記のようになります。
function isMyBusinessDay(date){ var myCals = CalendarApp.getCalendarById('XXXXXXXXXXXXXXXX@group.calendar.google.com');//特定のIDのカレンダーを取得 var myEvents = myCals.getEventsForDay(date);//カレンダーの本日のイベントを取得 var arrTitles =[]; /* イベントの数だけ繰り返し */ for(var i=0;i<myEvents.length;i++){ arrTitles.push(myEvents[i].getTitle()); //イベントのタイトルを配列に追加 } /* 営業日の判定 */ if(arrTitles.indexOf('休業日') == -1){ return false; }else{ return true; } }
イベントのタイトルを配列arrTitlesに追加して、配列arrTitlesの中に「休業日」があれば「false」を返し、そうでなければ「true」を返します。
「setTrigger」の部分は一緒です。呼び出す関数の名前だけ変更しています。
function setTrigger(){ var setTime = new Date(); setTime.setHours(08); setTime.setMinutes(50); if isMyBusinessDay(date){ ScriptApp.newTrigger('myFunction').timeBased().at(setTime).create(); } }
これで、会社独自の営業日にも対応できます。
まとめ
今回はGoogle Apps Scriptで営業日のみトリガーを作成する方法についてお伝えしました。
トリガーを作成する部分をif分などで条件判断すれば、自分独自のルールでトリガーが作成できます。
Googleカレンダーやスプレッドシートも利用すれば、より幅が広がります。
みなさんも、色々なルールでトリガーを作成してみて下さい。