【GAS GoogleAppsScript | Googleカレンダー】Googleカレンダーを操作するCalendarサービス(その2)

スポンサーリンク

Googleカレンダーを操作するCalendarサービス

Calendarサービス

Calandarサービスは、GASでGoogleカレンダーを操作するときに使うクラスとメンバーがまとめられています。Googleカレンダーに登録されたイベントの情報を取得したり、イベントを追加したり削除したりなどの操作が行えます。

Calendarサービスの主なクラス

クラス 説明
CalendarApp Calendarサービスのグローバルオブジェクト
Calendar カレンダーの操作をする機能を提供する
CalendarEvent 一つのイベントを操作する機能を提供する

Calendarサービスのクラスは、CalendarApp→Calendar→CalendarEventという改装構造になっています。これは、スプレッドシートサービスのときの、SpreadsheetApp→Spreadsheet→Sheet→Rangeと同じようにイメージしてもらえればOKです。

前回はその1ということで、CalendarAppクラスについて説明しました。

今回はその2ということで、Calendarクラスについて説明していきたいと思います。

Calendarクラス

Calendarクラスは前述の通りCalendarサービスの中では第2階層目のクラスになります。上位階層CalendarAppクラスで取得したカレンダーの一つ一つを操作するためのクラスです。

主なメンバーは次です。

メンバー 返り値 説明
 createAllDayEvent(title,date[,options])  CalendarEvent  日付(date)に終日予定(title)を作成
 createAllDayEvent(title, start, end[,options]) CalendarEvent  日付(start)から日付(end)に終日予定(title)を作成
createAllDayEventSeries(title, start, recurrence[, options])  CalendarEventSeries recurrenceで日付(start)から定期開催される終日予定を作成
 createEvent(title, start[,end, options])  CalendarEvent 期間(start)から期間(end)で予定(title)を作成
 createEventFromDescription(description)  CalendarEvent  文章から判断して新しい予定を作成
 createEventSeries(title, start, end, recurrence[, options])  CalendarEventSeries recurrenceで定期開催される期間(start)から期間(end)の予定を作成
 deleteCalendar()  Void  カレンダーを完全に削除
 getColor()  String  カレンダーの設定色を取得
 getDescription()  String  カレンダーの説明内容を取得
 getEventById(id)  CalendarEvent  idにマッチする予定を取得
 getEventSeriesById(id)  CalendarEventSeries  idにマッチする定期開催予定を取得
 getEvents(start, end[, options])  CalendarEvent[]  条件の日時(startからend)にマッチするすべての予定を配列で取得
 getEventsForDay(date)  CalendarEvent[]  指定日(date)のすべての予定を配列で取得
 getId()  String  カレンダーのIDを取得
 getName()  String  カレンダー名を取得
 getTimeZone()  String  カレンダーのタイムゾーンを取得
 isHidden()  Boolean  ユーザーのUI上で非表示になっているかどうか真偽値で取得
 isPrimaryCalendar()  Boolean  カレンダーがデフォルトに設定されているかどうか真偽値で取得
 isOwnedByMe()  Boolean  カレンダーのオーナーが自分かどうか真偽値で取得
 isSelected()  Boolean  ユーザーのUI上で表示されているか真偽値で取得
 setColor(color)  Calendar  カレンダーの色を設定
 setDescription  Calendar  カレンダーの説明内容をcolorに設定
 setHidden(hidden)  Calendar  ユーザーのUI上で非表示に設定
 setName(name)  Calendar  カレンダー名をnameに設定
 setSelected(selected)  Calendar  ユーザーのUI上で非表示を解除
 setTimeZone(timeZone)  Calendar  カレンダーのタイムゾーンをtimeZoneに設定
 unsubscribeFromCalendar()  Void  カレンダーの共有を解除

上記の通りカレンダー自体に対する操作と、カレンダーに紐づく予定(イベント)を作成するのメソッドがあります。

※実は、Calendarクラスにある、イベントの取得や作成など多くのメソッドは、CalendarAppクラスにもあります。ただし、CalendarAppクラスでのそれらのメソッドは、対象がデフォルトカレンダーになっていますので注意してください。Calendarクラスを利用するほうがより幅広いプログラムが作れると思います。

予定(イベント)を取得する

次のサンプルをGASで取得してみましょう。

上の画像の10月28日に予め作った「作った予定1」を取得するサンプルプログラムです。

function test() {
  
  // カレンダーのID(IDはそれぞれ指定してください。)
  var calendarId = "*************@group.calendar.google.com"
  
  // カレンダーを取得する
  var calendar = CalendarApp.getCalendarById(calendarId)
  
  // 指定期間の予定の一覧を取得する
  var startDate = new Date("2020/10/01") // 取得期間開始日
  var endDate = new Date("2020/10/31")    // 取得期間終了日
  var events = calendar.getEvents(startDate, endDate) // 予定取得
  
  // ログに書き出す(予定のタイトルを一つずつ書き出す)
  events.forEach(function(event, i , array){
      Logger.log(event.getTitle()) // 作った予定1
  })
}

実行すると、ログに「作った予定1」と表示されます。

予定を取得する方法は、いくつかありますが、ここではgetEventsメソッドを使っています。

構文

Calendarオブジェクト.getEvents(start, end[, options])

取得したい日時の期間を指定できるメソッドです。

他にも、取得したい日を指定するgetEventsForDayメソッドなど色々あります。

構文

Calendarオブジェクト.getEventsForDay(date[, options])

オプションを指定することで、細かく条件を指定することが出来ます。

オプション 説明
start integer 取得する開始位置
max integer 取得する最大数
author String イベント作成者のメールアドレス
search String 指定したキーワードを含む予定を取得する

予定(イベント)を作成する

では、GASでカレンダーに予定を追加してみましょう。

予定を新しく追加する場合は、createEventメソッドを使います。

構文

Calendarオブジェクト.createEvent(title, start[,end, options])

function test() {
  
  // カレンダーのID(IDはそれぞれ指定してください。)
  var calendarId = "*************@group.calendar.google.com"
  
  // カレンダーを取得する
  var calendar = CalendarApp.getCalendarById(calendarId)
  
  // 新しく予定(イベント)を作成する
  var title = "作った予定2"
  var startTime = new Date("2020/10/28 12:00");
  var endTime = new Date("2020/10/28 13:00");
  var options = {
    description: "お金の計算2",
    location: "別荘"
  }
  calendar.createEvent(title, startTime, endTime, options)
  
  
  // 指定期間の予定の一覧を取得する
  var events = calendar.getEventsForDay(new Date("2020/10/28"))
  
  // ログに書き出す(予定のタイトルを一つずつ書き出す)
  events.forEach(function(event, i , array){
      Logger.log(event.getTitle()) // 作った予定1 作った予定2
  })
}

実行すると、ここで作られた「作った予定2」が追加されているので、「作った予定1」と「作った予定2」がログに表示されます。

引数のオプションの設定は以下のようになっています。

オプション 説明
description String 予定の説明
location String 予定の場所
guests String ゲストとして追加する、メールアドレスのカンマ区切りリスト
sendInvites Boolean 招待メールを送信するかどうか(デフォルト:false)

アプリから普通に、Googleカレンダーを作成するときに設定が出来る項目ですね。

まとめ

Calendarクラスの紹介をしました。次回は、CalendarEventクラスについて紹介します!