見出し画像

【GAS】でGoogleカレンダーのカレンダーを扱う!CalendarAppクラス編

この記事では GoogleAppsScript で Google カレンダーのカレンダーを作成したり、取得したりすることができるクラスである「CalendarApp クラス」の使い方、主にメソッドの紹介をします。

なお、カレンダーのクラス(Calendar クラス)にあるメソッドとかぶる内容のものがあると個人的な判断をしたものがあるため、「CalendarApp クラス」にある全てのメソッドは紹介していないことをご了承ください。

また、GoogleAppsScript で Google カレンダーを扱うにあたり事前に知っておくべき、Google カレンダーがどの様なものかをまとめた記事もありますので、よろしければご覧ください。


CalendarApp クラスでできること

CalendarApp クラスを使ってできることの概要を紹介します。
CalendarApp クラスでは、主にカレンダー(Calendar クラスのオブジェクト)に対する操作が行えます。

Google カレンダーの中でカレンダー(Calendar)とは、予定がカテゴリー(同じテーマ)ごとにまとまったものであり、分類されて整理のしやすさや参照のしやすさに貢献します。
具体的な例で言うと、仕事用のカレンダーなら、会議や営業の予定などの仕事関連の予定がまとめてある場合などがありそうです。

そして、そのカレンダー(Calendar クラス)に対してどできることの概要を見ていきましょう。

新規カレンダーの作成
既存のカレンダーの取得
他のユーザーの外部カレンダーの取り込み

以降で詳細と実際の使い方を紹介していきます。

なお、「CalendarApp クラス」には特有のメソッドである「.newRecurrence()」があり、これは繰り返しの予定を作成する際、その繰り返しのルールを定義するために必要な「EventRecurrence クラス」のオブジェクトを取得するためのものですが、この記事では紹介しません。
こちらのメソッドも含め、「繰り返す予定」に関する説明をしている下の記事をぜひご参照ください。

新規カレンダーの作成

.createCalendar(カレンダー名、(オプション))

引数:
カレンダー名(文字列)
オプション(辞書型)(任意)

戻り値:作成されたカレンダー(Calendar クラスのオブジェクト)

let newCalendar = CalendarApp.createCalendar('仕事');

また、引数のオプションは、新規に作成したカレンダーの説明や色などの設定ができます。
設定するかは任意です。

指定できる項目を紹介します。

キー :  内容
summary : カレンダーの説明(文字列)
color : カレンダーの色の指定(色の16進表記または「CalendarApp.Colors のプロパティ」)
selected : カレンダーの予定を全て視覚的に表示するか非表示にするかの指定(表示:true、非表示:false)
hidden : カレンダーを有効にするかしないかの設定(有効にしない:true、有効にする:false)
location : カレンダーに関連がある場所の設定(文字列)
timeZone : カレンダーに関連がある地域のタイムゾーンの設定(文字列)

設定例

let newCalendar = CalendarApp.cerateCalendar('ハワイ旅行!', {color: CalendarApp.Color.BLUE, timeZone: 'HST  ハワイ' })

カレンダーの取得

デフォルトのカレンダー(DefaultCalendar)のオブジェクトの取得

デフォルトのカレンダーとは、グーグルのアカウントを作成した初期からあるカレンダーで編集していなければ、ユーザー名と同じ名前のカレンダーとしてあるものです。
特にカレンダーを指定せずに予定を作成した時や、他の人が作成した予定に招待(共有)された場合に、その予定が置かれるカレンダーです。

.getDefaultCalendar()

引数:無し
戻り値:デフォルトのカレンダー(Calendar クラスのオブジェクト)

let defaultCalendar = CalendarApp.getDefaultCalendar();

全てのカレンダーのオブジェクトの取得

.getAllCalendars()

引数:無し
戻り値:全てのカレンダー(Calendar クラスのオブジェクトのリスト)

let allCalendars = CalendarApp.getAllCalendars();

カレンダー名からカレンダーのオブジェクトを取得

.getCalendarsByName(カレンダー名)

引数:カレンダー名(文字列)
戻り値:名前が合致する全てのカレンダー(Calendar クラスのオブジェクトのリスト)

let calendars = CalendarApp.getCalendarsByName('仕事');

カレンダーの ID からカレンダーのオブジェクトの取得

.getCalendarById(カレンダー ID)

引数:カレンダーの ID(文字列)
戻り値:ID が該当するカレンダー(Calendar クラスのオブジェクト)

let calendar = CalendarApp.getCalendarById('/*カレンダーのID*/');

自分がオーナー(Owner)であるカレンダーのオブジェクトの取得

自分がオーナーのカレンダーとは、そのカレンダーの各設定、共有の設定など全ての権限が自分にあるカレンダーです
基本的に自分で作成したカレンダーは、自分がそのカレンダーに対してオーナーになります。

また、自分があるカレンダーのオーナーかそうでないかを確認したい場合は、「Calendar クラス」のオブジェクトに対して、そのクラスのメソッドの「.isOwnedByMe()」によって、オーナーなら true、でなければ false としてわかります。

自分がオーナーである全てのカレンダーのオブジェクトの取得

.getAllOwnedCalendars()

引数:無し
戻り値:自分がオーナーである全てのカレンダー(Calendar クラスのオブジェクトのリスト)

let allOwnedCalendars = CalendarApp.getAllOwnedCalendars();

カレンダー名から自分がオーナーであるカレンダーのオブジェクトの取得

.getOwnedCalendarsByName(カレンダー名)

引数:カレンダー名(文字列)
戻り値:カレンダー名に該当する自分がオーナーであるカレンダーたち(Calendar クラスのオブジェクトのリスト)

let ownedCalendars = CalendarApp.getOwnedCalendarsByName('仕事');

カレンダー ID から自分がオーナーであるカレンダーオブジェクトの取得

.getOwnedCalendarById(カレンダー ID)

引数:カレンダー ID(文字列)
戻り値:ID が該当する自分がオーナーであるカレンダー(Calendar クラスのオブジェクト)

let ownedCalendar = CalendarApp.getOwnedCalendarById('/*カレンダーのID*/');

外部のカレンダーの取り込み

外部のカレンダーとは、他のユーザーが作成したカレンダーを自分の Google カレンダーに取り込むことです。
例えば、会議室の利用予定用のカレンダーを取り込むことにより、会議室が空いている時間を把握し、利用の予約を入れる場合など、取り入れれたら便利そうです。

.subscribeToCalendar(カレンダー ID、(オプション))

引数:
外部カレンダーの ID(文字列)
オプション(辞書型)(任意)

戻り値:取り込んだカレンダー(Calendar クラスのオブジェクト)

let subscribedCalendar = CalendarApp.subscribeToCalendar('/*カレンダーID*/');

また、引数のオプションは、取り込んだ外部のカレンダーの色や予定の表示・非表示の設定ができます。
設定するかは任意です。

具体的に設定できることをみてみましょう。

カレンダーの色(color:色の16進表記または「CalendarApp.Colors のプロパティ」)
 それぞれカレンダーごとに色を設定できます。
カレンダーの予定の表示をするかしないか(selected: true or false)
 カレンダーの予定を表示するかしないかとは、そのカレンダーの予定を全て視覚的に表示するか非表示にするか切り替えができます。
マイカレンダーのリスト(カレンダーの一覧)にカレンダーを載せるか載せないか(hidden: true or false)
 マイカレンダーのリストにカレンダーを載せるとは、カレンダーを有効にするか無効にするかを設定できます。

外部のカレンダーの取り込み時にオプションも設定した場合の例

let subscribedCalendar = CalendarApp.subscribeToCalendar('/*カレンダーID*/', {color: CalendarApp.Color.BLUE, hidden: true});

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