INI設定パーサー
INIファイルはセクションとキーバリューペアを持つシンプルな設定フォーマットで、歴史的にWindowsで使用され、多くのアプリケーション(php.ini、my.cnf、setup.cfg)で今も一般的です。このツールはINI構文を解析し、セクションとプロパティを表示し、JSONに変換できます。
仕様
よくあるユースケース
- php.iniやMySQLのmy.cnf設定の検査
- Pythonのsetup.cfgやtox.iniファイルの解析
- Gitの設定ファイル(.gitconfig)のレビュー
- Windowsアプリケーション設定のデバッグ
- レガシーINI設定のJSONまたはYAMLへの変換
機能
- [section]ヘッダーとkey=valueペアの解析
- コメントの処理(;と#プレフィックス)
- エスケープシーケンス付き引用値のサポート
- グローバルプロパティの表示(セクション前の項目)
- プログラム利用のためにJSONに変換
- 整形表示モード
- セクションごとのコメント表示
- 不正なエントリに対する解析警告
例
データベース設定
試してみる →典型的なデータベース設定ファイル。
[database]
host=localhost
port=3306
name=myapp_db
user=admin
[cache]
enabled=true
ttl=3600
driver=redisPHP設定
試してみる →php.iniからのスニペット。
; PHP Configuration
[PHP]
memory_limit = 256M
max_execution_time = 30
upload_max_filesize = 64M
[Date]
date.timezone = "America/New_York"ヒント
- セクション名はほとんどの実装で大文字小文字を区別しません。
- 特殊文字を含む値には引用符を使用してください。
- コメントは伝統的に;を使用しますが、一部のパーサーは#も受け入れます。
- 同じセクション内の重複キーは、パーサーによって上書きまたは配列作成の場合があります。
解説 INI設定パーサー
INIファイルはセクション(角括弧内)とキーバリューペアを使用するシンプルな設定フォーマットです。正式な仕様はないにもかかわらず、このフォーマットはMS-DOSとWindowsの初期から広く使用されてきました。PHPはphp.ini、Gitは.gitconfig(INIスタイル)を使用し、Windowsアプリケーションは.iniファイルを使用し、多くのレガシーシステムがこのフォーマットに依存しています。
基本構造は[section]ヘッダーの下にkey=valueペアをグループ化します。値は通常文字列ですが、一部のパーサーは数値やブール値を解釈します。コメントにはセミコロン(;)またはハッシュ記号(#)を使用します。複数行の値、ネストされたセクション、エスケープシーケンスは、権威的な標準がないため実装間で異なります。
INIファイルはフラットなキーバリュー形式(.envファイルなど)と構造化されたフォーマット(TOMLやYAMLなど)の間のギャップを埋めます。ネストされたデータ構造の複雑さなしにセクションレベルの整理を提供します。論理的なグループ分けを持つシンプルなアプリケーション設定には、INIは今も実用的な選択肢です。
標準化の欠如がINIの主な弱点です。異なるパーサーはコメント文字、キーの大文字小文字の区別、重複キーとセクションの処理方法、値が複数行にまたがれるかどうかについて意見が分かれています。新しいプロジェクトを始める場合、TOMLは同じセクションベースの整理を正式な仕様と豊富なデータ型とともに提供するため、一般的により良い選択です。
TOMLはINIの正式な仕様を持つモダンな代替として設計されました。ネイティブのデータ型(整数、浮動小数点、ブール値、日付、配列)、ネストされたテーブル、テーブルの配列、複数行文字列などINIに完全に欠けている機能を追加しています。新しいプロジェクトにはTOMLがより良い選択です。INIは主に既存の設定ファイルとのレガシー互換性のために関連します。
キーの大文字小文字の区別は実装によって異なります。WindowsのINI関数は大文字小文字を区別しません。Pythonのconfigparserはデフォルトでキーの大文字小文字を区別しません。PHPのparse_ini_fileはキーの大文字小文字を区別しますがセクションは区別しません。Git configはセクション名とキー名の両方で大文字小文字を区別しません。特定のパーサーのドキュメントを常に確認してください。値内の特殊文字の処理も同様に一貫性がありません。一部のパーサーはダブルクォートでの値の引用をサポートし、一部はエスケープシーケンスをサポートし、一部はイコール記号の後のすべてをリテラル値として扱います。特殊文字が必要な場合は、特定のパーサーで動作を確認するか、TOMLへの移行を検討してください。