AppleSingle

AppleSingleとAppleDoubleは、Classic Mac OSのファイルシステムHFS及びHFS+上のファイルを他のファイルシステムと交換する際に、様々なファイル属性（特にリソースフォーク）が欠落するのを防ぐ目的でAppleが考案したフォーマットである。バージョン1とバージョン2が存在するが、現在のmacOSは互換性のない拡張をおこなったバージョン2のAppleDoubleを用いる。

 概要 
Mac OSではひとつのファイルに、リソースフォークとデータフォークという2つのフォークがあり、更に様々なメタデータ（コメント、ファイル時刻、Finder情報など）がある。特にファイル時刻には作成時刻、変更時刻、バックアップ時刻、アクセス時刻がある。Finder情報はクリエータとファイルタイプを含んでいる。

これらを全て扱えるのはHFSやHFS+といったファイルシステムやファイル共有プロトコルのAFPしかない。それ以外のファイルシステムではデータフォークと、ファイル時刻などそのファイルシステムが扱える僅かなメタデータしか扱えない。

AppleSingleは2つのフォークと様々なメタデータを1つのファイルにまとめて保存するフォーマットである。

AppleDoubleは2つのファイルに分離して保存するフォーマットである。1つ目はAppleDouble Data fileといい、データフォークそのものである。2つ目はAppleDouble Header fileといい、データフォーク以外を全て含む。これはAppleSingleからデータフォークを除き、マジックナンバーを変えただけのものである。

 利点と欠点 
Mac OSではデータフォーク以外の情報が必要とされる場合があるため、AppleSingleまたはAppleDoubleで転送及び保存することには大きな利点がある。

Mac OS以外では事情が複雑である。AppleSingleの場合、ファイルが1つであるため情報の欠落がない。しかしながら、AppleSingleを理解するソフトウェアでなければ取り扱う事が出来ない。AppleDoubleの場合、AppleDouble Data fileの方でデータフォークを扱うことが出来る。しかしながら運用に注意しなければAppleDouble Header fileを損失してしまう危惧がある。

 歴史 
初期のバージョン1は、Apple Computerが開発した最初のUNIX系OSであるA/UX上のファイルシステムで使うために考案されたAppleSingle and AppleDouble format internals。

AppleSingleと似たフォーマットにMacバイナリがあり、当時はこちらの方が多用された。しかしながらHFS+の拡張に伴い、Macバイナリでは不十分になってきた。

バージョン2はHFS+の拡張にあわせて1990年に発行されたAppleSingle/AppleDouble Formats for Foreign Files Developer's Note (pdf)。

2005年に発売されたMac OS X v10.4以降では、バージョン2を拡張し互換性のなくなったAppleDoubleを用いる。これの仕様書は発行されていないが、Appleの公開するカーネルソースコードで仕様を知ることができるカーネルxnu-792に含まれるvfs_xattr.cのソースコード。

 実装例 
 macOS 
macOSがHFS、HFS+、AFP以外のファイルシステム、すなわちUFS、FAT、SMB、NFS、WebDAVといったファイルシステムにファイルを保存する際、AppleDouble バージョン2を用いる。すなわちAppleDouble Data file (データフォーク)を本来のファイル名で保存し、AppleDouble Header fileを「._」を先頭に付けたファイル名で保存するMac OS X: Apple Double フォーマットは接頭辞に「._ 」を持つファイル名を作成します。

Mac OS X v10.3 Panther以降のFinderの機能(BOMArchiveHelper)でZIP圧縮した場合、__MACOSXという名前のフォルダを作ってその中にAppleDouble Header fileを保存する。ただしコマンドラインの/usr/bin/zipだとデータフォークのみが扱われる。

Mac OS X v10.4 Tiger以降の/usr/bin/tarコマンドでは、AppleDouble Header fileを「._」を先頭に付けたファイル名で保存する。また、このバージョン以降は拡張属性 (EA)を使うことができるため、AppleDouble バージョン2を拡張してEAも保存できるようになった。これは本来32バイトであるFinder情報の保存領域を拡張し、Finder情報の後ろにEAを追加記録するというものである。これにより従来のバージョン2と互換性がない。

Mac OS X v10.5迄は、拡張属性をサポートしないAFPサーバにファイルを保存すると拡張属性が失われた。Mac OS X v10.6では、こうしたサーバに保存する際、先頭に「._」を付けたファイル名でバージョン2のファイルをつくり、これに拡張属性を格納する。

 電子メール 
 では、主に電子メールで使われるフォーマットMIMEでAppleSingle及びAppleDouble バージョン2を扱う方法を定義している。これはMac OS用の電子メールクライアントの多くで実装されている。

AppleSingleのMIMEタイプはapplication/applefileを用いる。AppleDoubleの場合、MIMEタイプはmultipart/appledoubleを用いてマルチパート化し、AppleDouble Headerの方にapplication/applefileを用いる。
Mac同士でメールをやりとりする分にはなんら問題は生じないが、ほかのOSを相手にするとデータフォーク以外が邪魔になって本来のデータが得られなくなってしまう場合が多い。そのため、Mac以外とやりとりする際はデータフォークのみを送信するか、multipart/appledoubleを用いるのが望ましいだろう。

 netatalk 
Unix系OSでAFPサーバ機能を提供するnetatalkでは、AppleDoubleを用いている。
netatalk 1.xでは、AppleDouble Data file（データフォーク）を本来のファイル名で保存し、.AppleDoubleなるディレクトリを作成してその中に同じファイル名でバージョン1のAppleDouble Header fileを保存する。netatalk 2.xではこれをバージョン2のAppleDouble Header fileにおきかえた。netatalk 3.xでは拡張属性の中にAppleDouble Header fileのデータを保存するが、リソースフォークが拡張属性に入りきらない場合は別途「._」を前置したファイル名で保存する。

 参照 

 関連項目 
 Macバイナリ
 BinHex

Category:Appleのソフトウェア
Category:Mac OS
Category:ファイルフォーマット
Category:電子メール
1740