GAS(Google Apps Script)で第N何曜日をカレンダーに追加する

GAS

追記

2022/08/31 スクリプトのバグ修正しました。

概要

あ、ゴミ出し忘れた!を解消していきます。

GASによるカレンダー操作をするための準備

まずは、GASによりカレンダー操作を行うための事前準備をしていきます。

カレンダーIDの取得

自分のGoogleカレンダーのカレンダーIDを取得します。

※ 操作を行いたいカレンダーが、Googleアカントに紐づく自分のカレンダーだった場合は
カレンダーIDはgmailのメールアドレスとなります。

  1. Google Calendarを開く
  2. 左パネルより、操作を行いたいカレンダーを選択
  3. 「設定と共有」を選択
  4. 「カレンダーの統合」を選択
  5. 「カレンダー ID」の項目がカレンダーIDとなりますので控えておいてください。

スクリプトを作成する

  1. Google スプレッドシートを開く
  2. 新規のファイルを作成
  3. 拡張機能 > Apps Scriptを選択
  4. 下記のコードを入力
const CALENDAR_ID = '{取得したカレンダーID}';
 function getCalendarEvents() {
     const calendar = CalendarApp.getCalendarById(CALENDAR_ID);
     console.log(calendar.getName());
}

実行すると、カレンダー名がコンソールに表示されます。
これで、「GASによるカレンダー操作をするための準備」は終了です。

ゴミの日を登録するスクリプトを作成する

第N曜日に予定のゴミの日を登録するスクリプトを作成しました。
1行目のCALENDAR_IDの記述は残して、下記をコピペしてください。

const CALENDAR_ID = XXXX; //カレンダーID
const calendar = CalendarApp.getCalendarById(CALENDAR_ID);

// var year = 2022
// var month = 2

var today = new Date();
var year = today.getFullYear();
var month = today.getMonth();
var firstDay = new Date(year, month, 1); // 月初日
// console.log(year);
// console.log(month);
// console.log(firstDay);
var firstDays = getWeekFirstDays(firstDay.getDay());

/**
 * main
 */
function main() {

  // 瓶、缶ゴミ 第2, 第4水曜日
  setSchedule("瓶、缶ゴミ", 3, 2);
  setSchedule("瓶、缶ゴミ", 3, 4);

  // 不燃ゴミ 第2, 第4木曜日
  setSchedule("不燃ゴミ", 4, 2);
  setSchedule("不燃ゴミ", 4, 4);

  // ダンボール回収 第1, 第3木曜日
  setSchedule("ダンボール回収", 4, 1);
  setSchedule("ダンボール回収", 4, 3);
}

/**
 * 各曜日の最初の日を取得
 * @param {number} _firstWeek - 初月日の週(getDayで取得)
 * @return {Array} 各曜日の最初の日
 */
function getWeekFirstDays(_firstWeek) {
  let firstDays = []; // 各曜日の最初の日
  for (var i = 0; i < 7; i++) {
    if (i < _firstWeek) {
      day = 7 - _firstWeek + 1 + i;
    } else {
      day = 1 - _firstWeek + i;
    }
    firstDays.push(new Date(year, month, day));
  }
  console.log(firstDays);
  return firstDays;
}

/**
 * 各曜日の最初の日を取得
 * @param {Date} _date - 加算対象の日付
 * @param {number} _day - 加算する日にち
 * @return {Date} 加算後の日付
 */
function addDay(_date, _day)
{
  var res = new Date();
  res.setDate(_date.getDate() + _day);
  return res;
}

/**
 * スケジュールを追加する
 * @param {String} _name - スケジュール名
 * @param {number} _weekday - 登録する曜日(0:日曜, 1:月曜 ... 6:土曜)
 * @param {number} _count - 第N曜日のN
 * @return void
 */
function setSchedule(_name, _weekday, _count)
{
  console.log("[INFO]追加する予定: " + _name);
  console.log("[INFO]追加する日付: " + addDay(firstDays[_weekday], 7 * (_count - 1)));
    calendar
  .createAllDayEvent(
   _name
  , addDay(firstDays[_weekday] , 7 * (_count - 1))
  )
}

その後、処理を開始する関数を「main」に設定してください。

処理を開始する関数の指定

実行を押下して、Googleカレンダーを確認すると、
第2, 第4水曜日と木曜日にそれぞれスケジュールが追加されているはずです。

追加するスケジュールはコード内の18~24行目で設定しています。

  // 瓶、缶ゴミ 第2, 第4水曜日
  setSchedule("瓶、缶ゴミ", 3, 2);
  setSchedule("瓶、缶ゴミ", 3, 4);

  // 不燃ゴミ 第2, 第4木曜日
  setSchedule("不燃ゴミ", 4, 2);
  setSchedule("不燃ゴミ", 4, 4);

こちらを設定したいスケジュールに合わせて変更してください。
設定する引数の値はsetScheduleのアノテーションをご確認ください。

設定例

第2日曜日に「資源ごみ」を追加する場合

setSchedule("資源ごみ", 0, 2);

第3金曜に「お茶」を追加する場合

setSchedule("お茶", 5, 3);

毎月1日に実行するように設定する

GASのトリガー機能より、毎月1日に実行されるように設定を行います。

左パネルよりトリガーを選択

右下の「トリガーを追加」を選択

下記の値を参考に設定を行えば、月初1日にカレンダーの登録が行われます。

参考にした記事

Google Apps Scriptで特定月のカレンダーのイベント情報を取得する

以上

コメント

タイトルとURLをコピーしました