GCALDaemonを使ってみる

多分もう有効期限切れ(2008/03/29)
Mac上のiCalGoogle Calendarを同期させたい、という問題。
Spanning Syncが時折うまくいっていないような気がしたり、正式版運用開始に伴って有料化されたので代わりのものはないかな、と。
そしたら、GCALDaemonなるものが紹介されていたので使ってみる。
GCALDaemon - soundscape out


http://gcaldaemon.sourceforge.net/index.htmlにzipアーカイブがあり(UNIX/Linux/AIX/Mac OS X compatible ZIP archive)、Javaなのでコンパイル不要。Tigerインストール後、普通に10.4.9にアップデートした状態で大丈夫。
GCALDaemonフォルダを/usr/local/sbin/に移動して、オーナーグループとパーミッションを変更するだけ。/usr/local/sbin/がなかったので作る。らくちん。

$ sudo mkdir /usr/local/sbin/
$ sudo mv ~/Desktop/gcaldaemon-linux/GCALDaemon /usr/local/sbin/
$ sudo chgrp -R admin /usr/local/sbin/GCALDaemon
$ sudo chmod -R g+w /usr/local/sbin/GCALDaemon
$ sudo chmod 755 /usr/local/sbin/GCALDaemon/bin/*.sh

動作テストは動かしてみればよい。エラーメッセージが出なかったら十分。Ctrl+Cで終了。

$ /usr/local/sbin/GCALDaemon/bin/standalone-start.sh

設定ファイルは/usr/local/sbin/GCALDaemon/conf/gcal-daemon.cfgになる。GUI上でファイルを開きたい場合は、解凍直後に編集しておく。iCalGoogle Calendarの同期で編集する箇所は下記。

progress.enabled
trueにすると同期実行時にプログレスバーが出るので、設定が落ち着くまでtrueにしておくとよい(DockにJavaのコーヒーカップが出るが)
http.enabled
falseに
file.enabled
trueに
file.ical.path
/User/ユーザー名/Library/Application Support/iCal/Sources/なんとかかんとか.calendar/corestorage.icsに。iCal上でカレンダーが複数ある場合はどのなんとかかんとかが同期対象にしたいぶんかチェックする必要がある。本家の説明ではラベルを付けてどうこうしているが、Info.plistにカレンダー名が書いてあるのをみる方が楽かも。
file.google.username
Googleのユーザ名@gmail.com
file.google.password
/usr/local/sbin/GCALDaemon/bin/password-encoder.shで変換する。=が入ってたりするので注意。
file.private.ical.url
Google Calendarのカレンダーの管理から個人用URL(ICAL)をコピペ。http://www.google.comはトル。
feed.enabled
falseに


これで一通り大丈夫かと思いきや、同期コピーするイベント数が多すぎてエラーが出た。

WARN | Synchronizer | Number of reversible events limit exceeded: 98

Mac OS X Hints - A community-built collection of OS X hintsでは一度に10個ずつ地道にやっていく方法が提案されていたけどめんどくさいよなぁ。
sourceforgeのフォーラムを見ていたらいくつか修正を施したnightlyビルド(gcal-daemon.jarのみ)があるらしいので試しにそれに入れかえてみたら解決した。(1.0 beta 7c)

$ sudo mv /usr/local/sbin/GCALDaemon/lib/gcal-daemon.jar /usr/local/sbin/GCALDaemon/lib/gcal-daemon.bak
$ sudo mv ~/Desktop/gcal-daemon.jar /usr/local/sbin/GCALDaemon/lib/gcal-daemon.jar

この状態でイベント数の制限はとれたけど、max.updatable.eventsで上限の設定ができるらしい(未確認)。でもupdatableにreversibleが含まれるのかどうか。reversibleということはGoogle Calendar->iCalが順でiCal->Google Calendarが逆という設計なのかな。


なぜか全日イベントが同じ日に2つ以上あると1つしかコピーされないので、これについては確認中。
(2007/03/31追記 新しいnightlyビルドで複数全日イベントの同期ができるのを確認。 健忘日記を参照。)