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

AppleSingle
拡張子.as
MIMEタイプapplication/applefile
タイプコードApSi
UTIpublic.archive.applesingle
マジック
ナンバー
0x00051600
開発者アップルコンピュータ
包含物データフォーク、リソースフォークファイル名、コメント、アイコンタイムスタンプFinder情報
AppleDouble
MIMEタイプmultipart/appledouble,
application/applefile
マジック
ナンバー
0x00051607
開発者Apple Computer, Inc.
包含物リソースフォーク、ファイル名、コメント、アイコン、タイムスタンプ、Finder情報 他

概要編集

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は、AppleComputer社(当時)の最初のUNIX系OSであるA/UX上のファイルシステムで使うために考案された[1]

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

バージョン2はHFS+の拡張にあわせて1990年に発行された[2]

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

実装例編集

macOS編集

macOSがHFS、HFS+、AFP以外のファイルシステム、すなわちUFSFATSMBNFSWebDAVといったファイルシステムにファイルを保存する際、AppleDouble バージョン2を用いる。すなわちAppleDouble Data file (データフォーク)を本来のファイル名で保存し、AppleDouble Header fileを「._」を先頭に付けたファイル名で保存する[4]

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のファイルをつくり、これに拡張属性を格納する。

電子メール編集

RFC 1740 では、主に電子メールで使われるフォーマット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のデータを保存するが、リソースフォークが拡張属性に入りきらない場合は別途「._」を前置したファイル名で保存する。

参照編集

  1. ^ AppleSingle and AppleDouble format internals
  2. ^ AppleSingle/AppleDouble Formats for Foreign Files Developer's Note (pdf)
  3. ^ カーネルxnu-792に含まれるvfs_xattr.cのソースコード
  4. ^ Mac OS X: Apple Double フォーマットは接頭辞に「._ 」を持つファイル名を作成します

関連項目編集