カレンダーと予定

このガイドでは、カレンダー、予定、およびそれらの相互関係について説明します。

カレンダー

カレンダーは、関連する予定のコレクションと、概要、デフォルトのタイムゾーン、場所などの追加のメタデータです。各カレンダーは、メールアドレスである ID で識別されます。カレンダーには複数のオーナーを設定できます。

イベント

イベントは、特定の日付または期間に関連付けられたオブジェクトです。イベントは、一意の ID で識別されます。イベントには、開始日時と終了日時のほかに、概要、説明、場所、ステータス、リマインダー、添付ファイルなどのデータが含まれます。

イベントの種類

Google カレンダーでは、単発の予定と繰り返しの予定がサポートされています。

  • 単一イベントは、一意の発生を表します。
  • 繰り返しイベントは、複数の発生を定義します。

予定は時刻指定または終日にすることもできます。

  • 時刻指定イベントは、2 つの特定の時点の間に発生します。時刻指定イベントでは、start.dateTime フィールドと end.dateTime フィールドを使用して、イベントが発生するタイミングを指定します。
  • 終日の予定は、1 日または連続する複数の日にわたる予定です。全日イベントでは、start.date フィールドと end.date フィールドを使用して、イベントが発生する日時を指定します。なお、タイムゾーン フィールドは、一日のイベントには意味がありません。

主催者

イベントには 1 つの主催者があり、これはイベントのメインコピーを含むカレンダーです。イベントには複数の参加者を設定することもできます。通常、参加者は招待されたユーザーのメインのカレンダーです。

次の図は、カレンダー、イベント、その他の関連要素間の概念的な関係を示しています。

メイン カレンダーと他のカレンダー

メインのカレンダーは、単一のユーザー アカウントに関連付けられた特殊なタイプのカレンダーです。このカレンダーは、新しいユーザー アカウントごとに自動的に作成され、通常、その ID はユーザーのメインのメールアドレスと一致します。アカウントが存在する限り、そのメインのカレンダーをユーザーが削除したり、所有権を放棄したりすることはできません。ただし、他のユーザーと共有することは可能です。

メイン カレンダーに加えて、任意の数の他のカレンダーを明示的に作成できます。これらのカレンダーは、複数のユーザー間で変更、削除、共有できます。

カレンダーとカレンダー リスト

カレンダー コレクションは、既存のすべてのカレンダーを表します。カレンダーの作成と削除に使用できます。カレンダーにアクセスできるすべてのユーザー間で共有されるグローバル プロパティを取得または設定することもできます。たとえば、カレンダーのタイトルとデフォルトのタイムゾーンはグローバル プロパティです。

CalendarList は、ユーザーがリストに追加したすべてのカレンダー エントリのコレクションです(ウェブ UI の左側のパネルに表示されます)。これを使用して、ユーザーのリストに既存のカレンダーを追加または削除できます。また、デフォルトのリマインダーなど、ユーザー固有のカレンダー プロパティの値を取得して設定するためにも使用します。別の例として、フォアグラウンド カラーがあります。同じカレンダーに対して、ユーザーごとに異なる色を設定できます。

次の表に、2 つのコレクションのオペレーションの意味を比較します。

オペレーション カレンダー CalendarList
insert 新しい予備カレンダーを作成します。デフォルトでは、このカレンダーはクリエイターのカレンダー リストにも追加されます。 既存のカレンダーをユーザーのリストに挿入します。
delete 予備カレンダーを削除します。 ユーザーのリストからカレンダーを削除します。
get カレンダーのメタデータ(タイトル、タイムゾーンなど)を取得します。 メタデータと、色やリマインダーのオーバーライドなど、ユーザー固有のカスタマイズを取得します。
patch/update カレンダーのメタデータを変更します。 ユーザー固有のカレンダー プロパティを変更します。

定期的な予定

週次ミーティング、誕生日、休日など、定期的なスケジュールで複数回発生するイベントもあります。多くの場合、これらの繰り返しイベントは開始時間と終了時間が異なる以外は同じです。

定義されたスケジュールに従って繰り返されるイベントは、繰り返しイベントと呼ばれます。単発イベントは、繰り返し行われず、1 回のみ発生します。

繰り返しルール

繰り返しイベントのスケジュールは、次の 2 つの部分で定義されます。

  • 開始フィールドと終了フィールド(単一のイベントであるかのように最初の発生を定義します)。

  • 繰り返しフィールド(イベントを経時的に繰り返す方法を定義します)。

繰り返しフィールドには、RFC 5545 で定義されている 1 つ以上の RRULERDATE、または EXDATE プロパティを表す文字列の配列が含まれます。

RRULE プロパティは、イベントの繰り返しの正規ルールを定義するため、最も重要です。複数のコンポーネントで構成されています。たとえば、次のような要因が含まれます。

  • FREQ - イベントを繰り返す頻度(DAILYWEEKLY など)。必須です。

  • INTERVAL - FREQ と連携して、イベントを繰り返す頻度を指定します。たとえば、FREQ=DAILY;INTERVAL=2 は 2 日ごとに 1 回を意味します。

  • COUNT - このイベントを繰り返す回数。

  • UNTIL - イベントを繰り返す最終日(指定日も期間に含む)。

  • BYDAY - イベントを繰り返す曜日(SUMOTU など)。他の類似コンポーネントには、BYMONTHBYYEARDAYBYHOUR などがあります。

RDATE プロパティには、イベントが発生する日付または日時を追加で指定します。例: RDATE;VALUE=DATE:19970101,19970120RRULE でカバーされていない追加の出現を追加する場合に使用します。

EXDATE プロパティは RDATE と似ていますが、イベントが発生しない日付または日時を指定します。つまり、これらの発生は除外する必要があります。これは、繰り返しルールによって生成された有効なインスタンスを指す必要があります。

EXDATERDATE にはタイムゾーンを指定できます。終日の予定の場合は日付(日時ではない)にする必要があります。

各プロパティは、繰り返しフィールド内で複数回指定できます。繰り返しは、すべての RRULE ルールと RDATE ルールのユニオンから、すべての EXDATE ルールによって除外されるルールを除いたものとして定義されます。

定期的なイベントの例を以下に示します。

  1. 2015 年 9 月 15 日から毎週火曜日と金曜日の午前 6 時から午前 7 時まで発生し、9 月 29 日の 5 回目の発生後に終了するイベント:

    ...
    "start": {
     "dateTime": "2015-09-15T06:00:00+02:00",
     "timeZone": "Europe/Zurich"
    },
    "end": {
     "dateTime": "2015-09-15T07:00:00+02:00",
     "timeZone": "Europe/Zurich"
    },
    "recurrence": [
     "RRULE:FREQ=WEEKLY;COUNT=5;BYDAY=TU,FR"
    ],
    …
    
  2. 2015 年 6 月 1 日に開始し、6 月 10 日を除く 6 月中の 3 日ごとに繰り返される終日のイベント(6 月 9 日と 11 日を含む):

    ...
    "start": {
     "date": "2015-06-01"
    },
    "end": {
     "date": "2015-06-02"
    },
    "recurrence": [
     "EXDATE;VALUE=DATE:20150610",
     "RDATE;VALUE=DATE:20150609,20150611",
     "RRULE:FREQ=DAILY;UNTIL=20150628;INTERVAL=3"
    ],
    …
    

インスタンスと例外

繰り返しイベントは、複数のインスタンス(異なる時間に発生する特定の発生)で構成されます。これらのインスタンスはイベントとして機能します。

定期的なイベントの変更は、定期的なイベント全体(およびそのすべてのインスタンス)に影響するか、個々のインスタンスにのみ影響します。親の繰り返しイベントと異なるインスタンスは、例外と呼ばれます。

たとえば、例外には、要約が異なる、開始時間が異なる、そのインスタンスにのみ招待された追加の参加者がいる場合があります。定期的な予定を削除せずにインスタンスを完全にキャンセルすることもできます(インスタンスのキャンセルはイベント status に反映されます)。

Google Calendar API を使用して定期的なイベントとインスタンスを操作する方法の例については、こちらをご覧ください。

タイムゾーン

タイムゾーンは、統一された標準時を遵守する地域を指定します。Google Calendar API では、IANA タイムゾーンの識別子を使用してタイムゾーンを指定します。

カレンダーと予定の両方にタイムゾーンを設定できます。以降のセクションでは、これらの設定の影響について説明します。

カレンダーのタイムゾーン

カレンダーのタイムゾーンは、クエリ結果に影響するため、デフォルトのタイムゾーンとも呼ばれます。カレンダーのタイムゾーンは、events.get()events.list()events.instances() メソッドによる時間値の解釈や表示方法に影響します。

クエリ結果のタイムゾーン変換
get()list()instances() メソッドの結果は、timeZone パラメータで指定したタイムゾーンで返されます。このパラメータを省略すると、これらのメソッドはすべてカレンダーのタイムゾーンをデフォルトとして使用します。
終日の予定と時間指定のクエリの照合
list() メソッドと instances() メソッドでは、開始時間と終了時間のフィルタを指定できます。指定された範囲内のインスタンスが返されます。カレンダーのタイムゾーンは、終日の予定の開始時間と終了時間を計算し、フィルタ仕様に該当するかどうかを判断するために使用されます。

予定のタイムゾーン

イベント インスタンスには開始時間と終了時間があります。これらの時間の指定にはタイムゾーンを含めることができます。タイムゾーンはいくつかの方法で指定できます。以下はすべて同じ時刻を指定します。

  • dateTime フィールドにタイムゾーン オフセットを指定します(例: 2017-01-25T09:00:00-0500)。
  • オフセットなしで時刻を指定します(2017-01-25T09:00:00 など)。timeZone フィールドは空白のままにします(この場合、デフォルトのタイムゾーンが暗黙的に使用されます)。
  • オフセットのない時刻(2017-01-25T09:00:00 など)を指定しますが、timeZone フィールドを使用してタイムゾーンを指定します。

必要に応じて、イベントの時間を UTC で指定することもできます。

  • UTC 時間 2017-01-25T14:00:00Z を指定するか、オフセット 0 の 2017-01-25T14:00:00+0000 を使用します。

イベント時間の内部表現は、これらのケースではすべて同じですが、timeZone フィールドを設定すると、カレンダー UI を使用してイベントのタイムゾーンを設定する場合と同様に、イベントにタイムゾーンが適用されます。

予定のタイムゾーンが表示されているスクリーンショット フラグメント

定期的な予定のタイムゾーン

繰り返しイベントの場合は、常に 1 つのタイムゾーンを指定する必要があります。イベントの繰り返しを展開するには、この値が必要です。