リソースフォークとは
リソースフォークは、かつての
Classic Mac OSで採用されていた、ファイル構造における独特な概念です。データの実体を格納する「データフォーク」とは別に、
アイコン、ウィンドウの形状、メニュー定義、アプリケーションコードといった、定型化された情報を「リソースデータ」として保持するために用いられました。
このリソースフォークの存在により、データに様々な付加情報を容易に記録することができ、アプリケーションのカスタマイズやローカライズを柔軟に行うことが可能でした。データフォークは、Windowsなど他のOSでデータが記録される部分と同様です。Windowsにも「リソース」という概念はありますが、
Classic Mac OSのものとは大きく異なります。
Classic Mac OSでは、Finder情報と呼ばれるメタデータも存在しましたが、現在のmacOSではリソースフォークとFinder情報は「拡張属性(EA)」として扱われるようになりました。
対応システム
リソースフォークは、HFSおよびHFS+
ファイルシステムと、AFP
ファイル共有プロトコルでのみサポートされています。これらの
ファイルシステムとプロトコルは
Classic Mac OSのみでサポートされていたため、リソースフォークは事実上
Classic Mac OS固有の機能でした。
ただし、
Classic Mac OSはUFS
ファイルシステムにも
インストール可能で、この場合はリソースフォークは別のファイルとして管理されました。
現在のmacOSで主流のHFS+では、データフォークとリソースフォーク以外のフォークも扱える「マルチフォーク」構造が採用されており、macOS(v10.3以降)では拡張属性や
アクセス制御リストといったセキュリティ機能が提供されています。
Windows NT以降で採用されたNTFS
ファイルシステムでは、代替データストリームを利用してリソースフォークを保存できます。SFM (Service for Macintosh) を用いて
Classic Mac OSからWindowsへファイルを転送した場合にこの機能が使われました。
リソースフォークの編集
リソースフォークは、「ResEdit」などのリソース
エディタで編集可能です。これにより、
ソフトウェアのローカライズやカスタマイズが容易に行えました。リソース
エディタの多くは、視覚的にデータを編集できるインターフェースを備えています。
また、
Appleが提供する
統合開発環境「Macintosh Programmer's Workshop (MPW)」や「
Apple Developer Tools」には、「Rez」と呼ばれる
コンパイラが含まれており、Rez専用言語で記述された
ソースコードからリソースフォークを作成することもできました。さらに、リソースフォークからRezコードに戻すための逆
コンパイラ「DeRez」も提供されていました。
ただし、リソースフォークの編集はファイルを破損させる可能性もあるため、構造を理解した上で、自己責任で行う必要がありました。
リソースフォークの構造
リソースフォークの構造は、以下の要素で構成されています。
ヘッダ: リソースデータとリソースマップの開始位置や長さなどの情報を記録します。
リソースデータ: 実際のデータが格納されます。各データの先頭4バイトにはデータ長が記録され、一つのタイプに複数のデータが存在可能です。
リソースマップ: リソースデータがどこに記録されているかを示す情報です。
リソースタイプリスト: どのようなリソースタイプが使用されているかを記録します。
リソース参照リスト: リソースIDに対応するリソースデータの開始位置やリソース名への位置を記録します。
リソース名リスト: リソースデータに名前でアクセスする際に使用する名前を記録します。
リソースフォークへのアクセスは、「リソースマネージャ」と呼ばれるプログラムを介して行われます。リソースマネージャは、ヘッダから開始位置や長さを読み込み、指定されたリソースタイプ、ID、または名前のリソースデータをリソースマップを基に特定し、データを返します。
リソースフォークにおけるデータタイプ
リソースフォークを構成する最小単位を「データタイプ」と呼びます。データタイプは、データの種類を表し、様々な種類が存在します。リソースフォークからデータを読み込む際は、データタイプに従って解釈されます。
データの扱い方は、プログラム内部で定義することも、「TMPLリソース」と呼ばれるリソースに記録することも可能です。TMPLリソースを用いることで、リソース
エディタでデータ構造を視覚化し、編集しやすくすることができます。
主なデータタイプ
代表的なデータタイプには、以下のものがあります。実際には非常に多くのデータタイプが存在します。
(データタイプの一覧は、原文に記載されているデータタイプがアルファベット順に並んでいますが、内容が複雑になるため割愛します)
主なリソースタイプ
リソースタイプは、4文字の半角英数字で表現され、末尾に半角スペースが必要なものもあります。(例: `snd `、`STR `など)
(リソースタイプの一覧も、内容が複雑になるため割愛します)
ResEdit: Appleが無償で配布している一般的なリソースエディタです。リソースデータを視覚的に編集できます。
Resorcerer: ResEditよりも高度な編集機能を持つ有償のリソース
エディタです。
HexEdit: バイナリエディタで、データフォークの編集によく使用されますが、リソースフォークの編集にも利用できます。
リソースフォークの転送と保存
リソースフォークはファイル本体とは別の情報であるため、別のOSに転送したり、HFS/HFS+以外のファイルシステムに保存する場合には特別な配慮が必要です。これはClassic Mac OSに限らず、ファイル本体とは別のメタデータを持つファイルシステム全般に言えることです。
Classic Mac OS時代のアプリケーションを配布したり、サムネイルアイコン付きの画像を転送する際には、MacBinary、BinHex、AppleSingle、AppleDoubleといったフォーマットが使用されました。これらのフォーマットは、リソースフォークだけでなくFinder情報も扱います。
現在では、アーカイブファイルやディスクイメージとして配布する方法が一般的です。これらの方法では、複数のファイルを一つにまとめたり、エイリアスを扱えたり、データの圧縮も可能です。
アーカイブ形式としては、Compact ProやStuffItが利用され、MacLHAではMacBinary形式にしてからLHAアーカイブに格納する方法が使われました。ディスクイメージ形式としてはIMGフォーマットが利用されました。
現在のmacOSでは、AppleがZIP形式やTAR形式を拡張し、リソースフォークなどのメタデータを保存できるようにしています。これはAppleDoubleフォーマットを用いて、データフォークとその他のメタデータを分けてアーカイブに格納する手法です。また、DMGと呼ばれる新たなディスクイメージも採用されています。
リソースフォークの現状
インターネットの普及により、異なるOSのユーザー間でファイルを共有する機会が増え、リソースフォークが他のOSのユーザーを困惑させるという問題が発生しました。そのため、macOSではリソースフォークの使用を抑制するようになりました。
また、リソースフォークの代替として、「バンドル」と呼ばれるフォルダ階層内にリソースフォークにあたるデータを格納する方式も採用されています。特に定型化された情報が多いアプリケーションでは、バンドルが多用されています。
これらの改良により、ファイル共有が容易になり、リソースフォークを持たないUNIXソフトウェアの移植も簡単になりました。
macOSでは拡張子を付けることが推奨されていますが、プロパティリストを使って、ユーザーが拡張子を意識することがないように工夫されています。
関連項目
フォーク (
ファイルシステム)
拡張ファイル属性
AppleSingleと
AppleDouble
BinHex
Macバイナリ