tr;dr

__END__

設定ファイルフォーマット考察

YAMLがオワコンだと書いたらYAML便利派からツッコミ食らったので変遷過程を思い出してみた。楽したいと考えた挙句に最近はどのフォーマットも使わずに config.pl 作って do してる感じですけれども…。

ここで言う設定ファイルとは凡そ pit やコマンドラインツールで使うように、

  • 大した設定量がない
  • ハードコーディングしたくない(ちょっと隠しておきたい)
  • サッと作って済ませたい
  • できればのちのち再利用したい

ようなファイルのこと。

http://code.google.com/intl/ja/appengine/docs/python/config/appconfig.html みたいに量があってしっかり書く必要があるものに関しては始めからネイティブでちゃんと書いたほうがよさそう。

そもそも、本来はプログラムに直接埋め込みたかったものだから、その言語を使って書いたほうがいいんじゃないかな。

pros/cons

YAML pros
  • コメントが書ける
  • それなりに読める
YAML cons
  • YAML 1.0, 1.1, 1.2 の違いを暗記している人はいない
  • 各言語のパーサがどのバージョンに対応してるのか誰も知らない(他言語で使うときのストレスのもと)
  • 設定ファイル読み込みだけのために依存が増える
  • 新規で作られたものではあまり見かけない(気がする)
  • 同じ構造でも表記方法が複数ある
XML pros
  • (誰か考えて...)
XML cons
  • 大袈裟
  • 人間の精神を破壊する
JSON pros
  • みんな読める(はず)
  • ウェブで使われているがゆえに多くの実績と信頼
JSON cons
  • コメント書けない
PP pros
  • 依存なし
  • お手軽
  • コメント書ける
  • みんな読める/書ける
PP cons
  • 設定ファイルなのに自由すぎる
  • 他言語からの読み込みは基本的にできない
  • PPで書かれた設定ファイルの読み書き専用のモジュールはない(はず)

Config::PP

自分の中でいろいろとフォーマットを移り変わった結果、config.pl 作って do してるのが最近の事情なのでこんなの作った https://github.com/punytan/p5-Config-PP/blob/master/lib/Config/PP.pm (ドヤッ!)