[PR] 本ブログの商品紹介リンクには広告が含まれています
私が活動の拠点にしている会社では、スケジュール管理にサイボウズ Office 6を使っています。
実は、サイボウズを使うのはこれが初めてです。グループスケジューリングのソフトウェア(あえて、グループウェアとは呼ばない)については少々うるさいほうだと思うので、いろいろ言いたいことはあるんですが、まあそれは置いといて……それにしても、外部接続性がまったくないのはなんとかならんものか。
すでに配布やサポートが中断している
Outlookとの同期ソフトをちょっとしたワザを使って入手して、昔懐かしOutlook 2000をインストールして、いままで使っていたカレンダーをどうにかサイボウズに取り込みました。
つぎに、毎日持ち歩くデバイスでスケジュールを参照できるようにしようと思って調べてみたら、サイボウズの画面をスクレーピングしてiCalendar形式に変換してくれる
Cybozu2ICalというスクリプトをみつけました。これを使ってMacのiCal経由でiPod touchにスケジュールのデータを取り込むことにしたのですが、すんなりいかず、ちょっとした改造をしたらうまくいったので、忘れないうちにその方法をメモしておきます。
まず、MacにCybozu2ICalをインストール。これは、ダウンロードしてきて展開するだけ。でもそのままじゃPerlのモジュールがいくつか足りないので動きません。
PerlのモジュールをCPANでインストールするために、まずはMac OSのインストールディスクからXcode Toolsをインストール。
続いて、Cybozy2ICalを動かすのに必要なモジュールをインストール。ターミナルを開いて
sudo cpan -H -i Text::CSV
(以下同文で、インストールするモジュールの数だけ繰り返し)
でインストール完了。
Cybozu2ICalの設定ファイルを編集してから
./cybozu2ical > cybozu.ics
を実行すると、cybozu.icsというiCalendarファイルができます。
このファイルをiCalから読み込むとサイボウズのスケジュールがiCalに取り込まれました。
と、ここで問題発生。繰り返し予定(反復イベント)が繰り返しなしの普通の予定として取り込まれてしまっています。
iCalendarファイルの中をいじってみて、反復イベントを定義するRRULEプロパティの記述で、次の2点が問題だということが分かりました。
- Cybozu2ICalがはき出すRRULEプロパティの記述では、たまたまUNTIL=xxxxxが一番最初に出てきていたのだが、どうやらiCalはUNTIL=xxxxxが最後(のほう)に来ないと反復イベントとして読み込んでくれないらしい
- Cybozu2ICalの今のバージョン(0.13)では、Google Calendarでの反復イベント読み込みの不具合を回避するために、RRULEにWKST="SU"オプションを追加するようにしてあるのだが、どうやらiCalはこれが追加してあると反復イベントとして読み込んでくれないらしい
で、これを回避するためにちょっと改造してみました。
cybozu2ical (バージョン0.13)の85行目あたり。
my %rrules = $freq ne 'WEEKDAYS' ?
( FREQ => $freq, WKST => 'SU' ) :
( FREQ => 'WEEKLY', WKST => 'SU', BYDAY => 'MO,TU,WE,TH,FR' );
$rrules{UNTIL} = to_icaldate($item->until, $item->is_full_day)
if $item->until;
$args{rrule} = join ';', map { $_ . '=' . $rrules{$_} } keys %rrules;
というところを
my %rrules = $freq ne 'WEEKDAYS' ?
( FREQ => $freq ) :
( FREQ => 'WEEKLY', BYDAY => 'MO,TU,WE,TH,FR' );
$args{rrule} = join ';', map { $_ . '=' . $rrules{$_} } keys %rrules;
$args{rrule} .= ';UNTIL=' . to_icaldate($item->until, $item->is_full_day)
if $item->until;
に変更します。
で、無事、iCalにサイボウズのスケジュールが取り込めるようになりました。あとは、iTunesでiCalのカレンダーをiPodに同期するように設定しておけば、iPod touchをUSBで接続したときに自動的にカレンダーを取り込んでくれます。
この改造をすると、Google Calendarでの不具合が再発しちゃうんですが、私はGoogle Calendarを使ってないので、よしとします。iCalendarファイルの解釈は、いろいろ互換性の問題がありそうですね。
nhcjpnさんのコメント: