LoginSignup
12
12

More than 3 years have passed since last update.

【iCal 形式】iCalendar について勉強してみた

Posted at

API を利用している中で、なんとなーくで利用していた iCal 形式の記述。
先輩方の言う通りに記述をいじり、必要なときに必要な箇所だけ修正してきましたが・・・

涼しい季節になりましたし、勉強し直す良いチャンス!
と、いうことで調べてみることにしました。(*'▽')

iCal 形式とは

iCal 形式は、正式には iCalendar 形式と言います。
カレンダーアプリ、または電子メールアプリなどで、予定を読み込んだり書き込んだりする際に用いられます。
主な例としては、Google Calendar、Apple Calendar、IBM Lotus Notes、Yahoo! Calendar、LINEWORKS Calendar などなど。

拡張子 .ical .ics .icalendar

iCal 形式の記述をファイルとして保存したのが、拡張子が .ical .ics .icalendar のファイルです。

各サービスの API ではコード内に直接記述することが多いですが、
アプリのインターフェイスでは iCal ファイルを読み込ませることが多いですね。

MINE タイプは text/calendar

iCal ファイルの中身はテキストデータなので、メモ帳や VSC などのテキストエディタで編集することができます。
保存するときに拡張子を .ical .ics .icalendar のどれかにすれば OK

そう言えば MINE タイプもなんとなーくのうろ覚えだったので、あらためて調べてみました。

wikipedia から引用:メディアタイプは、ファイルやインターネット上で転送されるコンテンツの形式を表現する識別子である。MIMEタイプや要素タイプ (Content type)とも表記される。text/plainのように、スラッシュで区切る表記が特徴的である。

まぁ、何のファイルだかわかりやすいように、表記のお約束があるってことですね( ゚Д゚)

ical 形式の記述のしかた

iCal 形式にはカレンダー情報を記述します。
予定の開始時刻、終了時刻、タイトル、要約などの情報を記述していきます。

BEGIN:VCALENDAR
VERSION:2.0
PRODID:kunihiros iCalender
BEGIN:VEVENT
DTSTART:20201123T000000Z
DTEND:20201123T235959Z
SUMMARY:My Birthday Party
END:VEVENT
END:VCALENDAR

基本的にはこんな感じ。

BEGIN:VCALENDAR : ここから ical 形式の記述が始まるよってお約束。HTML の みたいなものですね。
VERSION : iCal 形式のバージョン。RFC-2445 規定が 2.0 らしいので 2.0 と書いとけばいいみたいです。
PRODID : ファイル作成者情報。
BEGIN:VEVENT : ここから予定の詳細情報が始まるよってお約束。
DTSTART : 予定の開始日時。例は2020年11月23日0時0分0秒。
DTEND : 予定の終了日時。例は2020年11月23日23時59分59秒。
SUMMARY : 予定のタイトルです。祝われたい。全力で。
END:VEVENT : ここで予定の詳細情報が終わるよってお約束。
END:VCALENDAR : ここで ical 形式の記述が終わるよってお約束。

タイムゾーンの設定

実は、上の記述例は協定世界時 (UTC) での記述となるため、日本との時差が 9 時間発生しています。
このブログを読んでくださっている方たちは(おそらく)日本でお仕事されている方たちだと思いますので、タイムゾーンの設定をして日本時間に合わせます。

DTSTART;TZID=Asia/Tokyo:20201123T000000
DTEND;TZID=Asia/Tokyo:20201123T235959

あとはこのファイルを .ical で保存すれば完成!ヾ(´∀`)ノ

API で iCal 形式のデータを送信するときにハマったこと

カレンダー API の Request をしたときに引っかかったんですが、コードで iCal 形式のデータを記述するときは改行コード( \r\n )が必要でした。

さっきの記述例を直すとこんな感じですね。

BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:kunihiros iCalender\r\nBEGIN:VEVENT
DTSTART;TZID=Asia/Tokyo:20201123T000000\r\nDTEND;TZID=Asia/Tokyo:20201123T235959\r\nSUMMARY:My Birthday Party\r\nEND:VEVENT\r\nEND:VCALENDAR

横長で見辛いですよね(; ・`д・´)

プログラムに組み込むときは変数から自動生成する方が良さそう。string だし。

おわりに

ここまでお付き合いいただきありがとうございました。

アプリと google カレンダーを同期させたりするのに、ちょくちょく出てきたんですよね。
この、iCalender さん。ようやくちょっとスッキリしました!

読んでくれた方が同じようにスッキリしていただけたら幸いです。

せっかく iCal 形式の理解も深まったし、次は API で iCal 使う記事でも書こうかなー。

ではまた!(^^)/

参考にさせていただきましたm(_ _)m

ウィキペディア(Wikipedia)iCalendar
カレンダーに使われるiCalendar形式について part1

12
12
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
12
12