article

resource fork

リソースフォーク(resource fork)とは、Mac OS特有のファイルの構造のことで、実際のデータを表すデータフォークとは別に、アイコンやウィンドウの形状、メニューの内容や定義、アプリケーションコード (機械語)などといった特定の形式の情報を持つが、それをリソースフォークという。単に「リソース」と呼ぶこともある。また、情報そのもののことをとくに「リソースデータ」という。リソースフォークの存在によりデータにさまざまな付加情報を簡単に記録したり、ファイル名に拡張子がなくてもファイルのアイコンを決めたり開けるアプリケーションを判断できる。これに対して、実際のデータ部をとくに「データフォーク」と呼ぶ。データフォークは、Windowsなど、Mac OS以外のオペレーティングシステムでデータを記録する部分と同じである。Windowsにもリソースという概念はあるが、Mac OSのそれとは全く異なるものである。

Mac OS Xでは、アプリケーションの開発時にリソースを利用することもできるが、UFS上での利用を配慮してか、リソースフォークを丸ごとデータフォークに移したファイル (Raw Resource File) を利用するようにも設定出来る。

リソースフォークはリソースエディタと呼ばれる部類のエディタで編集することが出来るため、ソフトウェアローカライズカスタマイズが行える。また、大抵のリソースエディタは視覚的にデータを編集できる。また、Appleが無償で提供する統合開発環境MPWApple Developers ToolsにはRezと呼ばれるコンパイラが存在し、Rez専用の言語 (これもRezと呼ばれる) で記述されたソースコードコンパイルすることでリソースフォークを作成することも出来る。逆に、リソースフォークからRezコードに戻すための逆コンパイラ、DeRezも同梱されている。

なお、リソースフォークはHFSHFS+と呼ばれるファイルシステムだけがサポートしているため、他のファイルシステムを利用しているオペレーティングシステムでは利用できない。HFSは現在のところMac OSだけがサポートしているため、事実上Mac OSだけの機能になっている。ただし、Mac OSでも、UFSと呼ばれるファイルシステムにインストールしたシステムではリソースフォークを扱えない。しかしながら、リソースフォークを実際のデータとは別のファイルに分離し、オペレーティングシステムが管理できるようにはなっている。なお、現在Mac OSで最も利用されているHFS+では、データフォークとリソースフォーク以外のフォークも扱えるように設計されているが(マルチフォーク)、フォークの存在によって他のオペレーティングシステムとの間でのファイル交換を難しくしているため、使わなくなってしまっている。また、リソースフォークさえも、Mac OS Xではあまり利用されなくなってきている。

リソースフォークの構造は、リソースデータの配置を記録する「リソースマップ」と呼ばれるデータがあり、これによりリソースデータに定義されたIDや名前によってランダムアクセスを可能にしている。それとは別にリソースデータが記録され、大まかに分けてこの二つで構成されているが、実際には一つのタイプに複数のデータを記録できる階層構造になっている。リソースデータは、記録する情報の種類によって情報の記録形式が定義されており、その種類のことを「リソースタイプ」という。なお、リソースタイプは自分で自由に定義できる。また、リソースデータは他のタイプのデータを参照していることがよくある。

リソースフォークの構造


  • ヘッダ (リソースデータおよびリソースマップの開始位置や長さなどを記録)
  • リソースデータ (実際のデータ。データの先頭4バイトにデータ長を記録している。データごとに複数個存在する)
  • リソースマップ (リソースデータがどこに記録されているかなどを記録。内部は以下のようになっている)
    • リソースタイプリスト (どのようなリソースタイプが使用されているかなどを記録)
    • リソース参照リスト (指定IDが持つリソースデータの開始位置とそのリソースにつけられた名前への位置を記録)
    • リソース名リスト (リソースデータに対して名前でアクセスする際に利用する名前を記録)

リソースフォークにアクセスする仕組み


リソースフォークへのアクセスは「リソースマネージャ」と呼ばれるプログラムを介して行う。
  1. リソースフォークにアクセスされると、ヘッダからリソースデータおよびリソースマップの開始位置や長さなどを読み込む。
  2. 読み込むべきリソースタイプが指定されると、リソースタイプリストからそのタイプが存在するかのチェックと、そのタイプが含むデータの個数とリソースマップの開始位置から数えたリソース参照リストへのオフセットを調べる。
  3. リソース参照リストから、リソースID、リソース名へのオフセット、リソースの属性、リソースデータの開始位置から数えたデータのオフセットを調べる。
  4. 指定されたIDあるいは名前のリソースデータが存在したら、先ほど得たオフセットへアクセスし、データ長を調べ、そこに記録された分だけデータを読み込み、戻り値として返す。

リソースフォークにおけるデータタイプ


リソースフォークを構成する最小単位のことをデータタイプという。データタイプとは、その名の通りデータのタイプ (種類) を表すもので、複数種類が存在する。リソースフォークにアクセスした後は、あらかじめ定義しておいたデータタイプ通りに読み込んでいくことで内容を把握できる。データをどのように扱うかはプログラム内部であらかじめ定義しておくことも、TMPLリソースと呼ばれるリソースに記録しておくことも可能である。後者の方法であればResEditなどで見たときにある程度視覚化されるため、後から編集しやすくなる。

以下に、主なデータタイプを、アルファベット順に並べ替えて挙げる。

データタイプ (実際の名前) 概要
BBIT (バイナリビット) 真偽値 (真か偽か) を1ビットで表す。常に8の倍数個のBBITが必要。
BOOL (ブーリアン) 真偽値を表す。2バイトで構成され、256が真、0が偽。
CHAR (キャラクタ) 1バイトの文字を表す。
CSTR (Cストリング) C言語の文字列と同じ文字列を表す。
DLNG (10進ロングワード整数) 10進数のロングワード (4バイト) 整数。およそ-21億〜21億までの整数を表す。
HEXD (16進数ダンプ) このタイプが現れた位置から末尾までを16進数で表す。コードリソースや圧縮されたデータなどを表す際に用いられる。
HLNG (ロングワード16進数) データを4バイト分の16進数値として扱う。C言語でいう unsigned long で21億以上の整数を表した場合などに用いられる。
PSTR (Pascalストリング) 最初の1バイトに文字列の長さを記録したPascalストリングを表す。
TNAM (タイプ名) 常に4バイトで構成される、クリエータコードなどを表す文字列。
RECT (矩形) 矩形の各辺の座標を表す。常に8バイトで構成される。

主なリソースタイプ


リソースタイプの名前(実際の名前)概要
ALRT(アラート)アプリケーションのアラートボックスの形状を定義する
APPL(アプリケーション)アプリケーションの情報を格納する
BNDL(バンドル)アプリケーションで扱えるファイルタイプのアイコンなどを定義する
cicn(カラーアイコン)データで利用するカラーアイコンを定義する
clut(カラーパレット)データで利用する色を定義する
CNTL(コントロール)ウィンドウに配置する部品の詳細を定義する
CODE(コードリソース)プログラムの機械語を格納する
CURS(カーソル)モノクロのカーソルの形状を定義する
DITL(ダイアログアイテムリスト)ウィンドウの部品を定義する
DLOG(ダイアログ)アプリケーションのダイアログボックスの形状を定義する
FREF(ファイル参照)アプリケーションで扱えるファイルタイプを定義する
hfdr(アイコンバルーンヘルプ)Finderで、ファイルにカーソルを重ねた際に表示させるバルーンヘルプの内容や形式の定義
icl8(8ビットアイコンリスト)Finderで表示するアイコンを定義する
icns(32ビットアイコンリスト)Finderで表示する大型アイコンを定義する
ICON(アイコン)データで利用するモノクロアイコンを定義する
kind(ファイル概要)ファイルタイプの概要を定義する
MBAR(メニューバー)アプリケーションのメニューバーとメニューを定義する
MDEF(メニュー定義)アプリケーションのメニューを定義する。カラーパレットのような複雑な形状のメニューも定義できる
MENU(メニュー)アプリケーションのメニュー項目を定義する
MooV(ムービー)QuickTimeムービーを格納する
open(オープン)アプリケーションが開けるファイルタイプを定義する
PICT(ピクチャ)ファイルに含まれているPICT画像を格納する
PREF(プレファレンス)アプリケーションの環境設定を記録する
snd (サウンド)ファイルで利用するサウンドを格納する
STR (文字列)ファイルで利用する文字列と16進データを格納する
STR#(文字列リスト)ファイルで利用する文字列を複数格納する
styl(スタイル)テキストの書体や文字の色、大きさといったスタイル情報を定義する
TEXT(テキスト)テキストを格納する
TMPL(テンプレート)リソースデータのフォーマットを定義する
vers(バージョン)そのファイルのバージョンや使用する地域を定義する
WDEF(ウィンドウ定義)アプリケーションのウィンドウを定義する。不定形ウィンドウなども定義できる
WIND(ウィンドウ)アプリケーションのウィンドウの形状を定義する

主なリソースエディタ


  • ResEdit(レスエディット。Appleが無償で配布している。一般的なリソースデータを視覚的に編集できる。構造がわかれば、さまざまなリソースデータを視覚化できる。)
  • Resourcerer(リソースラ。高価ながらも、ResEdit以上に多くのリソースデータを視覚的に編集できるため人気は高い)
  • HexEdit(ヘックスエディット。一般に言うバイナリエディタで、実際はリソースフォークよりもデータフォークの編集に多く使われる)

OSのファイルシステム | Mac OS

 

This article is licensed under the GNU Free Documentation License. It uses material from the "リソースフォーク".

Home Pageartsbusinesscomputersgameshealthhospitalshomekids & teensnewsphysiciansrecreationreferenceregionalscienceshoppingsocietysportsworld