config fileは皆さんどうやっていますか?

前回(http://d.hatena.ne.jp/studiokingyo/20051217#p1)、mcppというツールを紹介していただいたid:toge氏のはてなに訪問。
http://d.hatena.ne.jp/toge/20051218#1134905287
にてコンフィグファイルはどうするかについて少しふれられていた。


今まで、私はコンフィグファイルはどうしようかと悩んでいた。
ぶっちゃけGUI作ってそのデータをバイナリ出力でいいじゃん!?って昔は思っていた。
確かにUserから見ればその方が楽かもしれないのですが・・・いちいちGUI作るの面倒ですし。Developer側からしたら…うんうん。
テキストエディタで編集できれば十分ですよね。みたいな^^
私が知る限り便利なコンフィグファイル形式は

  • ini
  • XML(いろんな書き方があるけど)
  • その他独自形式

くらいしかなかった。
そんでもってコンフィグファイルは伝統的なiniを2-3年前から少し愛用していたりもした。
しかしながらWin32APIで提供されるiniファイル入力関数のgoogle:GetPrivateProfileSection]はWindows95ではセクションのサイズは32KBを超えてはいけません。との事なのだ。([google:GetPrivateProfileStringで一つづつ読み出していけばいいのかもしれないが・・・)なのでこれはOS Independentではないので嫌だと思い、boost::spiritでparserを作った時期があった。様々なサイトを参考にし、完成したのだが未だに使っていない(笑)
今度アップする(いったいいつになるのやら・・・)google:dkutilにはそのパーサーが組み込まれるはずだ。


また、XMLもいい感じだと思う。parserを作るのが面倒だったので未だに利用してはいなかったのだが・・・
今はexpatをラップしてXML読み込みコンテナを作っていてそれが最近出来上がったところだ。
あとは全部の要素を巡回できるiteratorを実装して終わりといった感じだ。


さて、これが最近のdKingyo Utility Toolkit(以下DKUT)成果物状況だが・・・
このLuaの記述もナカナカ簡潔な記述でイイのである。
http://rainer.blog7.fc2.com/#374
にてLuaでのコンフィグファイルの作成が魅力的に感じられた。
以下に私が感じた長所短所を並べておく。
長所:

  • Lua予約語が結構定義してあってそれをAPIが解釈してC言語の変数として代入してくれるはず?(実はまだLuaをいじり倒していない)だったと思ったので
  • INIファイルの解析処理(何byteの整数、実数かまたは文字列か・・・)のような奇怪な処理を組まなくて良い。
  • LuaAPIはMIT/X Licenceなのでライセンス的にもすごく緩いので商用利用やその他GPLのような問題なし。

短所:
  • でも一つ一つ読み込むのにLuaAPIをスタックを意識してガシガシ組まなくてはいけないらしい。(?)

  • LuaAPIのライブラリはライブラリサイズが重い!?かなぁ?いや、富豪的に言うならありでしょ。STLPortを使っているくらいですもの。
だが、私の組んだiniやXMLの読み込みコンテナやLuaによるコンフィグファイル変数からの読み込みはコンフィグファイルに記述されている要素をマップして簡単に入出力する機構(serialize deserializeする奴)としては弱いと感じた。


一つ一つの変数とコンフィグファイルに記述されている要素をmapして変数の型やデータ形式に合わない場合はthrowしてくれるようなライブラリがあればなぁと思ったりする。


うーん。今後の課題!?いや、作っても誰も使ってくれなさそうな気もなかったりあったり・・・支離滅裂御粗末御免。