Mail.appでメールをサブフォルダに振り分けする門外不出の自作AppleScript。このScriptは、主に海外のメーリングリストの情報整理に日々絶大な威力を発揮している。もともとはEntourage用に作ったのだが、Entourage 2004でメールボックスの自己破壊が直らなかったので、EntourageからMail.app用に書き直した。
Entourageにメールボックスの自己破壊癖がなければ、Entourageのほうが処理速度が3倍ぐらい速いのでEntourageベースで使いたかったのだが……残念なことである。いまさら数十万通のメールをMail.appからEntourageに戻すことなど不可能だ。
だが、そんな情報戦の根幹をなす本Scriptも……最近おかしな挙動を行うことが分って来た。本Scriptでは、1つのフォルダにカンマで区切って複数のキーワードを指定できるのだが、このキーワード数が多くなりすぎると該当フォルダへの振り分けが行われなくなるというものだ。
24インチ液晶モニタを購入した目的のひとつに、この振り分けScriptに手を入れることがあったのだが、高速化のためにありとあらゆるテクノロジーを投下したテクニックの塊のようなAppleScriptは、異様にメンテナンスがやりにくくなっていた。残念ながら、さすがの大型モニタでも、入り組んだ構造を追いかけ切れなかった(30インチモニタでもあれば……)。
本Scriptでは、フォルダの名称の長さをすべて求め、フォルダ名が長い順に処理を行っている。つまり、「Application」と「Application folder」という2つのフォルダがあったとき、フォルダ名が長い「Application folder」のほうが優先されるようになっている。
これはなかなか実用的な仕様なのだが、当初……このフォルダ名称の文字列長ベースの優先順位設定は、1文字から40文字で分類するようにしてあった。フォルダにつける文字列長は40文字を超えることはないだろうと思っていたためだ。
この仕様を思い出し、40文字制限を外して256文字までのテーブルに改造してみた。
ビンゴ! ここを直したらうまく動くようになった。
のちの調査で、フォルダ名称に40文字を超えるものがゴロゴロしており、40文字を超えるものは40文字のフォルダ名として処理されているものの、ここで何らかの不具合があったようだ(たぶん、境界値エラー?)。
実際、自分がCocoa-Dev MLの「初心者向け質問」を振り分けているメールフォルダには、
beginner,newbie,start,Newbie,stupid,structure,Newby,Questions,Dumb,Noob,newb,practice,Introduction
といった98文字もの名称を付けていた。
Xcode MLでは、
beginner,newbie,question,stupid,how,what,where,pills(52文字)
あまり見ないClient Management MLでも、
Beginner,Newbie,newby,stupid,easy,question,help
と、47文字ものフォルダ名になっていた。
初心者系質問のフォルダは名前が長くなる傾向があるので、ここがまともに動かないとつらい。自分が不案内なジャンルのMLで扱っているテーマで、一番需要の多そうなものや頻出の質問を探すときに「初心者質問フォルダ」は非常に役立つ。
このメール振り分けScriptは、日々の情報収集活動の根幹をなしているため、ここがコケると非常にダメージが大きい。無駄に100個以上のMLからの情報を受け取るだけになり、一般ユーザーと同様に全文検索で情報を探すしか手だてがなくなってしまう。
直ってよかった(涙)