BSDレイヤーシリーズ第4回は「Spotlight」について。今回は、WWDC 2014の基調講演で発表された「Yosemite」におけるトピックを挙げつつ、Spotlightの管理方法について解説してみよう。

YosemiteでSpotlightはこう変わる

SpotlightはBSDレイヤーに分類される機能ではないが、常にエンジン(mds)が稼働しアプリケーションからアクセスでき、クエリ用のAPIが整備されていることもあり、システム構造上はBSDレイヤーより低位と解釈することもできる。メニューバー右端に表示されている虫メガネボタンはフロントエンドの一種に過ぎず、「mdfind」や「mdls」といったSpotlightの機能にアクセスできるUNIXコマンドも存在する。要は、OS Xのコアに近い機能なのだ。

WWDC基調講演では、デスクトップ中央に移動した検索フィールドを利用し、YosemiteにおけるSpotlightのデモを行っていた。Wikipediaなどオンライン上の情報を例にデモしていたことからすると、これまではMacローカルを検索範囲とする「デスクトップ検索」機能だったところが、インターネットを検索範囲にくわえたと判断できる。

新旧の検索対象を列挙したスライドを見比べると、どのような変更が行われたかがわかる。新たにくわわったのはWikipediaとMaps、News、Bing、Apple StoreにiTunes Store、iBook Store、Top WebsitesにMovie Showtimesだ。「Bing」の名が挙がっていることからしても、基本的にはiOS 7の「Siri」で提供済みの検索項目であり、Bingの検索サービス+Appleのオンラインサービスをくわえたものと判断していい。

見方を変えれば、Spotlightのキモである構造部分には大きな変更がないと考えられる。デモの内容も検索範囲がネットワークサービスへ広がったことを訴えるものが中心で、検索の速度や精度、およびローカル検索の強化については特に触れられていない。想定内のこととはいえ、Appleの「モバイルファースト」の姿勢は徹底している、と考えさせられた次第だ。

WWDC 2014基調講演におけるSpotlightのデモ。検索フィールドが画面中央に移動、Bingとの連携などSiriとの共通項を感じさせる新機能が追加された

新旧Spotlightの検索項目を記したスライド。Yosemiteではネットワークサービスとの連携が強化される

Yosemiteに備えてインデックス再構築

基本構造に関していえば、Yosemiteでも大きく変わることはなさそうな「Spotlight」。ということは、ローカル検索に必要なメタデータの収集(インポート)およびインデックス化、検索に使用されるキー(kMDItem*)などの要素にも大きな変化はないものと考えられる。デモで見たとおりGUIは大きく変わるだろうが、mdlsやmdfindといった関連コマンドの機能は大差ないはずだ。

しかし、管理面には不安要素がある。Spotlightのインデックスはルート直下の不可視属性領域に保存されるが(/.Spotlight-V100ディレクトリ)、その構造およびインデックス化のアルゴリズムが明らかにされていないからだ。ローカルに存在するファイルが検出されないなどインデックスに問題が生じていると考えられるケースに遭遇することは珍しくなく、その場合一般ユーザがインデックスの一部を修正することはほぼ不可能といっていい。

仕様が非公開の技術なだけに、今後その構造部分に手を加えられる可能性はある。実際、過去のOS Xではインデックス構造が見直された節があるのだ。たとえば、「/.Spotlight-V100」ディレクトリ以下には「Store-V1」と「Store-V2」というサブディレクトリが存在するが、Snow Leopardのあたりから「Store-V1」ディレクトリが使用されている気配はない。

我々ができることといえば、インデックスの再構築だ。幸い、MavericksではTerminalから以下のとおりコマンドラインを実行すれば、内蔵ディスクのインデックスを再構築できる。内蔵SSDを約87GB使用済みのMacBook Airでは20分ほどで完了したため、Spotlightで検索が思うようにいかない場合には試す価値がある。

インデックスを再構築する(管理者権限要)

$ sudo mdutil -E /

ところで、前述のmdutilコマンドを実行する前と後でインデックスの容量を測定したところ、処理の途中でまったく作業していないにもかかわらず、実行後は84MBもインデックスのサイズが減少した。この事実から推測するに、ファイルの追加/削除を繰り返したことによりインデックスに冗長化(フラグメンテーション)が発生していたのだろう。フラグメンテーションがSpotlightの処理のプラスになるとは考えられないため、ユーザは定期的にインデックスの再構築を行い自衛するしかない。新機能もいいが、Spotlightの基盤ともいえるインデックス部分のメンテナンス性向上にも期待したいところだ。

mdutilコマンドでインデックスを再構築する前(上)と後(下)。84MBバイト減少していることがわかる