今回は記念すべき&H100回目、思えば遠くへ来たものです。先ほど連載第1回を読み返したのですが、なんといいますか……ノリが変わりませんね。というわけで、これからも表通りではなく裏の畦道をひた走る感覚で参りたいと思います。

さて、今回は「Quick Look」について。いわずと知れたLeopardの新機能だが、意外に知られていない使い方があることも事実。それでは早速、その秘められた力を眺めてみよう。

UTIとQLジェネレータの関係

サムネイルやファイルの内容そのものを表示するというQuick Lookの機能は、QLプラグイン(拡張子は「.qlgenerator」)によって実現されている。

プラグインはApple謹製のものが/System/Library/QuickLookに、ローカルホスト全体で使用するものが/Library/QuickLookに、ユーザ専用のものが$HOME/Library/QuickLookに置かれる。ほかにも、

 /System/Library/Frameworks/QuickLook.framework/Versions/A/Resources/Generators

以下には、システム標準のQLプラグインが置かれている。サードパーティー製アプリケーションの場合、バンドル内部に置かれていることもある。

それらのQLプラグインは、対応するファイル種の情報を内部に保有している。それはシステム内のデータを分類・判定するための識別子「Uniform Type Identifier (UTI)」で、メタデータとしてファイルに記録されたものと照合される。UTIの説明は別の機会に譲るとして、今回はこちらを参照してほしい。

Quick Lookが動作する流れで説明してみよう。FinderでQuick Lookを起動するアクションが確認されると、そのファイルのメタデータにあるUTIが確認され、一致するQLプラグインが実行される。逆にいえば、ファイルのUTIに対応するQLプラグインしか実行されないため、テキストファイルを画像用のQLプラグインで表示する、といった変則的な対応はできない仕組みだ。

知って得する「qlmanage」

OS Xには、GUIベースのアプリケーションに関連するコマンドが収録されていることが多い。Spotlightにはmdlsなど「md」から始まるコマンド群があり、Automatorにはそのものズバリ「automator」コマンドがある。「softwareupdate」など、サーバ管理者用と思われるコマンドも、通常はGUIで処理されるべき機能のCUI版だ。

Quick Lookもその例にもれず、「qlmanage」コマンドが収録されている。有り体にいえば開発者のデバッグ用なのだが、使い手の工夫次第では便利に使えるのがコマンドのよさといえる。

表: qlmanageコマンドの主要なオプション

オプション 説明
-c UTIを指定する
-f プレビューの表示倍率を指定する
-g 使用するプラグインを指定する
-m UTIと関連するQuick Lookのプラグインを表示する
-p ファイルをプレビューする
-r プラグインのデータを再読み込みする
-s プレビューエリアの幅をピクセル数で指定する
-t サムネイルを描画する

例として、通常の設定ではアイコンが表示されるだけのEmacs Lispファイル(*.el)を対象に、サムネイルの描画を行ってみよう。Emacs Lispファイルの内容はプレインテキストなので、通常のテキストファイルに使用されるQLプラグイン(Text.qlgenerator)が使えるだろうという計算があるからだ。なお、UTIにはプレインテキスト汎用のもの(public.plain-text)を指定している。

 $ qlmanage -t -s 500 -c public.plain-text -g /System/Library/Frameworks/QuickLook.framework/Versions/A/Resources/Generators/Text.qlgenerator emacs.el

このように、QLプラグインを指定すればプレビューできるファイルもある

QLプラグインをクイックハック

QLプラグインとUTIの関係がわかれば、クイックハックへの道筋も見えてくる。そう、バンドル内部の「Info.plist」で定義されているUTIを、勝手に追加してしまおうという寸法だ。もちろん、音楽用のプラグインでワープロ文書を表示するようなことはできないが、前述したEmacs Lispファイルのように、ただメタデータ内のUTIが異なるというだけで門前払いになっているファイル種は救いようがある。

以下に示す作業手順は、Text.qlgeneratorを~/Library/Stockyardへバックアップし、その中のInfo.plistにUTI (ここではpublic.data)を追加、システムエリア内のオリジナルのText.qlgeneratorへ書き戻すというもの。作業後システムを再起動すれば、Emacs LispファイルやCSVファイルがQuick Look可能になっているはずだ。

ただし、この方法では、同じ「public.data」をUTIに持つファイルすべてがプレビューの対象となるため、思わぬ不具合が発生する可能性もある。試す場合には、At your own riskで臨んでほしい。

 $ mkdir ~/Library/Stockyard
 $ cd ~/Library/Stockyard
 $ cp -r /System/Library/Frameworks/QuickLook.framework/Versions/A/Resources/Generators/Text.qlgenerator .
 $ open Text.qlgenerator/Contents/Info.plist

 (Property List Editorを使い、Root→CFBundleDocumentTypes→0→LSItemContentTypesに「public.data」を追加して上書き保存)

 $ cd /System/Library/Frameworks/QuickLook.framework/Versions/A/Resources/Generators/Text.qlgenerator/Contents/
 $ sudo mv Info.plist Info.orig
 $ sudo cp ~/Library/Stockyard/Text.qlgenerator/Contents/Info.plist .

「Info.plist」にUTIを追加する

Emacs LispファイルもQuick Lookできた