この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)
出典検索?: "INIファイル"
INIファイルは、ソフトウェアの設定などを記録するために用いられるファイル形式の一つ。構造の単純なテキストファイルであり、設定ファイルのフォーマットとしてよく使われている[1]。INIファイルは主にWindowsで使用するが、他のプラットフォームでも使われる[2]。INIファイルという名前はこのファイルの一般的な拡張子「.INI」から来ている。INIとはinitialization(イニシャライゼーション)の略であり、その他にconfiguration(コンフィギュレーション)の略である「.CFG」や「.conf」、あるいは「.TXT」なども使われる。 基本的なフォーマットを以下に示す。 INIファイルのフォーマットは規格化・標準化はされておらず、明確には決まっていない。多くのプログラムは上で示す基本機能以上の機能をサポートする。以下は一般的な機能の一覧である。実装しているかどうかはプログラム次第である。 一般的なエスケープシーケンス表記解釈 Windowsでは、Windows 3.1以前はWIN.INIというINIファイルが唯一存在していたが、Windows 3.1でアプリケーション用のINIファイルが使用され、WIN.INIと区別してプライベートプロファイルファイルと呼ばれた[6]。INIファイルを扱うためのインターフェイスがC言語形式関数としてWindows APIに標準実装されている。しかし、これらはWin16との互換性のために残されているだけで、Win32以降ではレジストリやXMLファイルなどでの設定管理が推奨されており、INIファイルは推奨されていない[7]。 INIファイル読み書きのための代表的な関数を以下に示す。ANSIマルチバイト文字セット (MBCS) 用のA関数と、Unicode文字セット用のW関数が用意されているが、保存されるINIファイルのテキストエンコーディングは、デフォルトではいずれを使用してもANSI MBCSとなり、Windowsのシステムロケール設定に左右される。
フォーマット
パラメータ
INIファイルに含まれる重要な要素が「パラメータ」(もしくはエントリとも呼ばれる)である。個々のパラメータは「名前」(もしくはキーとも呼ばれる)と「値」を持ち、等号(=)で区切られる。等号の左辺が名前、右辺が値である。name=value
セクション
パラメータは任意の名前を持つ「セクション」でグループ分けすることができる。セクション名は角カッコ ([XXX]) で囲み1行を占める。セクションの宣言の後に現れるパラメータはそのセクションに属する。明示的にセクションの終わりを示す区切り文字はなく、次のセクションの宣言かファイルの終端でセクションは終わる。よってセクションはネストすることができない。[section]
コメント
コメントの開始はセミコロン(;)によって示される。コメントはその行の終わりまで続く。セミコロンと行末の間の全ては無視される。; comment text
その他の機能
空行
簡単なプログラムの中には空行を許さないものがある。この場合、すべての行はセクションの宣言かパラメータかコメントでなければならない。
クォーテーション
いくつかの実装では値を引用符で囲むことができる。典型的にはダブルクォーテーション("XXX")やシングルクォーテーション('XXX')あるいはその両方を使う。これにより明示的に空白文字を使ったり、特殊文字を使ったりすることができる。
コメント
マイクロソフトによる実装ではセミコロンのみがコメント開始文字として使用できる[3]が、セミコロンに加えナンバーサイン(#)もコメントの指示に使えるものがある[4]。コメントを開始する位置が行頭しか許されないものと、行の途中からでもコメントを入れられるものがある。
大文字・小文字の区別
パラメータ名やセクション名の大文字・小文字を区別するかどうかは実装によって異なる。マイクロソフトによる実装では区別されていない[5]。
名前の重複
多くの実装ではセクションの中では同名のパラメータは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つのバックスラッシュ、エスケープ文字をエスケープ)
\0Null文字
\aベル
\bバックスペース、まれにベル
\tタブ
\r復帰(キャリッジリターン)
\n改行(ラインフィード)
\;;
\##
\==
\::
\x????16進表記のUnicode文字
マイクロソフトによる実装
GetPrivateProfileString() 関数
GetPrivateProfileStringA() 関数
GetPrivateProfileStringW() 関数
WritePrivateProfileString() 関数
WritePrivateProfileStringA() 関数
WritePrivateProfileStringW() 関数
Windows用ソフトウェアのインストール設定ファイル (.inf) などもINIフォーマットの派生形式である[8]。
脚注^ “INIファイル 【INI file】 .iniファイル”. IT用語辞典. 2022年2月4日閲覧。
^ db2cli.ini 初期設定ファイル - IBM Documentation
^ GetPrivateProfileSection function (winbase.h) - Win32 apps 。Microsoft Docs
^ ⇒プロパティ拡張情報ファイル
^ GetPrivateProfileString function (winbase.h) - Win32 apps 。Microsoft Docs
^ Richard他 1998.
^ Why are INI files deprecated in favor of the registry? 。The Old New Thing
^ General Syntax Rules for INF Files - Windows drivers 。Microsoft Docs
参考文献
Richard J. Simon、Michael Gouker、Brian C. Barnes 著、スリーエーシステムズ 訳「第20章 初期化ファイル」『Programmer's SELECTION Windows 95 APIバイブル1 Win32編』翔泳社、1998年9月15日、896頁。.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation.cs-ja1 q,.mw-parser-output .citation.cs-ja2 q{quotes:"「""」""『""』"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free a,.mw-parser-output .citation .cs1-lock-free a{background:url("//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited a,.mw-parser-output .id-lock-registration a,.mw-parser-output .citation .cs1-lock-limited a,.mw-parser-output .citation .cs1-lock-registration a{background:url("//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription a,.mw-parser-output .citation .cs1-lock-subscription a{background:url("//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg")right 0.1em center/12px no-repeat}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:#d33}.mw-parser-output .cs1-visible-error{color:#d33}.mw-parser-output .cs1-maint{display:none;color:#3a3;margin-left:0.3em}.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}ISBN 4-88135-430-2。