データベース接続パラメータ、テンプレート関数の色定義、絵文字などの各種変換テーブル、その他もろもろ…。webアプリケーションにはたくさんの設定項目(パラメータ)が存在することだろう。それらをどうやって定義・管理するかはなかなか悩ましい問題である。defineを山ほど書いてrequire_once?constだらけの定数クラス?配列が便利だからserializeしてファイルに書いておく?どれも一長一短だなぁ。

前代フレームワークの実装時、やはりこの問題に突き当たっていろいろと検討していたら、YAMLというデータフォーマットに行き当たった。テキストなので可読性が高く、パーサを使えば読み込んだ文字列を連想配列に落としてくれる。Rubyは1.8から標準でライブラリが添付らしい。むーうらやましい。

PHPではSyck(Rubyにも組み込まれているライブラリ)もしくはSpyc(ピュアPHPのライブラリ)から利用することになる。前代フレームワークでは導入の手軽さからSpycと、パフォーマンスのためにCacheYAMLというクラスを参考に書いたキャッシャクラスで運用している。

導入してみた感想は…「なぜもっと早くやらなかったのか?」。管理が簡単で、環境ごとの設定差分も同一ファイルで管理できる(メモリ効率は悪くなるが)。10万hit / day程度のモジュールに導入しても特に問題は発生していないので、パフォーマンスも問題なさそうだ。

kwappaではパフォーマンス向上のためにSyck + PEAR::Cache_Liteによる組み合わせも試してみる予定である。ConfigManagerクラスとしてまとまる予定なので、いずれエントリしようと思っている。

Spyc + CacheYAMLでの導入は簡単なのでコードは略。以下のリンクを参考にされたい。開発者・記事を書かれた方々には大変感謝している。

 

The Official YAML Web Site
http://yaml.org/

YAML – Wikipedia
http://ja.wikipedia.org/wiki/YAML

XMLの論考: YAMLはXMLに改良を加える
http://www.ibm.com/developerworks/jp/xml/library/x-matters23/

spyc: a simple php yaml class
http://spyc.sourceforge.net/

Do You PHP? – PHPでYAMLを扱う
http://www.doyouphp.jp/tips/tips_yaml.shtml

cl.pocari.org – PHP 用 YAML パーサ spyc の結果をキャッシュする方法
http://cl.pocari.org/2006-03-17-2.html

言語別 YAML用ライブラリ徹底解説:第4回 PHP編|gihyo.jp … 技術評論社
http://gihyo.jp/dev/serial/01/yaml_library/0004