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

Mac Fan メールマガジン

掲載日:

UTIって何? どういった点が便利になるの?

著者: 千種菊理

UTIって何? どういった点が便利になるの?

なぜ必要? UTI

「UTI(Uniform Type Identifier)」は、ファイルや、サーバから送られてきたコンテンツ、コピー&ペースト時にやりとりするデータなどのドキュメント形式をOS Xが識別するのに使用する情報です。たとえばテキストファイルのUTIは「public.text」、PDFファイルは、「com.adobe.pdf」、キーノートのファイルであれば「com.apple.iwork.keynote.key」などと示されます。

さて、UTIがなぜ必要なのかを示す前に、まずはUTIがまだ存在しなかった、大昔のコンピュータの状況を振り返ってみたいと思います。

UTIは何を見ているのか

それぞれのUTIには該当する拡張子やファイルタイプ、MMEタイプなどが定義されており、OS Xはそれらをヒントにファイルの形式を判断、どのソフトで読み込むかを決定します。UTIに該当するソフトがなかった場合、そのUTIの上位のUTIでの読み込みに指定されているソフトが使用されます。

ファイルという概念

そもそも古来のコンピュータでは、利用者は自由にディスクにデータを書き込むことができませんでした。ディスク上のどこからどこまでを使うか、その中の構造(データセット)はこうだ、などとすべてを宣言してやっと固定サイズのデータ領域を分けてもらえたのです。よって、ディスク上のどこを使うかでI/O性能が容易に予想でき、サイズを固定で割り当てられるので、ディスク容量が溢れるということが無縁でした。しかし、データを書き込むたびにサイズやディスク上の位置をいちいち決めるのって、不便ですよね?

そこで、UNIXやMS-DOSといったもう少し新しいOSからは、「ファイル」という概念が導入されました。OSはファイルの中身について関知しないので、任意のデータが書き込めます。ユーザがファイルを作るとディスクの上の空いているところを適当に確保して、ファイルが大小に応じてディスクの使用域を広げてくれるようになりました。

このディスク上にファイルを配置するOSの仕組みや、ディスクの上にファイルをどう配置するのか、ファイルの管理にどういったデータを保存するか、といったレイアウトを「ファイルシステム」と呼びます。たとえば「FAT」や、「HFS+」などが具体的なファイルシステムの名前です。当然ファイルにはデータを好きに書けますし、そのデータが何であるかはユーザが管理することになります。

ファイル形式をどう示す?

UNIXではファイル名の末尾に「.tar」や「.conf」などの、ファイル形式を示す記号を入れました。これを「接尾子(suffix)」といいます。さらにMS-DOSのファイルシステムであるFATでは、ファイル名8文字に加えて、ファイル形式を示す末尾の記号専用に3文字を確保し「8+3」文字でファイル名を作るようになりました。この+3文字は「拡張子(extension)」と呼ばれ、現在では接尾子も拡張子と呼ぶのが一般的です。

拡張子は便利でしたが、どのファイルにどの拡張子を割り当てるのかはあくまで慣習で決まっており、OSがあらかじめ確保している専用の拡張子以外は、いわば「早い者勝ち」で使っていくような状態でした。「.TXT」ならテキストファイルだとだいたい合意が取れますが「.PCF」だと何かわからないし、「.PL」のように重複する場合も出てきます。

一方昔のMac OSでは、ファイルごとに「ファイルタイプ」という4文字の情報を記入できるようにしました。この4文字はアップルが管理しており、用途を申請させることで重複を防いでいました。

ファイルタイプにより明確にどの形式かがわかるようになりましたが、ファイルタイプがあるのはMac OSのファイルシステムだけで、ほかのOSでは利用できない情報でした。また4文字では使いたい、わかりやすい表記はすぐに使われてしまいます。

インターネットが普及してきた時代になると、WEBサーバやメールの添付ファイルなどでファイルが送られてくるようになりました。このとき、必ずしも「ファイル名」がついているわけではありません。

そこで、「MIMEType」と呼ばれる形式を示すデータを併せて送るようになったのです。「text/plain」なら普通のテキストファイル、「/files/user/img/brand/macfan/article/2016/08/jpeg」ならJPEG画像、といった具合です。MIME Typeは「IANA」という公的機関で管理されており、「RFC 4288」というドキュメントで公開されています。

MIME Typeは便利ですが、少し不便な場合もあります。たとえば「text/html」を開くときを考えてみましょう。HTML文書は普通のテキストエディタでも開けますが、HTML専用エディタで開いたほうが便利ですよね。どちらで開いたほうがいいかは、OS側からはすぐにはわかりません。

OS X 10・3まではこれらの拡張子、ファイルタイプ、MIME Typeに個別対応していました。すると、たとえば同じ「JPEG」ファイルでも、拡張子「.jpg」ファイルは「フォトショップで開く」と指定したのに、拡張子「.jpeg」のファイルは「プレビュー」で開かれてしまうなど、不便なことが起きていました。

「識別」と「使用」を区別するUTI

そこで考えられたのが、冒頭の「UTI」です。UTIはファイル「形式」だけが記載されています。たとえば「public.text」がテキストファイルで、「com.adobe.pdf」がPDFファイルです。広く使われるファイル形式は「public.」からはじまるUTIがすでに用意されていて、特定の組織が定義するファイル形式は「‹ドメインの逆順›・‹形式名›」で宣言することでUTIの重複を防いでいます。

もう1つ重要な点は、UTIは階層構造を持つ、ということです。たとえば、フォトショップが作成するPSDファイルは、UTIだと「com.adobe.photoshop-image」と記載されます。そして「com.adobe.photoshop-image」の上位UTIは「public.image」と宣言されています。PSDファイルを開こうとしたとき、フォトショップなど「com.adobe.photoshop-image」のUTIに対応するソフトがあればそれで開きますが、もしない場合は、親UTIである「public.image」に対応したソフトがあるかを調べてそちらで開くのです。

では、どのファイルがどのUTIに対応するのでしょう? これは、前号で解説した「ランチサービス(LaunchServices)」が決めます。UTIの宣言時に、使われそうな拡張子やMIME Type、ファイルタイプ情報等も併せて宣言されます。ランチサービスはこうした情報を元に、何のファイルかを識別するのです。先のPSDファイルの場合、拡張子が「.psd」であるほかに、ファイルタイプに「8BIM」が記載されているものも「com.adobe.photoshop-image」と見なされます。

UTIはiOSでも活用されています。たとえば「Open In」機能(ドキュメントをほかのアプリで開く機能)では、ドキュメントの送出元のアプリがそのドキュメントのUTIを示し、そのUTIを開くことができるアプリだけが一覧に表示されます。UTIがあることで「それがどの形式か」と「その形式を開くにはどうすればいいか」を分けて考えられるようになります。標準的なUTIはOS X、iOSで既に用意されているので、ソフトはただ「このUTIの文書を開けます」などと宣言するだけです。新しいUTIを宣言するときは、その形式でどういった拡張子やファイルタイプ、MIMTypeが使われているかも併せて宣言して、ランチサービスが判断できるようにします。

もちろん、ユーザがUTIを知る必要はありません。しかし、UTIという仕組みが裏にあることで、OS XやiOSはよりユーザに即した動きができるとわかるはずです。

UTIの階層構造

名称の階層とは独立して、UTIは意味上の階層を持ちます。たとえば、HTML文書は広い意味でのテキストで、フォトショップは広い意味での画像ファイルと位置づけられます。

【 拡張子 】

8+3文字で拡張子を表記する方法自体は、MS-DOS以前に存在した「CP/M」というOSですでに存在していました。CP/Mはこれまた汎用機向けOSだった「VMS」などから拡張子という概念を受け継いでいた形です。一部のシステムのみで使われる概念だった拡張子は、現在では広い範囲で使われています。

【 UTExportedTypeDeclarations 】

UTIの新規定義は「UTExportedTypeDeclarations」というキーで行います。では「UTImportedTypeDeclarations」は何かというと、すでに宣言されているUTIをこのソフトでも使用するという宣言です。たとえばマイクロソフト・オフィスのファイル形式ほどになるとOS Xの標準で宣言されているため、新規作成の「Exported」ではなく、既存を受け継ぐ「Imported」になるわけです。

【dutiコマンド】

UTIや関連付けを操作するツールとして以前は「RCDefaultApp」が有名でしたが、OS Xヨセミテ以降では動作しないことがある模様です。現在では、「duti.org」で配布されているdutiコマンドを使うのが確実だといえます。

【.tar】

「.tar」はUNIXのアーカイバ、tarコマンドの作るアーカイブに付けられる拡張子です。tarは複数のファイルを1ファイルにまとめるだけで、圧縮機能をもたないため、gzipやbzip2という圧縮専用コマンドと併用して、結果、.tar.gz、tar.bz2という拡張子をよく見かけます。

文●千種菊理

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