Config::Multi で複数のコンフィグファイルをいい感じに読み込む

| 0 Comments | 0 TrackBacks | このエントリーをはてなブックマークに追加 このエントリーのはてなブックマーク件数

プログラムを書いていて、設定ファイルを別にしている人は多いと思うんだけど、設定ファイルが大きくなったときに中身がカオスになってしまう事ってありますね。そんなときに、「コンフィグファイルを目的別に分割したい」って思うことがあるよね。


例えばこんな感じ。

config/
 |-- myapp.yml
 |-- myapp_database.yml
 |-- myapp_local.yml
 |-- web_myapp_log.yml
 `-- web_myapp_local.yml

これを読み込んで内容をマージしてくれるモジュールが Config::Multi。つい最近出来たばっかりのモジュールです。


使い方はこんな感じです。(SYNOPSIS から引用)

use Config::Multi;
use File::Spec;
use FindBin;

my $dir = File::Spec->catfile( $FindBin::Bin , 'conf' );

# prefix and extension is optional.
my $cm = Config::Multi->new({
           dir => $dir ,
           app_name    => 'myapp' ,
           extension   => 'yml'
       });
my $config = $cm->load();
my $loaded_config_files = $cm->files;

それぞれの引数は、

  • dir には設定ファイルが格納されている path
  • app_name にアプリケーションの名前
  • extention は拡張子

です。

これで、以下のような構成が読み込めます。

conf/
 |-- myapp.yml
 |-- myapp_database.yml
 |-- myapp_log.yml
 |-- myapp_local.yml
 `-- never_load.yml

${app_name}.yml か、 ${app_name}_*.yml を読み込むので、never_load.yml は読み込まれません。


また、_local とついたファイルは、一番最後に読み込んで上書きするようになってます。

本番環境と開発環境で分けたい時に便利ですね。


また、new したときに prefix って引数を付けると任意のグループが読み込めます。

conf/
 |-- myapp.yml
 |-- myapp_database.yml
 |-- myapp_log.yml
 |-- myapp_local.yml
 |-- mobile_myapp.yml
 |-- mobile_myapp_log.yml
 |-- mobile_myapp_validator.yml
 |-- mobile_myapp_local.yml
 |-- web_myapp.yml
 |-- web_myapp_log.yml
 |-- web_myapp_validator.yml
 `-- web_myapp_local.yml

mobile と web という prefix があるのが分かりますか。
では、web という prefix を指定してみましょう。

my $cm = Config::Multi->new({
    dir       => $dir ,
    prefix    => 'web',
    app_name  => 'myapp',
    extension => 'yml'
});

これで、myapp.yml, myapp_*.yml, web_myapp.yml, web_myapp_*.yml が読み込まれて、mobile_* は読み込まれなくなりました。
携帯サイトと PC サイトで設定ファイルを一部共有したいと言った場面で役立ちますね!


また、環境変数による読み込み振り分けも出来ます。詳しくは POD を見てみてね!


おっと、もし Catalyst を使っているなら、Catalyst::Plugin::Config::Multi っていう Plugin になってるから使うといいよ!

No TrackBacks

TrackBack URL: http://perl-mongers.org/MT/mt-tb.cgi/8

Leave a comment

About this Entry

This page contains a single entry by vkgtaro published on May 24, 2008 3:37 AM.

Mooseのaround modifierで正規表現を使う was the previous entry in this blog.

シャチ泳ぎとシュワルツ変換 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.

Categories

Pages

Creative Commons License
This blog is licensed under a Creative Commons License.
Powered by Movable Type 4.21-en