ICalendar

iCalendarとはPIMソフトなどで使われるスケジュールの標準フォーマット。5545}<WtXmlEndTag />で規定されている。「iCal」と略称される。

iCalendarをサポートしたソフトウェアを使うことで、他のユーザーに対してミーティングの時間や予定を電子メール経由で知らせることが容易になり、メールの受信者もミーティングの日時を簡単に提案できるようになる。

iCalendarは多くの製品に実装、サポートされている。そのデータは従来の電子メールで交換され、仕様上、送信プロトコルに依存しないこととなっている。たとえばWebDAVサーバやSyncMLを使って共有や編集が行える。HTTPプロトコルしか使用しないシンプルなWebサーバは、iCalendarフォーマットのスケジュールデータを配付するために使われる。hCalendarを使えばWebページにiCalendarデータを埋め込むことができる。

1. 基本仕様
-------

iCalendarの仕様はオープンテキストのアニク・ガングリーを議長とする、Internet Engineering Task Forceのカレンダー・スケジュール作業部会によって定められた。仕様の記述はロータス社のフランク・ドーソン、マイクロソフトのデリック・ストナーソンによる。iCalendarの仕様はインターネットメール・コンソーシアム  によって規定されたvCalendarに依拠している。

iCalendarデータのMIMEタイプは「text/calendar」である。

このMIMEタイプを持つカレンダー・スケジュールデータファイルには、拡張子「ics」が付けられる。

「free and busy time」を含むデータには拡張子「ftb」が付与される。

iCalendarデータはプレーンテキストで、デフォルトでUTF-8が使用される。別の文字コードを使うときは「charset」MIMEパラメータで指定することができる。各行は CR + LF  で改行され、各行75オクテットの文字数制限がある。次の行にまたぐ場合はスペース  またはタブ で行を始めることで、前行からの続きであることを明示できる。データ項目内での改行をしたい場合は「バックスラッシュ + N」でコーディングする。

1.1. コア・オブジェクト
--------------

iCalendarの先頭には「カレンダー・スケジュール・コア・オブジェクト」が位置する。これはカレンダーとスケジュール情報の集合体である。最小単位は単一のiCalendarオブジェクトであり、これらが複数まとめられている。1行目は必ず「BEGIN:VCALENDAR」で始まる必要があり、最後は「END:VCALENDAR」で終わる。この行の間には「icalbody」と呼ばれる主データ記述が入る。主データ部は一連のカレンダー・プロパティおよびカレンダー・コンポーネントからなり、前者は全体の属性を記述、後者は具体的な用事や日程、日時などのタイムスケジュールが記述され、アラームdate=2023年6月}}設定なども行われる。

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は汎用一意識別子  である。

2. イベント 
----------------

VEVENTコンポーネントはカレンダー上で予定されたイベントについて記述された属性の集合体である。これは具体的な用件だけでなく、「TRANSPARENT」といった記述も可能である。アラームを定義する場合、VEVENT内部にVALARMコンポーネントが含まれる。また開始時刻を定義するDTSTARTプロパティと終了時刻を定義するDTENDプロパティを持つ。

記念日や毎日行うことのように何度も繰り返されるイベントもVEVENTで記述される。標準ではDATE-TIMEに日時が記述されるが、DTSTARTプロパティが日時データを持ち、DTENDプロパティは持たない。

予定をキャンセルするときもUIDはそのまま保持され、他のコンポーネントには がセットされる。

3. ToDo 
---------------

ToDO、つまりアクションアイテムや宿題事項のことが記述されるコンポーネント。下記は2445}}による1998年4月15日のToDoについて記述したサンプルである。

BEGIN:VCALENDAR VERSION:2.0 PRODID:-//ABC Corporation//NONSGML My Product//EN BEGIN:VTODO DTSTAMP:19980130T134500Z SEQUENCE:2 UID:uid4@host1.com ORGANIZER:MAILTO:unclesam@us.gov ATTENDEE;PARTSTAT=ACCEPTED:MAILTO:jqpublic@example.com DUE:19980415T235959 STATUS:NEEDS-ACTION SUMMARY:Submit Income Taxes BEGIN:VALARM ACTION:AUDIO TRIGGER:19980403T120000 files/ssbanner.aud REPEAT:4 DURATION:PT1H END:VALARM END:VTODO END:VCALENDAR

4. ジャーナル 
-------------------

VJOURNALコンポーネントは日誌のように特定の日付にコメントを付けたり、作業内容や進捗の実績を記録するために利用される。実際のところ、iCalendarの実装でVJOURNALをサポートしているものはほとんど無い。プラムカナリーズ・チャープ・ソフトウェア社は、プロジェクトタスクの進捗管理ソリューションのデータフォーマットとしてVTODOとVJOURNALを採用している。また、KDEのシステム手帳、KOrganizerもVJOURNALをサポートしている。

下記は2445}}によるVJOURNALの記述サンプルである。

BEGIN:VCALENDAR VERSION:2.0 PRODID:-//ABC Corporation//NONSGML My Product//EN BEGIN:VJOURNAL DTSTAMP:19970324T120000Z UID:uid5@host1.com ORGANIZER:MAILTO:jsmith@example.com STATUS:DRAFT CLASS:PUBLIC CATEGORY:Project Report, XYZ, Weekly Meeting DESCRIPTION:Project xyz Review Meeting Minutesn Agendan1. Review of project version 1.0 requirements.n2. Definition of project processes.n3. Review of project schedule.n Participants: John Smith, Jane Doe, Jim Dandyn-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

5. フリー・ビジータイム 
-------------------------

VFREEBUSYコンポーネントはフリー・ビジータイム……つまり空いた時間と予定のある時間を定義する。以下は2445}}による予定時間情報を記述したサンプルである。特定のURLに置かれる場合、拡張子は「ifb」となる。

BEGIN:VCALENDAR VERSION:2.0 PRODID:-//RDU Software//NONSGML HandCal//EN BEGIN:VFREEBUSY ORGANIZER:MAILTO:jsmith@example.com 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

6. その他のコンポーネント
--------------

VTIMEZONE - 時間帯を定義
VALARM - アラーム設定を定義

7. スケジュール更新
-----------

予定されたスケジュールに変更がかかった場合、UIDフィールドを利用して改訂版の割り当てが行われる。最初に予定が設定されたときに一意の識別子  が生成され、スケジュールに変更がかかったときも同じUIDで発行される。UIDの例としては、「とある大学の第2学期131学級の5回目の打ち合わせ」なら「Y2007S2C131M5@example.com」という具合になる。

8. データ互換
--------

iCalendarフォーマットはカレンダーベースのデータを記述するために設計されており、即座にこのデータをもって何かを記述するわけではないので、実際の運用には他の規約が必要となることがある。

付属規約であるiTIPプロトコル  はカレンダーユーザー間でカレンダー・スケジュールデータを交換するための規約であり、最初に交換を提案した人が「オーガナイザ」と呼ばれることになる。この標準は「発行」「要求」「応答」「追加」「中止」「更新」「撤回」「撤回却下」といったメソッドを定義する。

他の付属規約にIMIPプロトコル  がある。これは電子メールでの通信にiTIPを実装する手順に関する仕様である。

3283}}の「インターネット・カレンダー・ガイド」ではiCalendarと関連規格との様々な関係が述べられている。

iCalendarフォーマットはカレンダーデータの相互運用もサポートしている。使用頻度の高い、基本的な特徴はiCalendar実装時にサポートされ、互換性も高いのだが、拡張機能のようなものになると途端に実装度合いは低下してしまう。ほとんどのベンダーは「JOURNAL」をサポートしていないし、予定の繰り返しやスケジュール反復も相互運用に不自然な問題を抱えている。VTODOプロパティも2004年時点での相互運用は出来ない状態である。

iCalendarはイスラエルやサウジアラビアなどで運用されている非グレゴリオ暦ではカレンダーへの記入もままならない。それらの暦をグレゴリオ暦に一対一で置き換えることも様々な要因で困難を極める。例えばユダヤ暦では13月というものが存在する場合があるし、天皇が変わるたびに変化する日本の元号も問題である

4324}}の「カレンダーアクセスプロトコル」は最初の汎用スケジューリングデータ標準として普及を試みたが、その複雑な仕様により、実装されることなく終わった。現在GroupDAVやCalDAVといったiCalendarベースの実用的な通信プロトコルが、クライアント・サーバ双方のパッケージソフトに現れ、カレンダーアクセス標準としての地位を確保せんとしている。

IETFカレンダー・スケジュール作業部会は、過去の標準を参照し、カレンダー・スケジューリングコンソーシアム  のような他の作業部会とも連携を取りながら、iCalendar標準の改定プロセスに入っている。2004年設立のCalconnectは専門委員会により実装及び相互運用試験を行う機関であり、あらゆる団体、個人も加入が可能である。

9. vCalendar 1.0
----------------

vCalendar1.0はインターネットメール・コンソーシアム  によって公表された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の両方に互換性をもつソフトウェアを開発するよう呼びかけている。

10. ライブラリ
---------

iCalendarデータファイル生成のため、様々なプログラミング用ライブラリが公開されている。

[1] - PHP
[2] - Python
[3] - Java

11. 参考文献
--------

12. 関連項目
--------

カレンダー
暦
vCard
Personal Information Manager
hCalendar：マイクロフォーマットでのイベント情報表現
xCal：iCalendarのXML準拠表現
iTIP
iMIP
GroupDAV
CalDAV
SyncML

13. 外部リンク
---------

5545}} Internet Calendaring and Scheduling Core Object Specification