1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

作成したTodoをGoogleカレンダーに連携する(icsファイル作成&Google CalendarAPI)

Posted at

はじめに

現在、こちらのリポジトリでTodoを管理する機能を個人開発しています。

その中で、作成したTodoをカレンダーに連携するにはどうしたらいいかを調べて実装したのでその知見を共有しようと思います。

1件のみGoogleカレンダーに連携する

1件のみカレンダーに連携する場合は、簡単でGoogleCalendarAPIのURLを使用すれば可能です。
例)

https://calendar.google.com/calendar/render?action=TEMPLATE&text=${タスクのタイトル}&details=${説明}&dates=${開始日時}/${終了日時}

Googleカレンダー連携URL パラメータ一覧

Googleカレンダーにイベントを追加するための基本的なURLは以下の形式です。

パラメータ名 必須/任意 説明 形式と注意点
action 必須 イベント作成テンプレートを使用することを示します。常に TEMPLATE を指定します。 固定値: TEMPLATE action=TEMPLATE
text 任意 イベントのタイトルを指定します。 URLエンコードされた文字列。 text=%E7%A7%81%E3%81%AE%E5%A4%A7%E5%88%87%E3%81%AA%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88 (私の大切なイベント)
dates 必須 イベントの開始日時終了日時を指定します。 YYYYMMDDTHHMMSSZ/YYYYMMDDTHHMMSSZ の形式で、UTC(協定世界時)を指定するのが最も確実です。
終日イベントの場合は YYYYMMDD/YYYYMMDD とし、終了日は最終日の翌日を指定します。
期間指定: dates=20250715T090000Z/20250715T100000Z (2025年7月15日 09:00-10:00 UTC)
終日: dates=20250801/20250802 (2025年8月1日の終日イベント)
details 任意 イベントの詳細説明を指定します。 URLエンコードされた文字列。改行は %0A で表現します。 details=%E3%81%93%E3%82%8C%E3%81%AF%E8%A9%B3%E7%B4%B0%E3%81%A7%E3%81%99%E3%80%82%0A%E3%81%94%E5%8F%82%E5%8A%A0%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82 (これは詳細です。ご参加ください。)
location 任意 イベントの場所を指定します。 URLエンコードされた文字列。 location=%E6%9D%B1%E4%BA%AC%E9%A7%85 (東京駅)
ctz 任意 イベントのタイムゾーンを指定します。 IANAタイムゾーンデータベース名(例: Asia/Tokyo, America/New_York)。URLエンコードが必要です。 ctz=Asia/Tokyo
add 任意 イベントに招待する参加者のメールアドレスを指定します。 複数の場合はカンマ区切り。URLエンコードされたメールアドレス。 add=test1%40example.com,test2%40example.com
recur 任意 イベントの繰り返しルールを指定します。 iCalendar (RFC 5545) 形式のRRULEに準拠し、URLエンコードします。 recur=RRULE:FREQ=WEEKLY;BYDAY=MO (毎週月曜日に繰り返す)
sf 推奨 Googleカレンダーのイベント作成画面を正しく表示するためのパラメータ。 固定値: true sf=true
output 推奨 Googleカレンダーのイベント作成画面を正しく表示するためのパラメータ。 固定値: xml output=xml

複数件のTodoを連携する

現状、複数のタスクを一括で登録するにはGoogle CalendarのAPIを使用する必要がありそうなので、今回は、icsファイルを作成して連携しようと思います。

ICSファイルの基本構造

ICSファイルは、BEGIN:VCALENDAR と END:VCALENDAR で囲まれたブロックが基本です。その中に、イベントを示す VEVENT や、タイムゾーンを示す VTIMEZONE などのコンポーネントが配置されます。

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Your Company//Your Product V1.0//EN
BEGIN:VEVENT
UID:20250701T100000Z-12345@example.com
DTSTAMP:20250701T100000Z
DTSTART:20250701T110000Z
DTEND:20250701T120000Z
SUMMARY:会議のタイトル
DESCRIPTION:これは会議の詳細です。\n議題:プロジェクト進捗報告。
LOCATION:オンライン会議(Zoom)
ATTENDEE;CN=参加者 A;RSVP=TRUE:mailto:attendeeA@example.com
ATTENDEE;CN=参加者 B:mailto:attendeeB@example.com
ORGANIZER;CN=主催者:mailto:organizer@example.com
STATUS:CONFIRMED
RRULE:FREQ=WEEKLY;BYDAY=MO;UNTIL=20251231T000000Z
END:VEVENT
END:VCALENDAR

ICSファイルの主要な設定項目(プロパティ)

ICSファイルでイベント(VEVENTコンポーネント内)に設定できる主な項目は以下の通りです。

プロパティ名 説明 形式と注意点
UID 必須。イベントの一意の識別子。イベントの更新や削除に必要です。 グローバルに一意な文字列。通常、タイムスタンプとドメイン名などを組み合わせます。 UID:20250701T100000Z-12345@example.com
DTSTAMP 必須。ICSファイルが作成された日時 UTC形式 (YYYYMMDDTHHMMSSZ)。 DTSTAMP:20250701T100000Z
DTSTART 必須。イベントの開始日時 UTC形式 (YYYYMMDDTHHMMSSZ) またはタイムゾーン指定 (YYYYMMDDTHHMMSS;TZID=タイムゾーンID)。終日イベントは日付のみ (YYYYMMDD)。 期間指定: DTSTART:20250701T110000Z
終日: DTSTART:20250701
DTEND 必須。イベントの終了日時 DTSTART と同じ形式。終日イベントの場合、終了日はイベントの最終日の翌日 期間指定: DTEND:20250701T120000Z
終日: DTEND:20250702
SUMMARY イベントのタイトルまたは件名。 任意のテキスト。改行は \n または \N SUMMARY:新製品発表会
DESCRIPTION イベントの詳細説明 任意のテキスト。改行は \n または \N。HTMLやリッチテキストは非推奨。 DESCRIPTION:新製品の機能と価格について発表します。\n皆様のご来場をお待ちしております。
LOCATION イベントの場所 任意のテキスト。住所、部屋番号、オンライン会議URLなど。 LOCATION:東京ビッグサイト 東展示棟
ATTENDEE イベントの参加者 mailto:メールアドレス 形式。パラメータで役割(ROLE)、ステータス(PARTSTAT)、表示名(CN)、出欠確認の要否(RSVP)などを指定できます。 ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;CN=山田太郎:mailto:taro.yamada@example.com
ORGANIZER イベントの主催者 mailto:メールアドレス 形式。表示名(CN)も指定可能。 ORGANIZER;CN=イベント企画部:mailto:planner@example.com
RRULE イベントの繰り返しルール RFC 5545 で定義される複雑なルール文字列。FREQ (頻度)、UNTIL (終了日時)、COUNT (回数)、BYDAY (曜日指定) など。 RRULE:FREQ=WEEKLY;BYDAY=TU,TH;COUNT=10 (毎週火曜と木曜に10回繰り返す)
STATUS イベントの現在のステータス TENTATIVE (仮予約), CONFIRMED (確定), CANCELLED (キャンセル済み) など。 STATUS:CONFIRMED
CLASS イベントの公開区分 PUBLIC (公開), PRIVATE (非公開), CONFIDENTIAL (機密) など。 CLASS:PRIVATE
PRIORITY イベントの優先度 整数(0-9)。0が最も高い優先度。 PRIORITY:1
URL イベントに関連するウェブサイトのURL 完全なURL。 URL:https://example.com/event-info
LAST-MODIFIED イベントが最後に変更された日時 UTC形式 (YYYYMMDDTHHMMSSZ)。 LAST-MODIFIED:20250701T103000Z
TRANSP タイムライン上で時間をブロックするかどうか OPAQUE (ブロックする), TRANSPARENT (ブロックしない)。 TRANSP:OPAQUE
X-プレフィックス カスタムプロパティ 標準仕様にはないが、特定のアプリケーションが独自に使用するプロパティ。 X-GOOGLE-CONFERENCE:https://meet.google.com/abc-defg-hij (Google Meetのリンクなど)

まとめ

ファイル作成やURLでの連携になるのでスマホやwebなどプラットフォームに関わらず、連携できるのはとても便利で簡単ですね。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?