iCalendar (アイカレンダー )とはPIM ソフトなどで使われるスケジュールの標準フォーマット。RFC 5545 [ 1] (旧版 RFC 2445 [ 2] )で規定されている。「iCal 」と略称される。
iCalendarをサポートしたソフトウェアを使うことで、他のユーザーに対してミーティングの時間や予定を電子メール 経由で知らせることが容易になり、メールの受信者もミーティングの日時を簡単に提案できるようになる。
iCalendarは多くの製品に実装、サポートされている。そのデータは従来の電子メールで交換され、仕様上、送信プロトコル に依存しないこととなっている。たとえばWebDAV サーバやSyncML を使って共有や編集が行える。HTTP プロトコルしか使用しないシンプルなWebサーバ は、iCalendarフォーマットのスケジュールデータを配付するために使われる。hCalendar を使えばWebページにiCalendarデータを埋め込むことができる。
基本仕様
iCalendarの仕様はオープンテキスト のアニク・ガングリーを議長とする、Internet Engineering Task Force のカレンダー・スケジュール作業部会によって定められた。仕様の記述はロータス社 のフランク・ドーソン、マイクロソフト のデリック・ストナーソンによる。iCalendarの仕様はインターネットメール・コンソーシアム (英語版 ) (IMC) によって規定されたvCalendar に依拠している。
iCalendarデータのMIMEタイプ は「text/calendar」である。
このMIMEタイプを持つカレンダー・スケジュールデータファイルには、拡張子 「ics」が付けられる。(Mac OS ではタイプコード「iCal」)
「free and busy time」(空いた時間と予定のある時間)を含むデータには拡張子「ftb」が付与される。(Mac OSではタイプコード「iFBf」)
iCalendarデータはプレーンテキスト で、デフォルト でUTF-8 が使用される。別の文字コード を使うときは「charset」MIMEパラメータで指定することができる。各行は CR + LF (16進:0D0A) で改行 され、各行75オクテット の文字数制限がある。次の行にまたぐ場合はスペース (16進:20) またはタブ (16進:09)で行を始めることで、前行からの続きであることを明示できる。データ項目内での改行をしたい場合は「バックスラッシュ + N」(UTF-8で5C6Eまたは5C4E、\ n)でコーディングする。
コア・オブジェクト
iCalendarの先頭には「カレンダー・スケジュール・コア・オブジェクト」が位置する。これはカレンダーとスケジュール情報の集合体である。最小単位は単一のiCalendarオブジェクトであり、これらが複数まとめられている。1行目は必ず「BEGIN:VCALENDAR」で始まる必要があり、最後は「END:VCALENDAR」で終わる。この行の間には「icalbody」と呼ばれる主データ記述が入る。主データ部は一連のカレンダー・プロパティ およびカレンダー・コンポーネント からなり、前者は全体の属性を記述、後者は具体的な用事や日程、日時などのタイムスケジュールが記述され、アラーム [要曖昧さ回避 ] 設定なども行われる。
RFC 2445 によるシンプルなiCalendarオブジェクトのサンプルを以下に示す。内容は1997年 7月14日 -15日 のパリ祭 に関するものである。
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
DTSTART:19970714T170000Z
DTEND:19970715T035959Z
SUMMARY:Bastille Day Party
END:VEVENT
END:VCALENDAR
この標準仕様には他にも以下に述べるような様々なコンポーネントが定義されている。Apple iCal やマイクロソフトのOutlook では次のような追加記述子が使われる。
X-WR-CALNAME:Revolution Parties
X-WR-CALDESC:Celebrations of various revolutionary activities.
X-WR-RELCALID:3E26604A-50F4-4449-8B3E-E4F4932D05B5
X-WR-TIMEZONE:US/Pacific
X-WR-RELCALIDは汎用一意識別子 (UID) である。
イベント (VEVENT)
VEVENTコンポーネントはカレンダー上で予定されたイベントについて記述された属性の集合体である。これは具体的な用件だけでなく、「TRANSPARENT」(白紙)といった記述も可能である。アラームを定義する場合、VEVENT内部にVALARMコンポーネントが含まれる。また開始時刻を定義するDTSTARTプロパティと終了時刻を定義するDTENDプロパティを持つ。
記念日や毎日行うことのように何度も繰り返されるイベントもVEVENTで記述される。標準ではDATE-TIMEに日時が記述されるが、DTSTARTプロパティが日時データを持ち、DTENDプロパティは持たない。
予定をキャンセルするときもUIDはそのまま保持され、他のコンポーネントには <SEQUENCE:更新番号>がセットされる。
ToDo (VTODO)
ToDo、つまりアクションアイテム や宿題事項などが記述されるコンポーネント。下記はRFC 2445 による1998年 4月15日 のToDoについて記述したサンプルである。
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//ABC Corporation//NONSGML My Product//EN
BEGIN:VTODO
DTSTAMP:19980130T134500Z
SEQUENCE:2
UID:[email protected]
ORGANIZER:MAILTO:[email protected]
ATTENDEE;PARTSTAT=ACCEPTED:MAILTO:[email protected]
DUE:19980415T235959
STATUS:NEEDS-ACTION
SUMMARY:Submit Income Taxes
BEGIN:VALARM
ACTION:AUDIO
TRIGGER:19980403T120000
ATTACH;FMTTYPE=audio/basic:http://example.com/pub/audio-
files/ssbanner.aud
REPEAT:4
DURATION:PT1H
END:VALARM
END:VTODO
END:VCALENDAR
ジャーナル (VJOURNAL)
VJOURNALコンポーネントは日誌のように特定の日付にコメントを付けたり、作業内容や進捗の実績を記録するために利用される。実際のところ、iCalendarの実装でVJOURNALをサポートしているものはほとんど無い。プラムカナリーズ・チャープ・ソフトウェア社は、プロジェクトタスクの進捗管理ソリューションのデータフォーマットとしてVTODOとVJOURNALを採用している。また、KDE のシステム手帳 、KOrganizer もVJOURNALをサポートしている。
下記はRFC 2445 によるVJOURNALの記述サンプルである。
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//ABC Corporation//NONSGML My Product//EN
BEGIN:VJOURNAL
DTSTAMP:19970324T120000Z
UID:[email protected]
ORGANIZER:MAILTO:[email protected]
STATUS:DRAFT
CLASS:PUBLIC
CATEGORY:Project Report, XYZ, Weekly Meeting
DESCRIPTION:Project xyz Review Meeting Minutes\ n
Agenda\ n1. Review of project version 1.0 requirements.\ n2.
Definition
of project processes.\ n3. Review of project schedule.\ n
Participants: John Smith, Jane Doe, Jim Dandy\ n-It was
decided that the requirements need to be signed off by
product marketing.\ n-Project processes were accepted.\ n
-Project schedule needs to account for scheduled holidays
and employee vacation time. Check with HR for specific
dates.\ n-New schedule will be distributed by Friday.\ n-
Next weeks meeting is cancelled. No meeting until 3/23.
END:VJOURNAL
END:VCALENDAR
フリー・ビジータイム (VFREEBUSY)
VFREEBUSYコンポーネントはフリー・ビジータイム……つまり空いた時間と予定のある時間を定義する。以下はRFC 2445 による予定時間情報を記述したサンプルである。特定のURL に置かれる場合、拡張子は「ifb」となる。
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//RDU Software//NONSGML HandCal//EN
BEGIN:VFREEBUSY
ORGANIZER:MAILTO:[email protected]
DTSTART:19980313T141711Z
DTEND:19980410T141711Z
FREEBUSY:19980314T233000Z/19980315T003000Z
FREEBUSY:19980316T153000Z/19980316T163000Z
FREEBUSY:19980318T030000Z/19980318T040000Z
URL:http://www.host.com/calendar/busytime/jsmith.ifb
END:VFREEBUSY
END:VCALENDAR
その他のコンポーネント
VTIMEZONE - 等時帯 を定義
VALARM - アラーム設定を定義
スケジュール更新
予定されたスケジュールに変更がかかった場合、UIDフィールドを利用して改訂版の割り当てが行われる。最初に予定が設定されたときに一意の識別子 (UID) が生成され、スケジュールに変更がかかったときも同じUIDで発行される。UIDの例としては、「とある大学の第2学期131学級の5回目の打ち合わせ」なら「[email protected] 」という具合になる。
データ互換
iCalendarフォーマットはカレンダーベースのデータを記述するために設計されており、即座にこのデータをもって何かを記述するわけではないので、実際の運用には他の規約が必要となることがある。
付属規約であるiTIP プロトコル (RFC 5546 ) [ 3] はカレンダーユーザー間でカレンダー・スケジュールデータを交換するための規約であり、最初に交換を提案した人が「オーガナイザ」と呼ばれることになる。この標準は「発行」「要求」「応答」「追加」「中止」「更新」「撤回」「撤回却下」といったメソッド を定義する。
他の付属規約にIMIP プロトコル (RFC 6047 ) [ 4] がある。これは電子メールでの通信にiTIPを実装する手順に関する仕様である。
RFC 3283 の「インターネット・カレンダー・ガイド」[ 5] ではiCalendarと関連規格との様々な関係が述べられている。
iCalendarフォーマットはカレンダーデータの相互運用もサポートしている。使用頻度の高い、基本的な特徴はiCalendar実装時にサポートされ、互換性も高いのだが、拡張機能のようなものになると途端に実装度合いは低下してしまう。ほとんどのベンダー は「JOURNAL」をサポートしていないし、予定の繰り返しやスケジュール反復も相互運用に不自然な問題を抱えている。VTODOプロパティも2004年 時点での相互運用は出来ない状態である。
iCalendarはイスラエル やサウジアラビア などで運用されている非グレゴリオ暦ではカレンダーへの記入もままならない。それらの暦をグレゴリオ暦 に一対一で置き換えることも様々な要因で困難を極める。例えばユダヤ暦 では13月というものが存在する場合があるし、天皇 が変わるたびに変化する日本の元号 も問題である
RFC 4324 の「カレンダーアクセスプロトコル」[ 6] は最初の汎用スケジューリングデータ標準として普及を試みたが、その複雑な仕様により、実装されることなく終わった。現在GroupDAV やCalDAV といったiCalendarベースの実用的な通信プロトコルが、クライアント ・サーバ 双方のパッケージソフト に現れ、カレンダーアクセス標準としての地位を確保せんとしている。
IETFカレンダー・スケジュール作業部会は、過去の標準を参照し、カレンダー・スケジューリングコンソーシアム (Calconnect ) のような他の作業部会とも連携を取りながら、iCalendar標準の改定プロセスに入っている。2004年設立のCalconnectは専門委員会により実装及び相互運用試験を行う機関であり、あらゆる団体、個人も加入が可能である。
vCalendar 1.0
vCalendar1.0はインターネットメール・コンソーシアム (IMC) によって公表されたiCalendarフォーマットの元となった規格である。以下がその例。
BEGIN:VCALENDAR
VERSION:1.0
BEGIN:VEVENT
CATEGORIES:MEETING
STATUS:TENTATIVE
DTSTART:19960401T033000Z
DTEND:19960401T043000Z
SUMMARY:Your Proposal Review
DESCRIPTION:Steve and John to review newest proposal material
CLASS:PRIVATE
END:VEVENT
END:VCALENDAR
IMCはiCalendarリリース後、ベンダーがこれらのオープンフォーマットを採用して、vCalendar1.0とiCalendarの両方に互換性をもつソフトウェアを開発するよう呼びかけている。
ライブラリ
iCalendarデータファイル生成のため、様々なプログラミング用ライブラリ が公開されている。
参考文献
^ B. Desruisseaux, Ed. (2009年9月). “RFC [https://datatracker.ietf.org/doc/html/rfc5545 5545, Internet Calendaring and Scheduling Core Object Specification (iCalendar)]” (英語). 2011年11月3日 閲覧。
^ F. Dawson, D. Stenerson (1998年11月). “RFC [https://datatracker.ietf.org/doc/html/rfc2445 2445, Internet Calendaring and Scheduling Core Object Specification (iCalendar)]” (英語). 2011年11月3日 閲覧。
^ C. Daboo, Ed. (2009年12月). “RFC [https://datatracker.ietf.org/doc/html/rfc5546 5546, iCalendar Transport-Independent Interoperability Protocol (iTIP)]” (英語). 2011年11月3日 閲覧。
^ A. Melnikov, Ed. (2010年12月). “RFC [https://datatracker.ietf.org/doc/html/rfc6047 6047 , iCalendar Message-Based Interoperability Protocol (iMIP)]” (英語). 2011年11月3日 閲覧。
^ B. Mahoney, G. Babics, A. Taler (2002年6月). “RFC [https://datatracker.ietf.org/doc/html/rfc3283 3283 , Guide to Internet Calendaring]” (英語). 2011年11月3日 閲覧。
^ D. Royer, G. Babics, S. Mansour (2005年12月). “RFC [https://datatracker.ietf.org/doc/html/rfc4324 4324 , Calendar Access Protocol (CAP)]” (英語). 2011年11月3日 閲覧。
関連項目
外部リンク
RFC 5545 Internet Calendaring and Scheduling Core Object Specification (iCalendar)