Help us understand the problem. What is going on with this article?

PHPアプリで扱う設定ファイルの形式をどうするか

目的

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ファイルを使うことを躊躇する必要は無いんじゃないかなという意図ありきで書きました。

具体的に選定する際はそれぞれの状況において適切なものを選ぶべきだと思うけど、選定理由はきちんと説明出来るようにしたほうが良い。

モダンなものは課題を解決した結果誕生しているので優れていることは多いが、用途や要件を満たしたものの中では、モダンだからという事自体は理由にならないと思う。

iez
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした