INIファイル

INIファイルは、ソフトウェアの設定などを記録するために用いられるファイル形式の一つ。構造の単純なテキストファイルであり、設定ファイルのフォーマットとしてよく使われている。INIファイルは主にWindowsで使用するが、他のプラットフォームでも使われるdb2cli.ini 初期設定ファイル - IBM Documentation。
INIファイルという名前はこのファイルの一般的な拡張子「.INI」から来ている。INIとはinitialization（イニシャライゼーション）の略であり、その他にconfiguration（コンフィギュレーション）の略である「.CFG」や「.conf」、あるいは「.TXT」なども使われる。

 フォーマット 
基本的なフォーマットを以下に示す。
 パラメータ
 INIファイルに含まれる重要な要素が「パラメータ」（もしくはエントリとも呼ばれる）である。個々のパラメータは「名前」（もしくはキーとも呼ばれる）と「値」を持ち、等号（=）で区切られる。等号の左辺が名前、右辺が値である。
 name=value
 セクション
 パラメータは任意の名前を持つ「セクション」でグループ分けすることができる。セクション名は角カッコ ([XXX]) で囲み1行を占める。セクションの宣言の後に現れるパラメータはそのセクションに属する。明示的にセクションの終わりを示す区切り文字はなく、次のセクションの宣言かファイルの終端でセクションは終わる。よってセクションはネストすることができない。
 [section]
 コメント
 コメントの開始はセミコロン（;）によって示される。コメントはその行の終わりまで続く。セミコロンと行末の間の全ては無視される。
 ; comment text

 その他の機能 
INIファイルのフォーマットは規格化・標準化はされておらず、明確には決まっていない。多くのプログラムは上で示す基本機能以上の機能をサポートする。以下は一般的な機能の一覧である。実装しているかどうかはプログラム次第である。
 空行
 簡単なプログラムの中には空行を許さないものがある。この場合、すべての行はセクションの宣言かパラメータかコメントでなければならない。
 クォーテーション
 いくつかの実装では値を引用符で囲むことができる。典型的にはダブルクォーテーション（"XXX"）やシングルクォーテーション（'XXX'）あるいはその両方を使う。これにより明示的に空白文字を使ったり、特殊文字を使ったりすることができる。
 コメント
 マイクロソフトによる実装ではセミコロンのみがコメント開始文字として使用できるGetPrivateProfileSection function (winbase.h) - Win32 apps | Microsoft Docsが、セミコロンに加えナンバーサイン（#）もコメントの指示に使えるものがあるプロパティ拡張情報ファイル。
 コメントを開始する位置が行頭しか許されないものと、行の途中からでもコメントを入れられるものがある。
 大文字・小文字の区別
 パラメータ名やセクション名の大文字・小文字を区別するかどうかは実装によって異なる。マイクロソフトによる実装では区別されていないGetPrivateProfileString function (winbase.h) - Win32 apps | Microsoft Docs。
 名前の重複
 多くの実装ではセクションの中では同名のパラメータは1つしか許されない。2つ目が現われたときには、異常終了する、2つ目が無視される、1つ目が上書きされるといったことが起こる。一部のプログラムではパラメータを重複させることで複数の値を持つパラメータを作ることができる。
 セクション名の重複の扱いも実装によりさまざまである。ある実装ではセクションが重複すると単純に両方のパラメータを合成する。また異常終了したり一部を無視したりする場合もある。
名前/値の区切り文字
 等号の代わりにコロン（:）を使うものもある。
 階層構造
 一般的に、INIファイルにはセクションの階層構造はない。しかし、階層的な命名規則を持つように見えることがある。例えばA、B、Cの階層を考えたとき、セクション名に[A.B.C]（Windowsのxstart.ini）や[A\B\C]（IBM Windows ドライバファイルdevlist.ini）と付けたり、セクション[A]の下にパラメータB,C,P=Vを作ったり（Microsoft Visual StudioのAEMANAGR.INI）することは可能である。
 この場合、これらが見た目を分かりやすくするための単なる慣習なのか、それともプログラムが階層を理解しているのかは区別が難しい。
 エスケープ
 エスケープ文字の扱いはさまざまである。典型的にはバックスラッシュ（\）が使用される（環境によっては円記号として表示される）。行末に置いた場合に改行を無視して次の行までを1つの論理行として扱うことがある。エスケープシーケンスによる特殊文字の扱いも見られる。
+ 一般的なエスケープシーケンス 表記 解釈 \\ \（1つのバックスラッシュ、エスケープ文字をエスケープ） \0 Null文字 \a ベル \b バックスペース、まれにベル \t タブ \r 復帰（キャリッジリターン） \n 改行（ラインフィード） \; ; \# # \= = \: : \x???? 16進表記のUnicode文字

 マイクロソフトによる実装 
Windowsでは、Windows 3.1以前はWIN.INIというINIファイルが唯一存在していたが、Windows 3.1でアプリケーション用のINIファイルが使用され、WIN.INIと区別してプライベートプロファイルファイルと呼ばれた。
INIファイルを扱うためのインターフェイスがC言語形式関数としてWindows APIに標準実装されている。しかし、これらはWin16との互換性のために残されているだけで、Win32以降ではレジストリやXMLファイルなどでの設定管理が推奨されており、INIファイルは推奨されていないWhy are INI files deprecated in favor of the registry? | The Old New Thing。

INIファイル読み書きのための代表的な関数を以下に示す。ANSIマルチバイト文字セット (MBCS) 用のA関数と、Unicode文字セット用のW関数が用意されているが、保存されるINIファイルのテキストエンコーディングは、デフォルトではいずれを使用してもANSI MBCSとなり、Windowsのシステムロケール設定に左右される。
 GetPrivateProfileString() 関数
 GetPrivateProfileStringA() 関数
 GetPrivateProfileStringW() 関数
 WritePrivateProfileString() 関数
 WritePrivateProfileStringA() 関数
 WritePrivateProfileStringW() 関数

Windows用ソフトウェアのインストール設定ファイル (.inf) などもINIフォーマットの派生形式であるGeneral Syntax Rules for INF Files - Windows drivers | Microsoft Docs。

 脚注 

 参考文献 


 関連項目 
 TOML
 Extensible Markup Language (XML)
 JavaScript Object Notation (JSON)
 :en:INF file

Category:ソフトウェア
Category:ファイルフォーマット