iCalのrruleを必要な分だけ抜き出して使う

システム上でスケジュール情報を登録・保持するようにしたいが、一から考えるのは面倒、特に繰り返し条件が。
なのでiCalのrruleの仕様をそのまま踏襲することにするが、日本語情報がほとんど無い。
一番参考になったのがここ。
CalDAV(iCalendar)のrrule(繰り返し設定)一覧まとめ
FREQを基点にしてまとめ直す。

FREQ 繰り返し条件 DAILY WEEKLY MONTHLY YEARLY
UNTIL 終了日
BYMONTHDAY 月の日付指定 × ×
BYDAY 曜日指定 ×
INTERVAL 間隔
BYMONTH 月指定 × × ×
COUNT 繰り返し回数

ここから機能を絞っていく。
まず前提として、開始日・終了日は必須で保持する。
無期限の予定とかほぼ入れない。特に仕事では大抵年末や年度末で期間を切る。

  • FREQ:DAILY

    • そもそも要る? 開始 - 終了日を指定して連続させればいい
    • 仕事上のスケジュールで2日おき/3日おき(INTERVAL)とかお目にかからない
    • 大体は毎週 x曜日とかになる
  • FREQ:YEARLY

    • たぶん要らない。毎年この日、という指定はあれば便利だと思うけど
    • 毎年予定は忘れないようにするために使うことが多い気がする
    • 必要なら個人のGoogleカレンダーに入れてもらう、今回のシステムでは必要性がない
    • 関連してBYMONTHも不要になる
  • UNTIL

    • 要らない。終了日で表現すればいい、二重に持つのはややこしい
  • COUNT

    • 要らない。仮に「毎週火曜 全5回」とかの予定があっても、普通は最終日を意識するし、終了日を指定すればいい

というわけで棚卸しした結果こうなる。

FREQ 繰り返し条件 WEEKLY MONTHLY
BYMONTHDAY 月の日付指定 ×
BYDAY 曜日指定 ×
INTERVAL 間隔
  • 毎日 (開始 - 終了日の範囲指定)
  • 毎週 x曜日、2(3, 4・・・)週ごとの x曜日
  • 毎月 x日、2(3, 4・・・)ヶ月ごとの x日

これだけ表現できれば大抵の予定はカバーできるだろう。