1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ex-crowdworksAdvent Calendar 2024

Day 8

Part2🤘🏻コピペOK🤘🏻GASを使ってSlackに当番通知をする生産性向上紹介

Last updated at Posted at 2024-12-07

この記事は ex-crowdworks Advent Calendar 2024の8日目の記事です。

はじめに

今年、株式会社クラウドワークスを退職した@nisyuuです。主食は銀河のしずくです。
エンジニアとしてクラウドワークステック(旧クラウドテック)というフリーランスと企業をマッチングするエージェントサービスを開発していました。

ex-crowdworks Advent Calendar 2024の1日目に、GASを使った生産性向上の記事を投稿しました。
今回は生産性改善Part2として、1日目に紹介した記事の内容を拡張するような内容を紹介します。

当番通知のタイミングを柔軟にする

当番を通知する条件に、2週間に1回や平日は毎日通知させたいけど土日祝日は通知させたくないといったこともあるのではないでしょうか。
そこで今回は、GASで平日の判定や祝日の判定を行う方法、カレンダーから指定の日に指定のイベント名があるかをチェックする方法を紹介します。

平日を判定する

土日の判定はこのようにできます。
特に変わった実装はないと思います。

下の関数では、指定の日が平日であればtrueを返すようにしています。

/**
 * 指定の日付が平日か判定する
 * @param {Object} targetDate - 日付
 * @return {boolean} - 平日であるかの判定
 */
function isWeekday(targetDate) {
  const day = targetDate.getDay();  // 0 (日曜日) ~ 6 (土曜日)
  return (day !== 0 || day !== 6);
}

祝日を判定する

祝日の判定には、Googleカレンダーの祝日カレンダーを使用します。
実装時には祝日カレンダーのIDが必要で、祝日カレンダーの設定からIDは確認できます。

下の関数では、指定の日に祝日があるとtrueを返すようにしています。

/**
 * 指定の日付が祝日か判定する
 * @param {Object} targetDate - 日付
 * @return {boolean} - 祝日であるかの判定
 */
function isHoliday(targetDate) {
  // 日本の祝日カレンダーのIDを定義
  const holidayCalendarId = 'ja.japanese#holiday@group.v.calendar.google.com';
  const calendar = CalendarApp.getCalendarById(holidayCalendarId);
  // 祝日情報を取得
  const events = calendar.getEventsForDay(targetDate);
  return events.length > 0;
}

指定の日に指定のイベント名を取得する

指定の日に、指定のイベント名を含むイベントがあるかチェックします。
イベント名があると、trueを返します。

イベントのチェックにはカレンダーIDが必要で、自分のカレンダー設定からカレンダーIDを確認することができます。
補足ですが、IDはメールアドレスになっていることが多いようです。

**
 * 指定の日に指定のイベント名があるか判定する
 * @param {Object} targetDate - 日付
 * @param {Object} targetEventName - イベント名
 * @return {boolean} - 指定のイベントがあるかの判定
 */
function haveTargetEvent(targetDate, targetEventName) {
  const calendarId = 'xxxxxxxxxxxxxxxxxxx'; // カレンダーID
  let calendar = CalendarApp.getCalendarById(calendarId);
  var events = calendar.getEventsForDay(targetDate);

  for (i = 0; i < events.length; i++) {
      if(events[i].getTitle().includes(targetEventName)) {
        return true;
      }
  }

  return false;
}

おわりに

通知のタイミングをカレンダーの日程や曜日に合わせて細かく調整したくなることは、よくあるケースなため紹介してみました。
通知のカスタマイズについて拡張アイデアをまだまだ持っているので、アドカレでまた後日紹介します。
Part3を乞うご期待ください。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?