YAMLでCGIの設定ファイルを書く

Webアプリを構成するCGIのソース内に、データベースへの接続設定などを直接埋め込んでおくのは良くない書き方だ。そのため、プログラムから設定を取得するための共通のコンフィグファイルを作ろうと思う。

この設定ファイルを書く形式にはJSONとかXMLとかいろいろ候補があるけど、ここでは私好みのYAMLを使うことにする。YAMLはちょっとマイナーな形式だけど、非常にシンプルで見た目も分かりやすいので私は愛用している。
以下がYAML形式で書いた設定ファイルの例となる。パラメタ名: 値、とコロンで区切り、リストはハイフンで箇条書きにすれば良いだけなのでとても簡単だし見て分かりやすい。

db_name: imagebuild
db_host: 192.168.2.210
id_path: /home/mypage/www/sample/testid/
top_url: http://myapl.example.org/
fruits: 
  - Banana
  - Grape
  - Strawberry

このYAML形式の設定ファイルを読み込むには、PerlモジュールYAMLを使えば良い。使い方は簡単で、以下のようにYAML::LoadFileで設定ファイルをロードし、パラメタ名を指定して値を取り出すことができる。もっと詳しくは、perldocを参照(http://search.cpan.org/dist/YAML/lib/YAML.pm)。

#!/usr/bin/perl
use strict;
use warnings;
use YAML;

my $CONF = YAML::LoadFile("/myapl/conf/idconfig.yaml");
print "id_path = $CONF->{id_path}\n";

...

なおコンフィグファイルをCGIで使う場合は、当然このファイルが外部からWeb経由で見えてしまうとよろしくない。上記の例で言うと、confディレクトリへのアクセス制限を必ず施しておこう。

具体的には以下のように、Apache.htaccessでDeny設定をしてWeb経由ではファイルが見られないようにしておく。

/myapl/conf/.htaccess ファイルに記述
Order Allow,Deny
Deny from all

本当は"Order Allow,Deny"だけで全拒否なのだが、"Deny from all"は念のため。