2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GASで第一営業日が土日だったら平日に実行させる、をしようとしたら汎用性ありそうなコードに

Last updated at Posted at 2020-07-14

会社で総務的な仕事をしていると、
第一営業日に必ずこんなことをやる!という業務が出てきますよね。

今回は、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通知にも、使いたいと思っています。

トリガーを新たにセットできるとなると、かなりできることも広がりますね!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?