いつまでたってもゴールが見えないのでCalendar Plugin for CakePHPをアルファリリースした

いつまでたってもゴールが見えないのでCalendar Plugin for CakePHPをアルファリリースした。

https://github.com/k1LoW/calendar

Calendar Pluginって何?

CakePHPでカレンダー機能を実装する時に便利になったらいいなと思って『作り始めた』プラグイン。
大きな特徴としてiCalendar形式を意識したつくりになっていること。

iCalendar形式についてはRFC2445を参照。英語と複雑な仕様で頭が痛くなるので必見。
MacのiCalやGoogle Calendarが採用している形式といったらわかりやすいかも。

Calendar Pluginはイベント(1つ1つ予定のこと。VEVENT)をDBに保存するのだけれども、そのスキーマが完全にiCalendar形式を意識している。
どんなPluginかわからないと思ったので、CakeDCにならってサンプルアプリケーションも作ってみたので詳しくはそちらで「感じて」下さい。
今のところVEVENTしか実装しはじめていないし、VEVENTしか実装しないつもり。

https://github.com/k1LoW/Sample-Calendar-Application

なんでアルファリリース?

まだ、納得できるところまで実装できていないから。
というか、iCalendarの仕様が複雑すぎてどこがゴールか分からないし、どこまで正しいか分からないから。
せめてGoogle Calendarができているところまでは実装したい。
あとEXDATE属性が実装できればOKなはず。

どうやってテストしているの?

基本的な機能はRFCを読みつつテストケースを作成して実装。
ただ、属性の条件が複雑すぎて読み取れないので、
あとはひたすらRFCに載っているサンプルをテストケースに落とし込んで一つ一つクリアしていっている。
さらに気になるところは自分でテストケースを追加して実装していっている。

注目すべきはCalendar PluginはRFC2445を読みきっていない人間が作っている点。
RFCから作ったテストケース以外は、「テストケース自体が間違っている」ことがありそうで怖い。

その他やりたいこと

iCalendar形式のファイルのインポート/エクスポート機能

iCalendar形式のサブセットになっているということは、
iCalendar形式のファイルのインポートやエクスポートの実装が容易ということになる。
これはVEVENTの実装が落ち着いたら実装する予定

祝日などの日付に対するフィルタ機構

表示時に土日や祝日の属性を自由に与えられるようなフィルタ機構を実装したい

エクストラな属性を付与できるフック機構

iCalendar形式はおそらく「個人のスケジュール」を意識した作りになっているので、
「みんなのスケジュール」や「複数のスケジュール」を管理するためにはもう一工夫が必要。
そういうイベントに付与されるエクストラな仕様に柔軟に対応できる機構を作りたい。
Filebinderで実装したような仮想フィールドみたいなことができればいいかな。

最後に

このPluginはPHPMatsuri2011で生まれました。
(vevent_fixture.phpにPHPMatsuri2011のイベントが登録されているのはそのせい)
また、ハック大賞次点をいただくことができました!感謝!
あのPHPMatsuriのストイックなハック環境は楽しくて最高ですね!

このPluginがこのまま終わらず、
実用的なものになるように地道に開発を続けていきたいと思います!