CLI 向けに rcfile 読んでくれるだけのモジュール #perl
App::* をいろいろ書いていると、rcfile の仕組みを提供したいのだけど、毎回書くのが面倒くさい。 自分の場合は昔 module-starter から丸パクリしたコードをコピペしてたんだけど、そろそろ飽きてきたのでそれ用のモジュールを書いてみました。
Config::CmdRC
CLI ツールで以下のように書くだけ。
use Config::CmdRC qw/.foorc/;
これで、よしなにディレクトリを探索して、.foorc の中身を読んでくれます。
探索するディレクトリは以下のようになってます。
/etc
$ENV{HOME}
$ENV{CMDRC_DIR}
.
.foorc の中身は、Config::Simple で読めればなんでも OK です。(0.03 から好きな loader を使うこともできるようになってます)
よしなに探索するディレクトリで事足りなければ、おれおれの場所を指定することも可能です。
use Config::CmdRC (
dir => ['/path/to/rcdir', '/path/to/other/rcdir'],
file => ['.foorc', '.barrc'],
);
複数の設定ファイルが存在する場合、すべて読み込まれますが、同じキーの設定がある場合は、先頭に近いディレクトリなりファイルなりにあるものが優先されます。
読み込まれた設定は RC
という関数でアクセスできます。
.foorc の中身が以下のようであったとして、
bar: 123
以下のような感じ。
use Config::CmdRC qw/.foorc/;
warn RC->{bar}; # 123
モチベーション
CLI 書くときのフレームワークのようなものは CPAN にいろいろあるのだけど、重箱つつきたくなったら困りそうというのと、自分の書く CLI は大きなものでもないのでスクラッチで書くことが多い。ので、まあシンプルに rcfile だけやってくれるのが欲しかった。ただそれだけ。
探索ディレクトリが一般的なものかがよくわかってないのと、windows どうすればいいんだっけというのがありますが、取り急ぎ放出してみました。
Config::CmdRC お試しを。