7
9

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 5 years have passed since last update.

GoogleAppsScriptで自動化しよう。(勤怠メール送信編)

Last updated at Posted at 2016-12-18

#はじめに
つい最近GoogleAppsScript(以下GAS)というものを知りました。
JavaScriptライクな言語でGoogleのサービス(GmailとかGoogleDriveとかCalendarとか)を連携できる簡単なスクリプト言語です。

触ってすぐに手に馴染んだので、プログラミング未経験の人でもサクッと書けてサクッと効果が出そうで良い言語だなぁ…と思いました。
URLFetchで外部のRESTAPIを叩いたり、あとはExecutionAPIで外部からGASを叩いたり、一瞬でいろんな応用が思いつく素晴らしいサービスですね。
書いたらすぐ馴染みのGoogleのサービスが動くという点でプログラミング初学者にはうってつけなのではないでしょうか!

というわけで今回は習作として、少し自分の役に立つものを作ってみました。

#何を作ったのか
カレンダーに有給を登録したら勝手に然るべき所にメールを送る感じのやつを作りました。
(特に決まってはなかったのですが、3日前に連絡すればいいかなと思い、そうします。)

#GASを書く
GASでやりたいことは
・1日1,2回カレンダーを監視して3日後に有給が登録されているか確認する。
・もし登録されていればメールを送る。そうでなければスルー。
という感じですね。

ソースはこんな感じ。

VacationNotifier.gs
///3日後に休暇があるかどうかチェックする関数
function checkVacation(day) {
  
  //カレンダーIDからカレンダーを取得
  var myCal = CalendarApp.getCalendarById("hoge.hoge@gmail.com");//※1

  //この文字列がカレンダーに登録されていたらメールを送信する
  var vacationStr = "有給休暇";
  

  //3日後のイベントを全て取得する
  var events = myCal.getEventsForDay(day);  

  //イベントに対して全てチェック
  for(var i = 0; i < events.length; i++){
    var title = events[i].getTitle();
    //1つでも設定した文字列にマッチするものがあればTrueを返すようにする。
    if(title.match(vacationStr)){
      return true;
    }
  }
    
  return false;
}


///通知を司る関数
function NotifyIfVacation(){
  //現在の時間情報を取得
  var today = new Date();
  //3日後の時間情報を取得
  var after3d = new Date(today.getTime() + (3*24)*60*60*1000);
  //checkVacation()関数を使って判別した結果を格納する変数の宣言
  var isVacationNextWeek = checkVacation(after3d);
  
  //もし3日後に有給予定が入っていたら
  if(isVacationNextWeek){
    //3日後の時間情報をMM/dd形式に直す
    var vacationDateStr = after3d.getMonth()+1 + "/" + after3d.getDate();
    
    //有給だった時に連絡する送信先
    var to = "kaisya.yuukyuu@gmail.com";
    //タイトル
    var title = "休暇:" + vacationDateStr + " fuga";
    //メッセージ
    var body = "各位\n" +
"お疲れ様です。○○です。\n" +
vacationDateStr + "ですが、お休みをいただきます。\n" +
"\n" +
"よろしくお願いします。";
    
    //メールを送る。
    MailApp.sendEmail(to,title,body);
  }
}

そして定時実行するためのトリガー(Cron的なもの)を設定します。
CropperCapture[212].png

トリガーはこんなもんでいいでしょう。
(実行関数をNotify~にするのを忘れずに!)

##実装について
基本的にコメント通り。難しくない実装なので…。
checkVacationの※1のIDについて、ちょっとわかりにくかったのでメモ。

カレンダーを開きます。
CropperCapture[214].png

歯車ボタンを押して、「設定」を開きます。

CropperCapture[215].png

「カレンダー」タブをクリック。

自分のカレンダーを開きます。

CropperCapture[216].png

このIDを使ってgetCalendarByIdしましょう。

#その他
他人のカレンダーももちろん使えます。
CropperCapture[217].png

これを使えば鹿島アントラーズの試合がある時は自動で休むことができます。(大体休日に試合があるので使いませんが…)

7
9
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
7
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?