LoginSignup
10
13

More than 3 years have passed since last update.

カレンダーに使われるiCalendar形式について part2

Posted at

この記事はpart1の続きです。
まだご覧になってない方は先にご覧いただくとわかりやすいかと思います。

さて、part1ではicsファイルの最低限の機能について説明しました。
今回はアラーム機能についてまとめたいと思います。

アラームの例

Googleカレンダーで以下の様な適当な予定を追加してみます。
アラームの部分は赤い枠で囲った部分になります。

スクリーンショット 2019-11-23 22.07.12.png

この予定をicsファイルで開くと以下の様になります。

BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VEVENT
DTSTART;VALUE=DATE:20191125
DTEND;VALUE=DATE:20191126
DTSTAMP:20191123T131055Z
CREATED:20191123T131041Z
DESCRIPTION:
LAST-MODIFIED:20191123T131041Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:予定
TRANSP:TRANSPARENT
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:This is an event reminder
TRIGGER:-P0DT15H0M0S
END:VALARM
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:This is an event reminder
TRIGGER:-P0DT3H0M0S
END:VALARM
END:VEVENT
END:VCALENDAR

part1をご覧になった方はなんとなく雰囲気がわかると思います。
今回のメインとなるアラームの部分は、VEVENT中の下側にある以下の様な記述です。

BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:This is an event reminder
TRIGGER:-P0DT15H0M0S
END:VALARM
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:This is an event reminder
TRIGGER:-P0DT3H0M0S
END:VALARM

見やすい様にインデントをします(実際にはこれでは読み込むことができません)

BEGIN:VALARM
  ACTION:DISPLAY
  DESCRIPTION:This is an event reminder
  TRIGGER:-P0DT15H0M0S
END:VALARM

BEGIN:VALARM
  ACTION:DISPLAY
  DESCRIPTION:This is an event reminder
  TRIGGER:-P0DT3H0M0S
END:VALARM

このVALARMに囲まれた部分がアラームについて定義している部分です。
ここではVALARMに囲まれた部分が二つあります。
先ほどの写真を見てもらうと、通知を二回する様にしているので、VALARMも二つになっています。
複数のアラームを設定したい時にはその数だけ、付け足せば良いということです。

さて、それではVALARMの内容についてみていきます。

VALARMについて

先ほどのコードを見ると、以下の三つのプロパティがあることがわかります。

  1. ACTION
  2. DESCRIPTION
  3. TRIGGER

このうち、ACTIONTRIGGERは必須項目です。
DESCRIPTIONを含め、その他のいくつかのプロパティは通知の方法によって要不要が変わり、通知の方法はACTIONによって定義されます。

ACTIONプロパティについて

ACTIONは先述の様に通知の形式を定義しています。
ACTIONで定義できる通知の方法には、AUDIODISPLAYEMAILPROCEDUREがあります。
それぞれで使用可能なプロパティは以下の様になっています。

  • AUDIO(音で通知をする機能に使われる)
    • ATTACH(任意) ←再生するサウンドの種類を選択
  • DISPLAY(通知を表示する機能に使われる)
    • DESCRIPTION(必須) ←通知に表示するメッセージ
  • EMAIL(メールで通知をする機能に使われる)
    • DESCRIPTION(必須) ←メール本文
    • SUMMARY(必須) ←メールタイトル
    • ATTENDEE(必須) ←出席者
    • ATTACH(任意)
  • PROCEDURE(よくわかりませんでした)
    • ATTACH(必須)

また、全てに共通するプロパティにDURATIONREPEATがあり、文字通り、通知の繰り返しとその間隔を定義します。
この二つは任意のプロパティですが、一方を記述すると他方も記述しなくてはなりません。

おそらくこれらの機能は、使用するカレンダーアプリに依存する機能だと思うので対応状況を調べてみる必要がありそうです(調べきれず、すみません:bow_tone1:)

TRIGGERプロパティについて

さて、もう一つの必須プロパティであるTRIGGERについて説明します。
このプロパティは通知をするタイミングを定義しており、プロパティの値として通知する日付の絶対値を指定するか、イベントとの相対値を入力するかの二通りがあります。

通知する日付の絶対値を指定する方法

まず、通知する日付の絶対値を指定するやり方です。
これはpart1DTSTARTDTENDで説明した時の表記と同じです。
すなわち、19970714T170000Z(=「UTCで1997年7月14日17時00分00秒」)のように指定していきます。

プロパティにセットするには、VALUEを用いて以下の様に記述します。

TRIGGER;VALUE=DATE-TIME:19970714T170000Z

イベントとの相対値を入力する方法

さて、次にイベントとの相対値を入力するやり方ですが、例えばこの様に指定します。

TRIGGER:-P2DT2H0M0S

これは、イベント開始時間から、2日と2時間前の日時を表しています。

書き方の決まりは(おそらく)以下の様になっています。

  • D(日)、H(時間)、M(分)、S(秒)といった時間を表す記号を用いる
  • (数値)(記号)の順に指定する(例;2D → 2日)
  • 先頭に-Pをつけると、より前の日時を指定、Pをつけると、より後の日時を指定する
  • 日付と時間の間にはTを入れる

いくつか例を挙げてみます

TRIGGER:-P1D10H ←イベント開始の1日と10時間前
TRIGGER:-P1D ←イベント開始の1日前
TRIGGER:PT2H ←イベント開始の2時間後

なお、イベント終了時刻からの相対値を入力したい場合は以下の様に記述します。
(ENDをSTARTにすることで開始時刻にできますが、それなら先述の表記の方が楽だと思います)

TRIGGER;RELATED=END:-P1D ←イベント終了時刻の1日前

終わりに

今回は仕様書を読んでも(英文が)よくわからないところが多かったので、説明に誤りや抜けがあると思います。
ですが、とりあえず記述した機能については動作確認(Macの標準カレンダー)もしているのでおそらく間違い無いと思います。

補足や修正があればコメントで教えていただけると嬉しいです:sweat:

参考にした記事

RFC-2445

10
13
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
10
13