iTunesがバージョン11にアップデートしてから、あまり起動しなくなりました。FLACをサポートしていないから、ということもありますが、自分にはどうにも操作しにくく……最近では、もっぱら「Fidelia」を利用しています。

さて、今回は「URLスキーム」について。OS X Mountain Lionで見つかった不具合と関係した、現在が「旬」のキーワードであり、その由来と確認された不具合について解説したい。

確かに落ちる「File:///」

OS Xのアプリケーションに「File:///」と入力すると、かなりの確率でフリーズ/異常終了する、という話を耳にした。形式から判断するに、この文字列は「URLスキーム」と判断できるが、大文字から始まることが引っかかった。

そもそもURLスキームは、OS Xで独自に設けられたものではない。「file:」や「ftp:」といった記述子は、インターネットの共通仕様を定めた文書群「RFC」のうち「RFC 1738」で定義されているもので、それが多くのOSでサポートされるに至った(参考)。しかし、すでにRFC 1738は廃止され、現在のところインターネット標準の公式な定義は存在しない。

ちなみに、歴史的・典型的なfileスキームは、「file://ホスト名/パス」という形式。RFC 1738によれば、そのうちホスト名部分は省略可能なため、「file:///」という記述に問題はない。RFC 1738では、大文字と小文字の扱いは同等であるべきとしているので、その先頭を大文字で開始した場合にかぎってアプリケーションがフリーズするOS X側に問題があることは確実だ。

ともあれ、本当にフリーズするのかどうか、実際に検証してみた。最初に試したのは「Finder」、検索フィールドに「File:///」と入力すると、間もなくカーソルは「レインボーカーソル」に。SafariのURLバーへ入力したところ、こちらも一瞬の後異常終了した。「Spotlight」も異常終了ののち再起動。「メモ」や「システム環境設定」など標準装備のものはもちろん、「Word」などサードパーティー製品まで、いわゆるCocoaベースのアプリケーションは軒並みアウトだった。

原因を調査したところ、どのアプリケーションも「NSInternalInconsistencyException」というエラーによりクラッシュしていることがわかった。問題レポートを見るかぎりでは、AppKitに含まれるテキスト周りの機構(スペルチェック?)が原因と考えられる。なお、スペルチェック機構をユーザレベルで無効にしても(コマンド実行例)、効果はなかった。システムのアップデートを行わないかぎりはこの状況を解決できないはずで、Appleによる早急な対応が待たれる。

Finderの検索フィールドに「File:///」を入力すると、確実にクラッシュする(OS X Mountain Lion 10.8.2で確認)

「メモ」の編集領域に「File:///」を入力したところ、直後にレインボーカーソルが出現。強制終了を余儀なくされた

問題レポートの画面中ほどを見ると、「NSInternalInconsistencyException」というエラーが発生していることがわかる

OS Xのスペルチェックを停止するためのコマンドライン

$ defaults write NSGlobalDomain NSAutomaticSpellingCorrectionEnabled -bool no

このURLスキームは知って損なし

というわけで、「File:///」問題の解決はAppleの対応待ちだが、せっかくURLスキームについて触れたので、OS X独自の便利なURLスキームの使い方を紹介したい。

最初は「dict」から。お察しのとおり、「辞書」(Dictionary.app)に予約されたURLスキームであり、SafariのURLバーなどURLスキームを解釈可能な機能から呼び出すことができる。URLスキームを解釈できるコマンドといえば……そう、「open」だ。以下のとおりTerminalから実行すれば、「低気圧」で辞書を引いた結果を表示してくれるはずだ。

$ open dict://低気圧

Terminalからopenコマンドで辞書を引くことができる

OS Xでは、URLスキームをアプリケーションごとに設けることができる。その情報をOS Xのシステムがデータベース化し、URLスキームとしての利用を可能にしているわけだ。その定義ファイルはアプリケーションバンドル内にある「Info.plist」で、「CFBundleURLSchemes」というタグで定義されている。

つまり、このURLスキームを調べれば、Safariでもopenコマンドでも、好きな方法で(URLスキームが対応する)アプリケーションを起動できる。アプリケーションによっては、前述した「dict」のように、キーワードを渡すこともできるので、調べてみてもいいだろう。

アプリケーションバンドル内の「Info.plist」を調べれば、そのアプリケーションが使うURLスキームがわかる