見出し画像

【GAS】でGoogleカレンダーを使う為に知っておくべきこと!全体像編

GoogleAppsScript で Google カレンダーを扱うにあたり、どの様な仕組みになっており、どの様な使い方ができるか知っていれば、GoogleAppsScript でより自由に Google カレンダーを操作できるようになるでしょう。

この記事では、Google カレンダーがどの様な構造であり、どの様なことができるかを紹介していきたいと思います。
加えて、紹介に沿った GoogleAppsScript で使うクラス(class)も載せていきます。


Google カレンダーはどの様なものか

大前提として、Google カレンダーはオンライン上で予定などを管理できるカレンダーサービスです。
簡単に説明すると、予定を作成するのはもちろん、予定を分類して、分類された予定のグループごとをまとめて「カレンダー(calendar)」として分けることができるのです。
たとえば、仕事に関連する予定がまとまった「仕事用カレンダー」と趣味に関する予定をまとめた「趣味のカレンダー」を別々に持っておいてもいいかもしれませんね。

他にも、他の人が作成した「カレンダー」を自分の Google カレンダーに取り入れ(共有)たり、特定の予定を他の人を参加させたり(予定の共有)することができるのです。
こちらも例を出すと、「カレンダー」の取り入れるとは、例えば他の人が作成した「会議室の利用予約用カレンダー」なるものがあったら、会議室を利用したい自分が、会議室の利用状況の確認と利用予約をしたい場合にそのカレンダーを扱うために自分の Google カレンダーに取り入れたいと思うかもしれません。
また、「予定を共有」するとは、例えば懇親会の幹事になり、その予定を作成して、参加するであろう人たちを招待(共有)する場合に便利でしょう。

大まかに言えば、Google カレンダーの構造とできることは上の様なことですが、その他にも取得できる情報やできることもあるので順々に紹介していきます。

Google カレンダーの大まかな構造


<カレンダー(Calendar)>

同じカテゴリーの(分類された)予定が収納されているグループ。
仕事のカレンダーなら仕事に関する予定が入っているでしょうし、趣味のカレンダーなら趣味を楽しむ予定が入っているでしょう。

また、予定の分類とかに関わらす Google のアカウントを作成した時からあるユーザー名と同じ名前のカレンダーがあるのですが、それは Google カレンダーもとより GoogleAppsScript ではデフォルトカレンダーとされています。
どのカテゴリーの予定なのか特に意図を持たず作成した予定や、他の人の予定から招待(共有)されたものは、基本的に全てデフォルトカレンダーの予定となります。

このカレンダーを GoogleAppsScript で扱う際に使用するクラスは「Calendar クラス」です。
また、カレンダー自体の作成や、既存のカレンダーの取得などを行うには「CalendarApp クラス」を使います。

<予定(Event)>

予定とは、予定の内容(タイトル、場所など)と日時の情報がまとまったものになります。
いわゆる予定であり、明後日の何月何日の13時から14時半まで東京駅のどこかで会議の予定を入れる、などの予定がそれにあたります。

また、予定の日時の指定の仕方には2つあり、

何月何日の何時何分から何時何分までと言うように、「日時」で予定の期間を指定
何月何日の予定であるように日付で指定し、「日にち単位(終日)」で予定の期間を指定

があります。

二つの種類の予定

この予定には、「一回限りの予定」と「繰り返す予定」の二種類あります。

  • 一回限りの予定(CalendarEvent)

予定が、ある日時に一度だけ作成さるものを指します。
同窓会の開催の予定を作成するなど、その日限り(一回限り)の予定を作成する場合です。

この一回限りの予定を GoogleAppsScript で扱う際に使用するクラスは「CalendarEvent クラス」です。

  • 繰り返す予定(CalendarEventSeries)

繰り返す予定とは、同じ内容の予定を繰り返し作成したいときです。
例えば、週二回ランニングしようと決心し、毎週火曜と金曜の朝にランニングする予定を作成したい場合がそれにあたります。

この繰り返す予定を GoogleAppsScript で扱う際に使用するクラスは「CalendarEventSeries クラス」です。

カレンダー(Calendar)について

カレンダー(Calendar)は上記でも紹介したように、同じカテゴリーである予定がまとまってあるものです。
ここでは、そんなカレンダーが持っている情報とその管理や、カレンダー(または Calendar クラス)で出来ることを紹介していきます。

またカレンダーを GoogleAppsScript で扱うためのクラスである「Calendar クラス」について説明した記事はこちらをご覧ください。
加えて、カレンダー自体の作成や既存のカレンダーの取得ができるクラスである「CalendarApp クラス」について説明した記事はこちらも併せてご覧ください。

カレンダー(Calendar クラスのオブジェクト)が持っている情報

カレンダーはそのカレンダーが示す分類に沿った予定を持っていますが、ここではカレンダー自体が持っている情報などの紹介をしていきます。

変更可能な情報

  • カレンダー名(name)

カレンダーがどの様な予定を持っているかを表す名前を指定されています。

  • カレンダーの説明(description)

カレンダー名だけでは表現できない、カレンダーがどの様なものかを説明できます。

  • カレンダーの色(color)

他のカレンダーの予定などと見分けやすいように、それぞれのカレンダーに色を指定できます。

  • カレンダーが対応している地域のタイムゾーン(timeZone)

グローバルな方や旅行に関するカレンダーなどがある場合で設定できると便利になるのでしょうか。
他の地域(世界規模)との兼ね合いでカレンダーが関連している地域のタイムゾーンを合わせておくと時差などを調整してくれるのでしょう。
日本のみで予定を立てている場合は、基本的に「東京/日本」のタイムゾーンになっているでしょう。

  • カレンダーの予定の表示・非表示(selected)

これは、ブラウザなどで Google カレンダーを閲覧している時に、あるカレンダーの予定の全てを表示させるか表示させないかを設定できます。

  • カレンダーの一覧上にカレンダーの入れるか入れないか(hidden)

Google カレンダー上の左側にカレンダーの一覧がありますが、そちらにカレンダーを載せるか載せないかの設定ができます。
また、カレンダーを載せない設定にした場合は、その設定している間 Google カレンダーにそのカレンダーが存在していない状態なので、関連する予定は全て表示されなくなります。

変更不可能な情報

  • カレンダーの ID(id)

カレンダーを識別するための ID です。
持っているカレンダーを共有する場合に相手に伝えたり、カレンダーのオブジェクトを取得する際に使用できます。

  • カレンダーのオーナーが自分かどうか(isOwedByMe)

カレンダーの所有権が自分にあるかどうかの情報があります。
自分で作成したカレンダーは初期状態では、自分がオーナーとなっております。
自分がオーナーでないカレンダーとして、他の人が作成したカレンダーを自分の Google カレンダーに取り込んだものがそれにあたります。

  • カレンダーがデフォルトのカレンダーかどうか(isMyPrimaryCalendar)

今扱っているカレンダーがデフォルトのカレンダーかどうかの情報を持っています。

カレンダー(Calendar クラスのオブジェクト)ができること

<カレンダー自体(Calendar クラス)ができること>

予定の作成

終日または日時指定の一回限りの予定(CalendarEvent)の作成
終日または日時指定の繰り返す予定(CalendarEventSeries)の作成

予定の取得

一回限りの予定の ID または繰り返す予定の ID から該当する予定の取得
指定した期間内にあるカレンダーに属する全ての一回限りの予定の取得
指定した日にちにあるカレンダーに属する全ての一回限りの予定の取得

カレンダー自体の管理

カレンダー自体の削除
カレンダーが他の人から取り入れたものである場合、それを Google カレンダーから取り除く

予定(Event)について

上記の通り、予定とは主に日時や内容などの情報を持ったものですが、ここでは予定は「一回限りの予定(CalendarEvent)」と「繰り返す予定(CalendarEventSeries)」に大きく二種類に分けられるのですが、その二つの間で共通して持っている情報やできる事を紹介した後に、それぞれ個別に持っている情報やできる事を説明していこうと思います。

「一回限りの予定」と「繰り返す予定」が共通して持っている予定の情報

変更可能な情報

  • 予定のタイトル(title)

予定の内容がわかるタイトルを指定

  • 予定の説明(description)

予定の内容の詳細を指定

  • 予定の場所(location)

予定が行われる場所などを指定

  • 予定の公開指定(visibility)

その予定が自分しか閲覧・編集できないか、それとも公開するかを指定した情報

  • 予定に対する自分の参加状況(myStatus)

その予定に対し自分が参加するのか参加しないのか、それとも保留しているのか、そもそもその予定のオーナーなのかの情報
自分で作成した予定は初期段階では、オーナーになっている。
詳しい、ステータスの種類などは公式のページで。

  • 予定に隠されたメモ(tag)

ブラウザ上での Google カレンダーからは参照できない、GoogleAppsScript を通してのみアクセスできる、予定に付けられたメモ(タグ)の設定と参照できます。

変更不可能な情報

  • 予定の ID(id)

予定を識別するための ID です。
予定のオブジェクトを取得する際に使用できます。

  • 予定作成時の日時(dateCreated)

予定が作成された日時の情報です。

  • 予定の内容が更新された最後の日時(lastUpdated)

予定の日時、タイトルや場所の情報を変更されて更新された最新の日時の情報です。

  • 予定の作成者(creators)

予定の内容を作成・編集した人の情報(メールアドレス)

  • 予定が属しているカレンダーの ID(originalCalendarId)

予定が入っているカレンダーの ID を持っています。

「一回限りの予定」と「繰り返す予定」が共通してできる事

予定への招待(共有)

予定への参加者の追加や削除
予定へ参加する人の情報の取得
予定の参加者に対する権限の設定:参加者による他の人の招待、参加者による他の参加者の情報の参照、参加者による予定の内容 の3つの権限の設定

予定に対するリマインダー

予定の日時の前に、分単位前に通知が設定できます。

メールでの予定のリマインダーの追加と確認(何分前にリマインダーが設定されているかの確認)
ポップアップ通知によるリマインダーの追加と確認
SMS によるリマインダーの追加と確認
リマインダーの削除

予定自体の削除

予定自体を削除できます。

「一回限りの予定(CalendarEvent)」に関して

「繰り返しの予定」にはない、予定の情報とできる事を紹介します。
「一回限りの予定」を GoogleAppsScript で扱うためのクラスである「CalendarEvent クラス」の詳細やメソッドの紹介はこちらの記事で紹介しています。

「一回限りの予定(CalendarEvent)」のオブジェクトのみが持っている情報

予定が終日のものかどうか
予定が終日指定だった場合の予定の開始日と終了日(5月3日から5月5日までの日付など)
予定が終日指定でない場合の予定の開始日時と終了日時(4月2日の15時から4月2日の17時半までの日時など)

「一回限りの予定(CalendarEvent)」のオブジェクトのみができる事

予定の期間の日時や終日指定の場合の日付の取得
予定の期間の日時や終日指定の場合の日付の再設定

「繰り返しの予定(CalendarEventSeries)」に関して

「繰り返しの予定」では、「一回限りの予定」との共通するもの以外である情報として、予定を繰り返すための「繰り返すルール(Recurrence)」の情報のみとなります。
「繰り返しの予定」に対する各予定の日時などの情報の取得などはできません。

「繰り返しの予定(CalendarEventSeries)」のオブジェクトのみが持っている情報

先ほど書いた通り、「繰り返しの予定」だけが持っている情報は、「繰り返しのルール(Recurrence)」のみになります。

「繰り返しのルール」とは、予定をどの様な周期のパターンで予定していくか決めるために使われます。
例えば、「毎週火曜と金曜」といったように、週ごとに予定を指定曜日に繰り返す指定ができるのです。

また、もちろん週ごとだけでなく、日ごと、月ごと、年ごとに指定の日のパターン繰り返すルールも作成できるのです。
逆に、繰り返すパターンを追加するだけでなく、繰り返さない日のパターンを指定することもできます。
例えば、「毎週火曜と金曜」に予定しているが、毎年の元旦(一月一日)にその曜日であった場合は予定を入れない様にすることができるのです。

この「繰り返すルール」の詳しい説明やルールの作成方法はこちらの記事をご覧ください。

「繰り返しの予定(CalendarEventSeries)」のオブジェクトのみができること

「繰り返しの予定」のオブジェクトでできることは、上記の「繰り返しのルール」を再設定することのみになります。
また、既存に設定してある「繰り返しのルール」を取得して確認することができません。

この記事が気に入ったらサポートをしてみませんか?