🐷

Googleカレンダーの予定(の一部)をSlackチャンネルに通知させる

に公開

はじめに

部署全員のGoogleカレンダーの予定をSlackに出してほしいと依頼。
GoogleカレンダーはGASでのデータ取得でも、一度部署全員を「他のカレンダー」に登録しなければならないため、各自で設定してもらうようにした。

なお、Slack側の設定は以下参照。
https://zenn.dev/lancers/articles/7e78fa66b747a5

code

main.js
function main(){
  const calendar = CalendarApp.getDefaultCalendar();
  const eventList = calendar.getEventsForDay(dayjs.dayjs().toDate()).reduce((eventList, event) => {
    const e = new Event(event);
    if(e.isTarget()) eventList.push(e.getText());
    return eventList;
  }, []);

  if(!eventList.length) return;

  Shomin.slackChannel(
    PropertiesService.getScriptProperties().getProperty('webhook'),
    `予定: ${calendar.getName()}\n${eventList.join('\n')}`
  );
}

function setTrigger(){
  ScriptApp.newTrigger('main').timeBased().everyDays(1).atHour(8).create();
  Browser.msgBox('トリガーを設定しました。');
}

class/Event.js
class Event{
  constructor(event){
    this.title = event.getTitle();
    this.startTime = dayjs.dayjs(event.getStartTime());
    this.endTime = dayjs.dayjs(event.getEndTime());
  }

  // あれば
  isTarget(){
    const targetList = [
      '予: '
    ];
    return targetList.some(target => this.title.includes(target));
  }

  getText(){
    return `${this.title} ${this.startTime.format('HH:mm')}~${this.endTime.format('HH:mm')}`;
  }
}

使用ライブラリ
https://zenn.dev/nag8/articles/e96f28dc514a04
https://gas.excelspeedup.com/dayjs/

運用

  1. 各自に犬のボタンを押してもらう。犬の画像にはスクリプト「setTrigger」が設定されており、毎朝8時〜9時のトリガーが作成される。
  2. トリガーの通りに処理が自動実行する。

結果

https://www.pwc.com/jp/ja/knowledge/publication/employee-experience.html
↑の本は従業員体験について書いた本だけど、その中で「作業クラフティング」という考えがあり、「仕事のやり方を工夫して仕事の内容を充実させることで、従業員体験を向上させる」とあった。
従業員体験の向上について環境を良くしたり1on1したりと施策を打っていることも多いと思うが、こういった作業クラフティングでも従業員の負の作業を解消していきたい。

ランサーズ株式会社

Discussion