Leopardを占う・AppleがIntelチップを採用したらどうなる?・「Automator」のたどる運命を予測AppleScriptサブルーチンMacJournalでクローラーもどきをMacJournalはなかなか便利なソフトウェアだ。ジャンル分けしてテキストを打ち込んで行って、あとから全文検索で探したりカレンダーインタフェースから「この日に書いた記事」といった探し方ができる。これだけだとありがちなソフトウェアに見えてしまうだろうか。インタフェースがすっきりしていて、それなりに充実した機能があって、大量のデータを喰わせても挙動がそれほど変わらない。スケーラビリティがあってつぶしが効くといったところか。PadとDevonThink。Padはローカルでメモっぽく使えるWikiのようなソフトウェア。DevonThinkは、テキストなどをガンガン投入しておいて、全文検索を行うソフトウェア。全文検索にシソーラス(類義語)辞書が使えるため、言葉のゆらぎを考慮しつつ検索を行ってくれたりして便利。シソーラス辞書は英語のみ。Leopardで日本語シソーラス辞書なんて豪勢なものがOS標準装備されたが、まだそれを生かしたソフトウェアにはなれていない。MacJournalを便利だと感じたのは......Webブラウザで表示中の記事をコピー&ペーストでドキュメントに(書式やリンクを維持したまま)取り込むことができたため。Web記事のスクラップ帳になることが分った。VoodooPadのように記事数が増えたからといって起動するのにうんざりするほど待たされたりはしない(これでVoodooPadからMacJournalに乗り換えた)。数百や数千のエントリができてしまう自分のような人間にとっては、このうえなくありがたい。このWebスクラップ帳の方向でMacJournalの機能を拡張していこうと考えたときに、AppleScriptによる機能アップを考えるのは当然の成り行きといえた。こいつがスクリプタブルでなければレジストしなかっただろう。アプリケーションの能力には限界があったとしても、AppleScriptに対応してさえいれば、さまざまな外部のアプリケーションの機能を借りながら便利な機能を実現できる。AppleScriptに対応していれば、機能にもスケーラビリティが出てくるといったところか。MacJournalのAppleScript用語辞書を一見して、あんまりヘビーな使い方が考慮されていないことが分った。現在選択中のジャーナルエントリーの本文やら属性を取り出したり、現在選択中のジャーナルエントリーになんやかんやと外部アプリケーションからのデータを突っ込むといった程度である。新規ジャーナルエントリーを作成できないので、それほど凝ったことはできない。Scriptingを併用すれば不可能でもなんでもなくなる。Scriptからメニューを操作してMacJournalをコントロールすればいいだけである。動作の確実性に欠けるきらいはあるが、最終手段が存在することは大きなプラスになる。実際に自分が作ったAppleScriptの処理内容だが......ニュース記事のURLばかりを列挙したジャーナルエントリーを作っておいて、その本文からURLのみを抽出。PDFへのリンクを除外して、まずはSafariでオープン。コンテンツのローディング完了を待ちつつ、完了したらタイトルを取得。次に、コマンドラインのHTMLレンダラーを呼び出してページの内容をPDFに出力。得られたPDFをMacJournal上で新規作成したジャーナルエントリーに突っ込んで、Safariで取得したページタイトルをジャーナルエントリのタイトルに設定。......こんなAppleScriptのプログラムを作るのに要した時間は1時間程度だったろうか。おおかたのサブルーチンはすでに作りおきしておいたものを利用したので、作ったのはメイン部分だけだ。WebコンテンツをSafariとコマンドラインレンダラの2つでレンダリングしているのは、コマンドラインレンダラにページのタイトルを取得する機能がないためと、Safariにページ内容をPDFに保存する機能がないためだ。どちらか一方だけで済めば大幅な処理の高速化が図れる。ある程度のまとまったURLを与えて動作確認したところ、たまーーにタイトルが抜けるパターンがあるようなので、まだまだ完全というわけではないが......AppleScriptでWebクローラーもどきができた。URL一覧から実際の記事タイトルで新規エントリを作成し、本文にWeb上の記事をレンダリングしたPDFが入る(文字選択可、リンクも生きている)。PDFもMacJournalの全文検索の対象になるため、記事をローカルに溜め込んで縦横無尽に検索するといった使い方ができるようになった。コマンドラインHTMLレンダラの処理でGUIベースのSafariで表示する十倍ぐらいの時間がかかっているため、自慢するほど速くはないが......この手の処理は夜に寝ている間に済ませてくれれば十分である。して、膨大な過去記事を一気にレンダリングして手元に置いておけるようになった。ニュース記事だと1か月程度で公開が終了してしまうパターンもあり、ローカルに記事を置いてスクラップしておけないと読めないケースもある。Googleで検索するとカスなページが山のようにひっかかってくるので、記事だけスクラップしておけるとノイズの少ない検索が行える。