直前のお知らせになってしまいましたが、今週末の24日 (土)、東京は池尻大橋にて「MOSA Software Meeting 2009」が開催されます。実は私も講師で参加することに……もし会場で私を見かけることがありましたら、気軽にお声がけください。
さて、今回は「タイプとクリエータ」について。GCDやOpenCLのサポートは結構なこと、メディアで伝えられる情報が新機能中心となることは致し方ないが、ときには去りゆく機能について思いを馳せてもいいはず。秋の夜長に、あるべき「ファイルの扱い」を考えてみよう。
消えゆく運命の「タイプ」と「クリエータ」
Snow Leopardでは、旧Mac OSより伝わるファイル付帯情報「タイプ」と「クリエータ」の扱いが変更された。すでにファイルのリソースフォーク (あるいはApple Double Headerファイル) に記録された情報は変更されないが、Snow Leopardに標準装備のアプリケーションで作成したファイルを調べれば、タイプとクリエータの値はゼロになっていることがわかるはず。そう、これからのOS Xでは、タイプとクリエータは (積極的に) サポートされないのだ。
タイプとクリエータの情報は、GetFileInfoコマンドで確認できる。用法はかんたん、引数にファイル名を指定するだけでOK。スクリーンショットやテキストファイルなど、Snow Leopard導入後に作成したファイルで試してみよう。なお、Office 2008などSnow Leopard登場以前にリリースされたアプリケーションでは、Leopard以前と同様にタイプ / クリエータ付きのファイルを生成するので念のため。
タイプとクリエータ、そして拡張子
Mac OSでは、ファイル (書類) とアプリケーションを関連付ける目的でクリエータを利用してきた。ASCII4文字で表現されるこの情報は、Microsoft Excelならば「XCEL」、Adobe Photoshopならば「8BIM」などとアプリケーションごとに一意の情報を持つことができ、タイプとして持つ情報 -- たとえばExcel 98は「XLS4」、Excel 2008は「XLSX」 -- とあわせて参照することで、起動されるべきアプリケーションを判定していた。どちらのコードも、Appleが中央集権的に管理してきたという経緯がある。
そしてOS Xの時代に入ると、「拡張子」の概念が持ち込まれた。タイプとクリエータは、ResEditなどのユーティリティ (前掲のGetFileコマンドも可) を使用しないかぎり、エンドユーザは見ることも変更することもできないが、拡張子はファイル名の一部であり自由に変更できる。Appleが管理するタイプとクリエータほど確たる存在ではないが、「.txt」はテキストファイル、「.xls」はExcel文書といった具合に、世界規模でのデファクトスタンダードとなった拡張子もある。いずれにせよ、Cocoa / Carbonアプリはタイプとクリエータ、そして拡張子という2種類の方法を併存させることで、ファイルとアプリケーションの関係を保ってきたのだ。
しかし、タイプとクリエータそして拡張子は、起動されるべきアプリケーションを特定する決定打とはならない。判定の順序については、1) クリエータの記載がある場合はそのアプリケーションを探す 2) 拡張子がある場合はそのアプリを探す 3) タイプの記載がある場合はそのアプリを探す、という決まりはあるものの、ダブルスタンダードであることは否めない。LaunchServicesフレームワークがそれらの情報をデータベース化して管理しているため、ユーザは混乱せずに済んでいただけのことだ。
これからはUTIの時代、しかし……
時代は下りTigerでは、新たに「Uniform Type Identifier」(UTI)という機構が採用された。「public.text」がマークアップを含むテキストベースのデータ、com.adobe.pdfがPDF、といった情報をメタデータとしてファイルに持たせ、アプリとの関連付けに利用するという仕組みだ。
Snow Leopardでは、そのUTIが本格的に利用されはじめた。ファイルとアプリの関連付けを決定するときの判定材料として使われるようになり、タイプとクリエータは無視されるようになった。表示に使うアイコンを決めるプロセスも同様で、Finder情報やカスタムアイコンなどリソースフォークに記録しないかぎり、汎用のファイルには一律のアイコン (あるいはアイコンプレビュー) が適用される。
UTIに利点は多いが、現時点では問題が少なくない。たとえば、拡張子「.txt」のテキストファイルをダブルクリックしたとき、アプリAで作成したものはアプリAのアイコンが、アプリBで作成したものはアプリBのアイコンが表示されていたが、クリエータを無視するSnow Leopardでは同じアイコンとなってしまうのだ。前述したリソースフォークを用いる方法はあるが、Finderの情報パネルを使い「このアプリケーションで開く」で任意のアプリを指定しても、そのアプリのフルパスが記録されるだけという、環境によっては問題が生じかねない仕様も含まれている。UTIへの完全移行を開始する前に、Appleにはこの部分のロジックの整理を念入りにお願いしたいところだ。