
私が活動の拠点にしている会社では、スケジュール管理にサイボウズ 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ファイルの解釈は、いろいろ互換性の問題がありそうですね。
ひぐちさま、すみません、iPodさえ使いこなせない私、このレベルにはついていけませんが、その前に、携帯からビジネス携帯に移行するキャリアの動向など全体感を一度ご教授いただければと。
よろこんで!ご都合の良いときにお声をおかけくださいませ。(私信モード)
手段と目的が逆転しているかも [cybozu2ICalの改造 その2]
先日のcybozu2ICalのパッチを大満足で使っていたのですが、サイボウズで「毎月第○週の×曜日」と、月の第何週かだけ繰り返すように指定したスケジュールがiCalendarファイルに現れてこないことに気がつきました。
…
初めまして。こちらのサイトを参考にさせていただいていたのですが、
./cybozu2ical > cybozu.ics
を実行すると
dyld: lazy symbol binding failed: Symbol not found: _Perl_newXS_flags
Referenced from: /Library/Perl/5.8.6/auto/HTML/Parser/Parser.bundle
Expected in: dynamic lookup
dyld: Symbol not found: _Perl_newXS_flags
Referenced from: /Library/Perl/5.8.6/auto/HTML/Parser/Parser.bundle
Expected in: dynamic lookup
というエラーが出ます。
環境はPerl5.8.6、MacOS10.4.10です。
お手数をお掛けしますが、ご回答いただけると幸いです。
dieさん:
改造前のオリジナルプログラムは正常に動いていましたか?エラーの内容からすると、改造による問題ではなく、なにかお使いの環境に依存する、もとからある問題のように思えます。あいにく、Perlの動作環境については知見がありませんので、お力になれません。どなたか、適切な方におたずねください。
また、現在配布されているCybozu2icalは、このパッチで直している問題が修正されていますので、そもそもこの改造は必要でなくなっているはずです。
ご確認ください。
樋口様
さっそくのご回答ありがとうございます。
改造はしておりませんので、環境の問題かもしれません。
サイボウズにログインする際、当方ではアカウントを設定しておらず、
漢字の名前とパスワードでログインできるようにしており、そのためconfig.yaml内の設定で
username: 山田 太郎
と記述しているのですが、その辺が問題という事はありますでしょうか。
すみませんが、cybozu2icalの中身のことは、私ではなくしかるべき詳しい方にお聞きになった方がよろしいかと。
そうですね。失礼しました。
開発された方にお伺いしてみます。
ありがとうございました。
通りすがりの者です。
>username: 山田 太郎
>と記述しているのですが、その辺が問題という事はありますでしょうか。
username でなく、userid で設定されたら如何ですか?
ユーザIDは、サイボウズ上の「ユーザー名簿」で確認できますよ。
そんな私は、こちらのサイトを参考にインストールに挑戦中 (^^;
はじめまして。
jailbreak を試みたところ失敗いたしました。w
途中まではいったのですが
BSD root: md0, major 2, minor 0
というのが無限にでてきます
解決法はありますかね??
樋口様
はじめまして。もし、おわかりであれば教えてください。このコーナーを参考に挑戦していますが、Cybozu.icsの書き出しのところでエラーが出ます。
5.8.8とLeopardですが、10.5は問題なくうごくのでしょうか?
悪戦苦闘さん:
私は Leopard で問題なく使えています。
上にも書いたとおり、今配布されているcybozu2icalでは、ここにかいてある改造に相当する修正がされていますので、なにも手を入れずにそのまま動きます。
ですので、そのまま動かしてみてください。
樋口様
早速のコメントありがとうございます。
もう一点、ActivePerlについては現在5.10が配布されていますが、こちらとの組み合わせでも問題ないでしょうか?
いずれにしても再挑戦してみます。
ActivePerlですか?Windowsの?
私は普通に /usr/bin/perl を使っていますので、ActivePerl についてはなんとも……お役に立てずすみません。