Interchange File Format

Interchange File Format（IFF）は、汎用ファイルフォーマットの一種。1985年にエレクトロニック・アーツが、コモドールの Amiga 向けに異なるアプリケーション間でのデータ転送を容易にするために開発した。
IFF には典型的な拡張子は存在しない。.iff という拡張子のファイルは ILBM フォーマットであることが多い。ILBM は IFF を使った画像フォーマットではあるが、IFFフォーマットを使っているのは ILBM だけではない（多くの場合、IFFファイルの拡張子はそれほど重要ではない）。

**構造**
IFFファイルはチャンク（chunk）から構成される。各チャンクの先頭には "Type ID" と呼ばれるフィールドがある（Macintosh では OSType、Microsoft Windows では FourCC とも呼ばれる）。その次に32ビット符号なし整数があり（IFFでは全ての整数はビッグエンディアンで表される）、その後のデータ（チャンクの中身）をバイト数で記述している。そのように各チャンクの長さを明示的に記述するため、解釈するときに処理に関係ないチャンクをスキップすることが可能である。
チャンクをグループ化する "FORM"、"LIST"、"CAT " といったチャンクもある。FORMチャンクは構造体のようなもので、様々なチャンクの入れ子が可能である。LISTチャンクは、一連の PROP （プロパティ）チャンクとそのプロパティが適用される入れ子になったチャンクグループからなる。CAT  は単なる入れ子になったチャンクの集まりであって、特に意味は決められていない。グループチャンクには、必要に応じて他のグループチャンクを含むことができる。グループチャンクにも長さが記述される。したがって、グループチャンクをスキップするのも容易である。
チャンクは必ずファイル先頭からのオフセットが偶数の位置から始まる。これはIFFが元々はMC68000向けだったためで、MC68000では1バイトより大きい単位でのロードは偶数バイトからでないと不可能だった。そのため、必要に応じてパディングが行われる。
IFFファイルは全体として1つのグループチャンク（FORM か LIST か CAT ）になっている。
チャンクはタイプによって中身の構造が異なり、数値データだったり、テキストだったり、何らかのデータだったりする。IFF形式のファイルをチャンクとして中に含めることもできる。各種IFFファイルで使われている標準のチャンクもいくつかある。"AUTH"（作者情報を含むテキスト）、"ANNO"（アノテーション、通常はそのファイルを作ったプログラム名）、"NAME"（作品名などのテキスト）、"VERS"（ファイルバージョン）、"(c) "（コピーライト情報テキスト）などがある。その他にいくつかの形式でよく使われるチャンクとして、"CMAP"（ILBMなどの画像フォーマットでのパレット情報）がある。またチャンク名が同じでもフォーマットによって意味が異なるものもある。例えば "BODY" は ILBM では画像そのものを指すが、8SVX では音声そのものである。具体的なファイルフォーマットに固有のチャンクもある。あるプログラムがIFFファイルを作るときに独自のチャンクを追加したとして、別のプログラムでそれを読むときでも問題は発生しない（知らないチャンクは単にスキップすればよいため）。これは、IFFや類似のフォーマットの大きな長所である。
入れ子可能で、説明を追加可能なファイルフォーマットであることから、XMLとの類似性があると言われている。ただし、XMLがテキストフォーマットであるのに対して、IFFには必ずバイナリデータ（チャンクの長さのフィールド）が含まれている。IFFを機械的にXMLに変換することは可能だが、XMLの方が機能的に拡張されているため、逆方向の変換は簡単ではない。

**IFFベースの主なファイルフォーマット**
16SV （標本ごとに16ビットを使用する音声フォーマット）
*8SVX （標本ごとに8ビットを使用する音声フォーマット）
*ACBM （Amiga Contiguous BitMap - PCXに似た画像フォーマット。マイクロソフトの AmigaBasic で使われた）
*AIFF （音声フォーマット）
*ANBM （アニメーションフォーマット。ILBMを複合した形式で、個々の画像を次々表示する）
*ANIM （アニメーションフォーマット）
*BIFF8 （Microsoft Excelでかつて使われていた形式）
*Alias/Wavefront Maya ファイルフォーマット （画像およびシーン記述）
*Word 文書 （Word 97 までのフォーマット）
*DjVu （高解像度の画像を埋め込める文書フォーマット）
*DR2D （二次元ベクターフォーマット）
*EMOD （QuadraComposer モジュールフォーマット）
*FNTR （ラスターフォントフォーマット）
*FNTV （ベクターフォントフォーマット）
*FPBM （LightWave Flexible Precision Buffer Map 画像フォーマット）
*FTXT （テキストフォーマット）
*GSCR （楽譜フォーマット）
*IFRS （Blorb とも。インタラクティブフィクション用フォーマット）
*IFZS （Quetzal とも。ゾークの内部インタプリタ用プログラムファイル）
*ILBM （ビットマップ画像フォーマット）
*LWOB （LightWave 3次元オブジェクトフォーマット）
*LWO2 （LightWave 3次元オブジェクトフォーマット）
*PDEF （Deluxe Print page definition）
*PICS （Macintosh QuickDraw の画像をIFFフォーマットでカプセル化したもの）
*PLBM （画像フォーマット）
*SHRI （Shriアーカイブ）
*SMUS （Simple Music format、MIDIに類似したフォーマット）
*TDDD （3次元オブジェクトフォーマット）
*USCR （楽譜フォーマット）
*UVOX （音声フォーマット）
*VDEO （動画フォーマット）
*YAFA （アニメーションフォーマット）

**IFFフォーマットのクローンおよび派生フォーマット**
 RIFF - マイクロソフトとIBMによる派生フォーマット。違いは、先頭に "RIFF" という文字列がある点と、整数表現にリトルエンディアンを使っている点である。例えばAVIやWAVはRIFFの一種である。ビッグエンディアン版の RIFX も定義されているが、ほとんど使われていない。- TIFF - アルダスが PostScript に高色深度のビットマップ画像を含めるべく設計したフォーマット。IFF のようなチャンク構造を持つが、画像のフォーマット自体は ILBM ではない。- 標準MIDIフォーマットはIFFの基本概念を取り入れているが、IFFの規格には従っていない。- PNGもIFFからチャンクの概念を取り入れているが、構造は異なる。- QuickTime (.mov) と MP4 もIFFのチャンクの概念を取り入れているが、それを「アトム」と呼んでおり、配置が異なる。また、4GBを超えるチャンクも扱える。- 3dstudio (.3ds) はチャンク名に4バイトではなく2バイトを使った3次元シーンフォーマット- Nero Burning ROMは、CDイメージファイルのフォーマットにIFFチャンクの概念を使っている。ただしチャンクデータは最後尾にある。また、用語もIFFとは異なる。

**外部リンク**
 About Interchange File Format- “EA IFF 85”: Standard for Interchange Format Files - オリジナルのIFF仕様。EA の Jerry Morrison による（1985年1月14日）- Interchange file format entries at File Extensions Encyclopedia- Amiga files formats- IFF FORM AND CHUNK REGISTRY- "Standards and specs: The Interchange File Format (IFF)" IBM developerworks