Mac業界の最新動向はもちろん、読者の皆様にいち早くお伝えしたい重要な情報、
日々の取材活動や編集作業を通して感じた雑感などを読みやすいスタイルで提供します。

Mac Fan メールマガジン

掲載日:

ソフトウェアからどうしてファイルは開けるの?

著者: 千種菊理

ソフトウェアからどうしてファイルは開けるの?

ファイルとソフトウェア

特定のファイルを開くソフトウェアを固定したい場合、そのファイルを選択してコンテキストメニューから[情報を見る]を選択し、[このアプリケーションで開く]で任意のソフトウェアを選択すれば、そのように設定できます。さらに、[すべてを変更]をクリックすると、個別に開くソフトウェアを決めていない同じ形式のファイルすべてで、開くソフトウェアが変更されます。

たとえばHTML文書なら、普段はWEBブラウザで開いたほうが便利です。しかし、仮にホームページ用に自分で編集している最中のHTMLファイルであれば、テキストエディタやHTML専用のエディタで開いたほうが望ましいはず。そういうときには[すべてを変更]は押さずに、個別に変更すればよいのです。

さて、ではこのように1つのファイルを開くソフトウェアを変更した場合と、その同じ形式のファイルすべてを変更した場合、それぞれシステム上では何が起きているのでしょうか?

ファイル単位で開くソフトを設定する

任意のファイルを選択してコンテキストメニューから、[情報を見る]をクリック。[このアプリケーションで開く]で任意のソフトウェアを選択すれば、以降そのファイルは設定したソフトで開かれます。[すべてを変更]をクリックすると、個別に開くソフトウェアを決めていない同じ形式のファイルすべてで、開くソフトウェアが変更されます。[すべてを変更]を押すかどうかで、usroリソースを使うか、そのユーザのランチサービスの設定を変えるかが変わります。

usroリソースにある情報

1つのファイルでだけ開くソフトウェアを設定した場合、そのファイルには「usroリソース」という情報が書き込まれます。OS Xのファイルにはファイルの「本文」、ファイル名やサイズ、作成日時といった「属性」に加えて、「リソースフォーク」というデータを収めるための領域があります。usroリソースはこのリソースフォークの中に収まっており、ソフトウェアのパスといった、ソフトウェアを見つけるのに必要な情報が格納されているのです。OS Xはこのusroリソースを見つければ、まずそこで指定されたソフトウェアがシステム内にあるかを確認して、それを使ってファイルを開こうとします。

なお、リソースフォークの情報は何らかの拍子に消えてしまうことがあります。同じMacの中や、Mac同士でファイルをコピーしている分は問題ないですが、ウィンドウズを経由したり、ZIPファイルに格納したときにできる「__MACOSX」というフォルダを削除してしまったときなど、拡張属性が外れるような操作が起こると標準のソフトウェアに設定が戻ってしまいます。

ランチサービスの役割

usroリソースがないファイルを開こうとした場合、OS Xはそのファイル形式に対するデフォルトのソフトウェアを起動し、ファイルを読み込ませます。

このソフトウェアの起動に関わっているのが「ランチサービス(LaunchServices)」です。ファインダでソフトウェアやファイルをダブルクリックしたとき、ファインダ自身がソフトウェアを起動するのではなく、実はランチサービスというOSの仕組みに依頼しているのです。

ランチサービスは、どのファイルをどのソフトウェアで開くかを記憶しており、その設定に従ってソフトウェアを選択します。冒頭の設定操作は、このランチサービス内の設定を変更しているというわけです。

またランチサービスは、逆にどのソフトウェアがどのファイル形式を開けるのかも記憶しています。初期設定とは違う、ほかのソフトウェアで開こうとしたときに表示されるソフトウェアのリストは、このランチサービスから得られます。

そもそも、ソフトウェアの内部には「Info.plist」という、そのソフトウェアに関する情報を記載したファイルがあります。ソフトウェアが開くことができるファイルの形式も、このファイルに記載されています。ランチサービスは各ソフトウェアのInfo.plistに書かれた内容を集めて記憶しているというわけですね。

UTIが示す情報

では、ソフトウェアはInfo.plistにどういったことを記載して開けるファイルを定義しているのでしょうか? 下記の図1は、「プレビュー」のInfo.plistの一部を抜き出したものです。「CFBundleDocumentTypes」はこのソフトウェアで開けるドキュメント形式を記載した部分です。からまでの一塊が1つのドキュメント形式に対応します。最初のものは「フォルダ」について、その次が「PDF」ファイルを開けることが示されています。

プレビューにフォルダをドロップすると、そのフォルダの中に入っているプレビューが開けるファイルをすべて開き、タブで表示します。このため「フォルダ」も開く対象になっているのです。もちろんPDFファイルも開くことができます。

しかし、よく見るとこの2つの定義のどちらとも、拡張子などのファイル形式を識別する具体的な情報が書かれていません。「LSItemContentTypes」という情報で「public.folder」や「com.adobe.pdf」という形式を開けると書いてあるだけです。実は、この2つがファイルの形式を示す情報である「Uniform Type Identifier(UTI)」なのです。

OS Xのランチサービスは拡張子などから直接どのソフトウェアで開くかを識別しているのではなく、一旦UTIという情報に変換、UTIごとにどのソフトウェアで開くのかを検討しています。どのファイルがどのUTIに属するかは、「mdls」コマンドで表示できます。

ランチサービスは拡張子PDFのファイルが「com.adobe.pdf」のUTIに属するファイルだと知っているので、プレビュー側は「com.adobe.pdfを開ける」と宣言するだけで、拡張子がPDFのファイルを開けるのです。

このUTIの情報はファイルを開くときだけではなく、コピー&ペーストやiOSの「Open in」でも使用されます。UTIについては、次回詳しく説明しましょう。

プレビューのInfo.plistの一部(図1)

【 リソースフォーク 】

旧MacOSで使われていた属性で、ファイルのアイコンなど付随する情報や、ソフトウェアの場合はウインドウの形やメッセージといったものまで、このリソースフォークに格納していました。アプリケーションバンドルのおかげでOS Xでは不要になった領域ですが、「HFS+」では読み書きしやすい場所に管理されているため、usroリソースやファイル圧縮などの格納先として再利用されています。

【 __MACOSXフォルダ 】

OS X標準のアーカイバでZIPファイルを作成したとき、リソースフォークといったOS X独自の情報を格納するための用意されたフォルダ。フォルダの下にはZIPファイルに格納したファイルやフォルダと同じファイル名のファイルが用意され、そこにリソースフォークや拡張属性を格納します。OS XでZIPファイルを開いたとき、このフォルダがあったら、元のファイルに自動的に貼り付けてリソースフォークや拡張属性を復元します。ウィンドウズやLinuxなどを経由したときに_MACOSXフォルダが消されてしまうと、復元ができなくなってしまいます。

【拡張属性】

リソースフォークはMac独自の属性ですが、OS Xでは、UNIXやLinuxで標準化された「拡張属性(EA)」という属性も使用できます。実際、リソースフォークは「com.apple.ResourceFork」という拡張属性の1つとして扱われています。

【LS】

「LSItemContentTypes」の「LS」はまさしくランチサービス(LaunchServices)の略です。つまり、「ランチサービスでのアイテムの内容の形式」ということを意味します。

文●千種菊理

本職はエンタープライズ系技術職だが、一応アップル系開発者でもあり、二足の草鞋。もっとも、近年は若手の育成や技術支援、調整ごとに追い回されコードを書く暇もなく、一体何が本業やら…。