Quantcast
Channel: いつも隣にITのお仕事
Viewing all articles
Browse latest Browse all 2077

Google Apps Scriptで営業日を判定してトリガーを作成する方法

$
0
0

目覚まし時計

みなさん、こんにちは! うえはらです。

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で営業日を判定する関数についてお伝えしていますので、これを利用したいと思います。

ずっと使える!Google Apps Scriptで営業日を判定する関数の作り方
Google Apps Scriptで業務系のツールを作る場合、けっこうな頻度で営業日かどうかの判定が必要になります。今回は、Googleの日本の祝日カレンダーを利用した営業日を判定する関数の作り方です。

トリガーを設定する「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カレンダーから取得する方法は下記をご覧下さい。

毎朝、当日の予定をGoogleカレンダーから取得してチャットワークに送る
Google Apps Scriptを使ってチャットワークに色々と送ることができます。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カレンダーやスプレッドシートも利用すれば、より幅が広がります。

みなさんも、色々なルールでトリガーを作成してみて下さい。

連載目次:GASのスクリプトからトリガーを操作する方法

GASのトリガーはメニューから設定する以外に、スクリプトからも設置や削除が行えます。本シリーズでは、ScriptAppsサービスを使ったトリガーの操作方法についてお伝えしていきます。
  1. Google Apps Script で毎日決まった時刻にスクリプトを実行するトリガー設定
  2. Google Apps Scriptで使用済みのトリガーを削除する方法
  3. Google Apps Scriptで営業日を判定してトリガーを作成する方法

Viewing all articles
Browse latest Browse all 2077

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>