【GAS】Googleカレンダー連携の基本

GAS

この記事では、Google Apps Script(GAS)でGoogleカレンダーと連携する方法、頻出メソッドの使い方をご紹介します。

Googleカレンダーとの連携でできること

GASでカレンダーと連携することで下記のような操作を行うことができます。

  • カレンダーの取得(カレンダー情報 / 予定)
  • 予定の作成
  • 予定への情報追加・変更
  • 予定の色(カラー)の変更
  • 予定の削除
  • 祝日の取得

カレンダーの取得

CalendarApp.getDefaultCalendar()

CalendarApp.getCalendarById(id)

  • id(必須):取得したいカレンダーのカレンダーID

カレンダーを扱うには、まずは情報取得したいカレンダーを指定してCalendarAppクラスオブジェトを取得します。取得するための主な方法は「カレンダーIDを指定して取得」「デフォルトカレンダーを取得」の2つです。

カレンダーIDは「設定と共有」から「カレンダーの統合」画面を開くと確認できます。

カレンダー情報の取得

取得したカレンダーに対して情報取得メソッドを呼び出すことで該当カレンダーの情報を取得できます。下記では「カレンダー名」「カレンダーID」「カラー」「タイムゾーン」を取得しています。

 let calendar = CalendarApp.getDefaultCalendar();

  console.log(calendar.getName()); //テスト カレンダー
  console.log(calendar.getId()); //*************@gmail.com
  console.log(calendar.getColor()); //	#9FE1E7
  console.log(calendar.getTimeZone()); //Asia/Tokyo

日付はDate型で宣言する必要があるので、記述方法は下記で確認してみてください。

予定(イベント)の取得

Calendar.getEvents(startDate, endDate [, option])

  • startDate(必須):予定取得開始日
  • endDate(必須):予定取得終了日 *取得したい日付の翌日を指定
  • option(任意)
    ・start:開始位置
    ・max:取得数
    ・author:イベント作成者(メールアドレスを取得)
    ・search:指定キーワードを名前に含むイベントを取得

Calendar.getEventsForDay(date [, option])

  • date(必須):取得する日付
  • option(任意):Calendar.getEventsメソッドと同様

カレンダー内の予定(イベント)は期間(開始日 / 終了日)または日付を指定してイベントオブジェクトの配列として取得します。

  let startDate = new Date('2022/07/04'); 
  let endDate = new Date('2022/07/08')
  let events = calendar.getEvents(startDate,endDate);

  console.log(events[0].getTitle()); //	タスク確認

  let today = new Date();
  let todayEvents = calendar.getEventsForDay(today);

  console.log(todayEvents[0].getTitle()); //昼休憩

予定の作成

新規予定(イベント)を作成するには、特定の日時を指定して作成するcreateEventメソッドまたは終日イベントのcreateAllDayEventを使います。

Calendar.createEvent(title, start, end [, option])

  • title(必須):イベントのタイトル(String)
  • start(必須):イベントの開始日時(Date)
  • end(必須):イベントの開始日時(Date)
  • option(任意)
    ・description:説明(String)
    ・location:場所(String)
    ・guests:招待するゲストのメールアドレス(String)のリスト
    ・sendInvites:招待メールを送信するか否か(Boolean)

Calendar.createAllDayEvent(title, date [, option]) *イベントを1日だけ挿入する場合
Calendar.createAllDayEvent(title, startDate, endDate [, option]) *イベントを複数日にわたって挿入する場合

  • title(必須):イベントのタイトル(String)
  • date(必須):終日イベントを追加する日付
  • startDate(必須):イベントの開始日(Date)
  • endDate(必須):イベントの開始日(Date)*取得したい日付の翌日を指定
  • option(任意):Calendar.createEventメソッドと同様

空のカレンダーにそれぞれのメソッドを使って予定を入れてみます。

  let calendar = CalendarApp.getDefaultCalendar();

//2022/06/28 15:00~18:00で「A社商談」という予定を挿入
//オプションで説明・場所・ゲストも追加
  let start = new Date('2022/06/28 15:00');
  let end = new Date('2022/06/28 18:00'); 
  let option = {
    'description':'先方部長出席、計4名参加',
    'location':'Zoomアカウント①',
    'guests': 'guestmail@example.com',
    'sendInvites':false,
  };
  
  calendar.createEvent('A社商談',start,end,option);
//2022/06/27 ~ 2022/06/30 に「北海道出張」という終日予定を挿入
  let startDate = new Date('2022/06/27');
  let endDate = new Date('2022/07/01'); 

  calendar.createAllDayEvent('北海道出張',startDate,endDate);
 //2022/06/28に「プレゼン結果発表日」という終日予定を挿入
  let date = new Date('2022/06/29');

  calendar.createAllDayEvent('プレゼン結果発表日',date);

予定への情報追加・変更

Event.設定メソッド

GASからカレンダーの予定を変更(修正)するにはイベントを取得し、イベントに対して設定用メソッドを呼び出します。主なメソッドは下記です。

メソッド内容
setTitle(title)イベントのタイトルを設定
setTime(startTime, endTime)イベントの開始時間と終了時間を設定
setDescription(description)イベントの説明を設定
removeGuest(email)ゲストメールを削除
setAllDayDate(date)終日イベントの日付を設定
setColor(color)色を設定
setLocation(location)場所を設定

下記の予定の「タイトル」「日時」「ゲストメール」を変更してみます。

 

  let calendar = CalendarApp.getDefaultCalendar();

  let date = new Date('2022/06/28')
  let events = calendar.getEventsForDay(date,{'search':'商談'})
  let event = events[0];

//もともとの予定の情報取得
  console.log(event.getTitle()); //	A社商談
  console.log(event.getStartTime()); //	Tue Jun 28 2022 15:00:00 GMT+0900 (Japan Standard Time)
  console.log(event.getEndTime()); //	Tue Jun 28 2022 18:00:00 GMT+0900 (Japan Standard Time)


//変更の実行
  let startTime = new Date('2022/06/29 15:00');
  let endTime = new Date('2022/06/29 18:00'); 

  event.setTitle('A社商談(リスケ)');
  event.removeGuest('guestmail@example.com');
  event.setTime(startTime, endTime);

//変更後の予定の情報取得
  console.log(event.getTitle()); //A社商談(リスケ)
  console.log(event.getStartTime()); //	Wed Jun 29 2022 15:00:00 GMT+0900 (Japan Standard Time)
  console.log(event.getEndTime()); //	Wed Jun 29 2022 18:00:00 GMT+0900 (Japan Standard Time)

予定の色(カラー)の変更

色の設定は予定(イベント)作成時にはできないので作成後にsetColorメソッドを使う必要があります。

Event.setColor(color)

color(必須):CalendarAppクラスのEnum EventColor*

*カラーコードはこちらの公式ページで確認できます。または下記を参考にしてください。

プロパティ説明
PALE_BLUE 淡い青色("1"
PALE_GREEN 青緑色("2"
MAUVE Mauve("3"
PALE_RED 淡い赤("4"
YELLOW 黄("5"
ORANGE オレンジ("6"
CYAN シアン("7"
GRAY グレー("8"
BLUE 青("9"
GREEN 緑("10"
RED 赤色("11"
  event.setColor(CalendarApp.EventColor.GREEN);

予定の削除

予定を削除するには、該当イベントを取得後にdeleteEventメソッドを使います。

Event.deleteEvent()

  event.deleteEvent();

祝日の取得

最後に本筋の機能ではないですが、カレンダー特融でかつ覚えておくと非常に便利な祝日の取得についてご紹介します。

Googleカレンダーには、もともとアクセス可能なカレンダーとして「日本の祝日」が用意されています。

「日本の祝日」のカレンダーIDはja.japanese#holiday@group.v.calendar.google.comなので、これを引数にgetCalendarByIdメソッドでカレンダー内のイベントを取得できます。

  let holidayCalendar = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com');
  // console.log(holidayCalendar.getName()); //	日本の祝日

  let startDate = new Date('2022/01/01');
  let endDate = new Date('2023/01/01');
  let events = holidayCalendar.getEvents(startDate,endDate);
  console.log(events.length); //16

  let holidays = [];
  events.forEach(event => holidays.push(event.getTitle()));
  console.log(holidays);

// [ '元日',
//   '成人の日',
//   '建国記念の日',
//   '天皇誕生日',
//   '春分の日',
//   '昭和の日',
//   '憲法記念日',
//   'みどりの日',
//   'こどもの日',
//   '海の日',
//   '山の日',
//   '敬老の日',
//   '秋分の日',
//   'スポーツの日',
//   '文化の日',
//   '勤労感謝の日' ]

まとめ

GASでカレンダーを扱う日基本的な方法についてご紹介しました。

  • カレンダーの取得(カレンダー情報 / 予定)
  • 予定の作成
  • 予定への情報追加・変更
  • 予定の色(カラー)の変更
  • 予定の削除
  • 祝日の取得
この記事を書いた人

てつお
広告代理店出身、事業会社でWebマーケティングや開発の仕事をしている26歳です。プロフィール詳細はこちら
■Google広告認定資格|Google アナリティクス個人認定資格(GAIQ)|TOEIC920点