目的
PHPアプリを作る上で、挙動のカスタマイズや、DBの接続設定をどういった形式のファイルに保存するか考える。
結論
PHP においては ini ファイル一択。
後半にあるマトリックスでYAML,TOML,INIが同得点になったのは真実に迫っていると思う。
評価点
- 表現力
- 書きやすさ
- 読みやすさ
- パースの速さ
- 導入の容易さ
- ポータビリティー
候補
- YAML
- TOML
- JSON
- XML
- INI
総評
PHPはXMLとJSONとINIしか標準でパースできないので、書きやすさ、読みやすさ、導入の容易さ、ポータビリティにおいてINIの妥当性が高い。
表現力
どんな設定ファイルかという具体性がないのでどれだけの表現力が求められるか評価が難しいところだけど、それぞれ設定ファイルとして採用された実績は沢山あるので、表現力に関して問題になる事は想定しなくてよいのではないか。
正直なところ、INIファイルは複雑な設定ファイルになると表現力に乏しいと思う。
書きやすさ
パースのしやすさ(syantax的な難しさ)と、意図通りに書きやすいかという論点があると思う。
JSONはシリアライズ用のフォーマット色が強い。
JSON、XMLは書きにくい。
読みやすさ
XMLは読みにくい。JSONもちょっと読みにくい。
パースの速さ
パースの速さにこだわりがちな人は多いが、設定ファイルを1回の処理で何度もパースする事はないので、評価が必要なほど遅いものは無いというだけで全部合格。
パーサーの書きやすさだとXML,JSONあたりになるだろうけど、それは別の話。
導入の容易さ
PHPアプリでという前提なので標準でパースできるXML、JSON、INIに軍配が上がる。
ただし、YAML、TOMLも負担はない。XML書くぐらいならYAML、TOMLを使いたい。
ポータビリティー
YAML、INIは仕様が若干曖昧でパーサによっては扱えない事があったりするかもしれないけど、何を選んでもまず困ることはないと思う。
モダンさ
評価点には挙げていないが、INI、XMLは古いイメージはある。
マトリックス
表現力 | 書きやすさ | 読みやすさ | パースの速さ | 導入の容易さ | ポータビリティー | モダンさ | 合計(モダンさを評価しない) | |
---|---|---|---|---|---|---|---|---|
YAML | 5 | 5 | 5 | 5 | 4 | 5 | 5 | 34(29) |
TOML | 5 | 5 | 5 | 5 | 4 | 5 | 5 | 34(29) |
JSON | 5 | 3 | 4 | 5 | 5 | 5 | 5 | 32(27) |
XML | 5 | 1 | 3 | 5 | 5 | 5 | 4 | 28(24) |
INI | 4 | 5 | 5 | 5 | 5 | 5 | 3 | 32(29) |
感想
この記事はPHPだと設定ファイルはINIファイルが妥当なんじゃないのかなという実感が先にあって、表現力とモダンさでINIファイルを使うことを躊躇する必要は無いんじゃないかなという意図ありきで書きました。
具体的に選定する際はそれぞれの状況において適切なものを選ぶべきだと思うけど、選定理由はきちんと説明出来るようにしたほうが良い。
モダンなものは課題を解決した結果誕生しているので優れていることは多いが、用途や要件を満たしたものの中では、モダンだからという事自体は理由にならないと思う。