トップ «前の日記(2020-09-05 (Sat)) 最新 編集   RSS 1.0 FEED  

Journal InTime


2020-09-16 (Wed) [長年日記]

_ Google Apps Scriptで出勤日カレンダーを作った

新型コロナ感染症対策のため、NaCl松江本社の開発メンバーは2グループに分かれて営業日は交互に在宅勤務し、感染拡大の状況によっては全メンバーが在宅勤務に移行する運用をしている(というのは原則で、メンバーの都合でフル出勤したり、ほとんど在宅勤務の人もいる)。

連休明けなどで出勤日がわからなくなる人が続出したため、Googleカレンダーに以下のようなISUCONで負けそうなGoogle Apps Scriptで出勤日の予定を自動登録してみた。

var OFFICE_DAY_CALENDAR_IDS = ["xxxxx", "xxxxx", ...];

function createOfficeDayEvents() {
  var holidayCalendar = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com');

  var officeDayCalendars = OFFICE_DAY_CALENDAR_IDS.map(function (id) {
    return CalendarApp.getCalendarById(id);
  });
  var current = 0;
  var date = new Date("2020/09/01");
  var endDate = new Date("2020/12/25");
  while (date <= endDate) {
    var day = date.getDay();
    if (day != 0 && day != 6 && holidayCalendar.getEventsForDay(date).length == 0) {
      officeDayCalendars.forEach(function (calendar) {
        calendar.getEventsForDay(date).forEach(function (event) {
          event.deleteEvent();
        });
      });
      officeDayCalendars[current].createAllDayEvent("出勤日", date);
      current++;
      if (current >= officeDayCalendars.length) {
        current = 0;
      }
    }
    date.setDate(date.getDate() + 1);
  }  
}