イントラネットでのスケジュール公開に適した3種類のWebカレンダ

 本稿ではWebインタフェースにて操作するカレンダ情報の表示と管理を目的とした、 WebCalendar VCalendar CaLogic という3つのプロジェクトを解説する。これらのプロジェクト間で共通しているのは、LAMPサーバにて動作することおよび、カレンダへのイベント登録をWeb形態のインタフェースにて扱うという点だ。

 こうしたカレンダ関連の試験をする場合、私はicalshare.comにて一般公開されているiCalendarファイルの中からUS HolidaysUK Holidaysを使うようにしている。また今回のインストールとテストに用いた環境は64ビットFedora 9マシンである。

WebCalendar

 WebCalendarはPHPで記述されており、バックエンドにて使用するデータベースエンジンは複数のタイプに対応している。またシングルユーザだけでなくマルチユーザに対応したセットアップが可能となっている関係上、イベント予定や変更発生のメール通知および、1つのビューに複数のカレンダをオーバーレイするといった処理(異なるユーザの登録したイベント情報の合成など)ができるようになっている。

今回、WebCalendarバージョン1.2を手元のFedoraにソースからインストールするための作業として下記のコマンド群を実行した。他のディストリビューションの場合は、Apacheのconf.dディレクトリのパスなどが異なってくるかもしれない。

# mkdir -p /usr/local/php
# cd /usr/local/php
# tar xzvf /.../WebCalendar-1.2.0.tar.gz
# ln -s WebCalendar-1.2.0 WebCalendar
# vi /etc/httpd/conf.d/WebCalendar.conf

Alias /webcal /usr/local/php/WebCalendar

<Location /webcal>
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    Allow from ::1
</Location>

# service httpd reload
# cd /usr/local/php/WebCalendar
# chgrp apache includes
# chmod g+w    includes
# chmod +s     includes

 以上の準備が終了したら、各自のWebブラウザからhttp://localhost/webcalにアクセスする。これから行うWebインストールの手順は4段階に分かれているが、最終的にWebCalendarのインタフェースに管理者ユーザとしてログインできれば、ここでの作業は終了だ。まずステップ1の作業として、settings.phpパスワードの設定をした後、そのパスワードを用いたログインをする。ステップ2では、WebCalendarで使用するデータベースの種類と位置を指定する。ステップ3では、データベーススキーマのインストール用ボタンが提示され、ステップ4ではサーバURLの指定が求められる(ここでは現在のサイトへのアクセス方式を基にした推定値が提示される)。その際には各自の希望する認証方式が確認されるが、同時にデフォルトの管理者アカウント作成を行うかも質問される。後者のオプションを選択した場合、最初はデフォルトの管理者パスワードでログインすることになるが、その後で独自のパスワードに変更しておくべきだろう。使用可能な認証方式は複数存在し、WebCalendar自身にデータベースのユーザ名とパスワード検索を行わせる方式の他、HTTP-auth、NIS、LDAP、IMAPを利用することもできる。

webcal1_thumb.png
WebCalendar

 WebCalendarで行うビューのユーザ定義では、カレンダの表示スパン(日間、週間、月間)とレイアウト(水平、垂直、タイムバー)の組み合わせおよび、当該ビューにてどのユーザのカレンダを表示させるかを指定する。

 別ユーザの作成したカレンダは、レイヤの1つとして追加できる。各レイヤにはそれぞれ異なるカラー指定が行え、また複数レイヤに共通するイベントの重複を解消した単一表示をさせることも可能だ。例えばアメリカとイギリス用のカレンダの休日表示では、クリスマスなど多くの行事が重複しているはずだが、これらをそれぞれ1つのイベントにまとめられるのである。

 WebCalendarにおけるリモートカレンダの追加はURLおよびID指定で行えるが、それだけでなくリモートカレンダの先頭名と末尾名での指定という方式も使える。おそらくリモートカレンダ機能は、別ユーザのカレンダをレイヤの1つとして追加する機能のコードを基にしているのであろう。

 WebCalendarのシステム管理者ガイドには“two-way authenticated iCalendar(ics)sync”という機能のサポートについて言及されている。ただしWebインタフェース上に該当する機能は提示されていなかったので、私はicalclient.phpファイルにて利用可能なのだと推測したのだが、このファイルにはアルファ版段階のコードである旨の念入りな警告が付けられていた。実際、WebインタフェースのPreferencesにおいてこの機能を有効化したところ、http://localhost/webcal/icalclient.phpがMozilla Sunbirdにてリモートカレンダの1つとして認識されるようになり、イベントの追加と削除とキャンセル機能にアクセス可能となってくれたが、イベントの削除は正常に処理されなかった。この件に関してはicalclient.phpファイル中に記されていた、イベントの取り消しは削除ではなくキャンセルを使用する必要があるという警告の通りである。その他にしばしば遭遇したのが、Sunbird側から実行した変更結果がWebインタフェースに反映されるまで数秒を要するという現象だ。またicalclient.phpを使用した場合、Sunbirdでの編集をしなかったイベントがWebCalendarにて重複するという現象も散発するようである。これらの現象については、アルファ版コードである旨の警告は未だ有効ということだろう。インストールとセットアップの詳細についてはicalclient.phpファイルのヘッダ部にあるコメントを参照して頂きたい。

 このようにWebCalendarは、単一画面上における異なるモードでの複数カレンダの表示を、ビューとレイヤを組み合わせる方式によりサポートしている。また各自のカレンダを外部から編集する方式として、Sunbirdなどの専用カレンダアプリケーションを利用できるようにしたのは、賢明な選択であったと評していいだろう。可能であれば、先に触れたicalclient.phpにてイベントが重複表示されるといった問題を、次のリリースにて修正してもらいたいところだ。なお今後の対応予定にはSyncMLのサポートも取り上げられている。

VCalendar

 VCalendarの使用にはPHP 4.1以降とMySQL 4.x以降とが必要となる。Windowsユーザの場合はVCalendarのASPおよび.Net対応バージョンを使用すればいい。VCalendarの特長は、本稿で紹介する3つのプロジェクトの中で最も見栄えのするカレンダ表示ができることだ。

 今回私は、VCalendarのバージョン1.1.5にパッチ1.1.5.3を適用したものを使用した。なおこのパッチは2006年中盤に公開済みのものだが、何故か現在に至るまで同パッチを取り込んだバージョンはリリースされていない。VCalendarをインストールする際の、手作業における事前準備は下記のようになる。

# cd /var/www/html/
# unzip /.../vcalendar_php_1.1.5.zip
# cd vcalendar
# unzip /.../patch_PHP_1.1.5.3.zip
Archive:  /.../patch_PHP_1.1.5.3.zip
replace index.php? [y]es, [n]o, [A]ll, [N]one, [r]ename: A
...
# chown apache.apache Common.php temp images/categories
# chmod g+w           Common.php temp images/categories
# chmod +s temp

# mysql -p
mysql> create database vcalendar;
mysql> GRANT ALL ON vcalendar.* TO vcalendar@'localhost' IDENTIFIED BY 'vcalendar';
mysql> FLUSH PRIVILEGES;

 先のWebCalendarと同様、こうした準備が整ったらWebブラウザからhttp://localhost/vcalendarにアクセスする。ここでのインストール手順は実質的に2つのステップで済むようになっており、ステップ3のページで表示されるのは一種の警告メッセージだけである。最初のステップ1で行うのは、ファイルとディレクトリのパーミッション関連のチェックだが、先のコマンド群を実行しておけば特に問題は生じないはずだ。ステップ2で行うのは、データベース接続関連の設定であり、ここではオプション扱いの処理としてデータベーススキーマの再生成も行える。最後のステップ3は前述したように、インストール用ファイルは完全に消去しておくように、という単なる警告の確認にすぎない。

webcal2_thumb.png
VCalendar

 インストール後のVCalendarに対する最初の試験として、Holidayという私の個人用カレンダファイルのインポートを行おうとして気づいたのだが、どうやらVCalendarにはインポート/エクスポート関連の機能が装備されていないようである。カレンダ情報そのものはMySQLに格納されるものの、icalファイルのインポートとエクスポートができないのでは、イベントデータの交換の世界においてVCalendarは孤立した存在と化しているのに等しい。

 ここでのビューは年間、月間、週間、日間での表示が可能で、こうした表示スパンはヘッダ部周辺に配置された小振りのボタン群によって切り替えられるようになっている。VCalendarのユーザインタフェース設計に関して1つ納得がいかないのは、小さな追加用ボタンをクリックしないと予定日へのイベント追加ができない点だ。つまり、既に該当日を表示している状態でトップメニューの“Add event”をクリックしたとしても、新規イベントの追加先となる日付を改めて再指定しなくてはならないのである。通常こうした操作をする場合は、特定の日時を選択している状態であれば、そこが新規イベントの登録先としてデフォルトで選択されて然るべきではなかろうか?

 その他にもVCalendarではカスタムビューの作成が行えないし、別ユーザのカレンダ情報をレイヤの1つとして重ねるという機能もサポートされていない。つまりVCalendarは、Webインタフェース形態でのカレンダ編集機能をユーザに提供したり、各自の組織内で行う一連の行事予定をWeb上に表示するといった、専用のWebインタフェース内部に限定されたタスクは概ねこなせるのだが、別ユーザのカレンダを取り込んだり、スマートフォンその他のカレンダ機能を有すデバイスにインポートさせたいイベント情報をicalフォーマットでエクスポートするといった要望には、まったく応えられないのである。

CaLogic

 CaLogicも、先のVCalendarと同様にデータの格納にMySQLデータベースを使用する。ただしCaLogicのドキュメント類は、本稿で紹介する3つのプロジェクトのうち最低ランクの充実度と評していいだろう。その反面CaLogicでは、呆れるほど多量の設定オプションがユーザに提示されるのだ。

 ここでのインストール処理のうち、手作業にて行うべき準備作業は下記のコマンド群によって処理できる。

# cd /var/www/html
# unzip /.../calogic122.zip
# mv calogic122 calogic
# cd calogic
# chmod 777 admin

# mysql -p
mysql> create database calogic;
mysql> GRANT ALL ON calogic.* TO calogic@'localhost' IDENTIFIED BY 'calogic';
mysql> FLUSH PRIVILEGES;

 以上の操作が終了したらWebブラウザにてhttp://localhost/calogic/setup/setup.phpにアクセスしてWebインストールを開始する。このWebインストールのステップ1では、データベースの位置と認証関連の指定が求められる。ステップ2では先に触れておいたように、ユーザに許可する機能、テーマの設定、サイト管理者の名前とメールアドレスなど、膨大な数のオプションが提示される。最後のステップ3で行われるのは、管理者アカウントが専用パスワードにて作成された旨の通知だ。Webインタフェースを介したインストール操作は以上で終了だが、後始末的な作業として、セットアップ用のフォルダを削除して、adminディレクトリを読み取り専用に戻しておく必要がある。

 CaLogicの画面構成については、小型の月間カレンダビューの日付とメニュー周りの境界が狭すぎ、他のカレンダプロジェクトに比して混雑気味の印象を与える気がしないでもないが、カラースキームおよびテーマの大半はデフォルト設定のままとしておいた。ただし幸いなことに、CaLogicカレンダの構成要素の表示カラーは、Webインタフェース上で変更できるようになっている。

webcal3_thumb.png
CaLogic

 CaLogicの場合、月間ビュー上で表示されたイベントにマウスポインタを重ねると、当該イベントの説明がポップアップ表示される。なおこのポップアップには、イベントをクリックすると登録内容の表示と編集が行え、Ctrlクリックをすれば新規ウィンドウにて表示されるとの説明がされているものの、残念ながら私の環境では、これらのアクションは正常に機能しなかった。今回私が用いていたのはFirefox 3.0.2だが、少なくともこのブラウザ上にてイベントをクリックできるのは日間ビューだけであり、月間および週間ビューではイベントの直接クリックは行えなかったのである。

 CaLogicには一連のイベントをicalフォーマットにてインポートとエクスポートする機能が用意されてはいるが、そのアクセス法は非常に分かりにくくなっている。また画面上部に配置されたCalendarというドロップダウン形式メニューを使えば、表示するカレンダを切り替えられるものの、複数カレンダの統一ビュー表示(レイヤ化)については、その操作法が過度に込み入っているのだ。

 実際CaLogicでは、新規ユーザを1人作成することですら、かなりのフラストレーションをため込む作業となりかねない。例えばCaLogicから要求される入力項目を何か指定し忘れると、「None of the fields may be blank」(すべてのフィールドに入力してください)というメッセージが出されるだけで、未入力の項目を強調表示するといった処理はされないのだ。またあるケースでは、必要なフィールドはすべて入力したもののSQLエラーが生じてすべての入力情報が消え失せた、という現象に遭遇したこともある。その他CaLogicではメールアドレスとしてローカルネットワークを指定するのもダメなようで、ben@localhostもben@localhost.localdomainも無効だと見なされてしまった。

 CaLogicのWebサイトにある説明によると、現行バージョンはすべての旧バージョンにて使われていたデータベースをアップデートできるとのことだ。特にCaLogicは最初の公開から5年以上を経ていることもあり、現在手元にあるCaLogicで入力したデータが将来バージョンでも利用可能と保証されているのは、1つの安心材料となるだろう。

まとめ

 本稿で取り上げた3つのカレンダプロジェクトに共通しているのは、いずれもカスタムフィールドとイベントとの関連づけが行えるという点だ。ただしWebCalendarとVCalendarは、キーワード、カテゴリ、日付の指定によるイベント検索機能を有しているが、CaLogicに検索用インタフェースは用意されていない。

 またCaLogicのカラースキームについては、WebCalendarとVCalendarほどの完成度に達していないよう感じられる。そして後者2つにあえて優劣を付けるなら、月間ビュー上で細かな境界線が目立たないように配慮されたVCalendarの方が、優れた視認性を有しているとしていいだろう。

 実際の用途として、ユーザのイベント情報をモバイルデバイスにダウンロードするといった運用法を意図しているのなら、WebCalendarの有すicalフォーマットでのインポートとエクスポート機能が最適な選択肢となるはずだ。ただし、ユーザのモバイルデバイス上で編集されたカレンダ情報をWebカレンダインタフェース側に戻すという運用法を想定している場合、これら3つのプロジェクトはいずれもSyncMLをサポートしていないので、何らかの回避策を独自に講じなくてはならない。

 私個人のお勧めはWebCalendarであるが、それはicalのインポート/エクスポート機能に併せて、複数のカレンダを単一ビューにまとめるレイヤ機能を有しているからだ。あるいはVCalendarとCaLogicから選ぶとすれば、Web上に単一カレンダを掲載するという目的から判断して、デフォルトのテーマとカラースキームの完成度が高いと感じられるVCalendarの方を使用することになるだろう。

Ben Martinは10年以上にわたってファイルシステムに取り組んでおり、博士課程の修了後、現在はlibferris、ファイルシステム、検索ソリューションを中心としたコンサルティング業に従事している。

Linux.com 原文(2008年12月18日)