Pure Pythonを設定ファイルとして使う

設定ファイルのフォーマット、というのは割と悩ましい問題である。

JSONはよく使われるし好きなのだけど、変数の置換ができない。 また、割とごちゃごちゃする。 YAMLはすっきりするがPythonの標準モジュールで使えないし、変数置換ができない。 Python標準のconfigparser (iniファイル) はシンプルでわかりやすく変数置換もできるのだが、なんかWindowsっぽいので気が向かない。

変数の置換やループなどのダイナミックな処理を設定ファイルで行うことには反対意見も多そうだが、 私はホスト名とかとにかくDRYに書きたい派なので、Pure Pythonで書かれたスクリプトを設定ファイルとして利用するちょっとしたクラスを作った。

極端な例では、N個(設定ファイルで変更)のプロセスで共有する設定ファイルで、各プロセスが利用するポート番号を指定したりとか、便利ではないかと思われる。例には書いてないけど、定義するデータはdictでもなんでも良い。フレキシブル。

デザイナーの方が絡むようなProjectでは若干厳しいかもしれないが、どうせPythonを触る人が見るんだから、結構わかりやすくていいかと思う。

利用するときには

from configloader import conf

とするだけで(main.py)あたかもただのdictのような感じに使えるので、 PurePythonConfigLoaderなる不気味な名前を意識したり、いちいち

config = PurePythonConfigLoader.get_config()

では。