Config::Pit を使ってみる

Hokkaido.pm#4にて、aloelightさんが紹介されていたモジュール。

Config::Pitとは?

アカウント情報の管理にConfig::Pitを使用することによって、コードからアカウント情報を分離できます。

アカウント情報が格納された設定ファイル自体は、~/.pit/ 内に格納されます。スクリプト単体からのパスワード漏れは防げますが、設定ファイルの取り扱いに注意する必要があります。

パスワード設定をコードに書かない(Config::Pit) - モダンなPerl入門 - モダンなPerl入門

インストール

cpanm Config::Pit

Perlスクリプトから設定する

set.pl

use strict;
use warnings;

use Config::Pit;

Config::Pit::set( "example.com", data => {
        username => 'tyamaguc',
        password => 'hogehoge',
});

実行しても特に何も出力はされなが、~/.pit/default.yaml に設定が書き込まれている。

$ cat ~/.pit/default.yaml
    • -
"example.com": "password": 'hogehoge' "username": 'tyamaguc'

設定を取得する

get.pl

use strict;
use warnings;

use Config::Pit;
use Data::Dumper;

my $config = ();

$config = pit_get( "example.com" );
print Dumper $config;

実行してみる

$ perl get.pl
$VAR1 = {
          'password' => 'hogehoge',
          'username' => 'tyamaguc'
        };


また、pit_getのオプションで、requireというものがある。
これは、設定していない情報を取り出そうとした場合、エディタが開きその場で設定を追加することを求められる。
get.pl

use strict;
use warnings;

use Config::Pit;
use Data::Dumper;

my $config = ();

$config = pit_get( "example.com", require => {
       "nickname" => "your nickname on example.com",
});
print Dumper $config;

このスクリプトを実行すると、自分の環境下では viが実行され設定ファイルを編集することになる。

$ perl get.pl
    • -
"nickname": 'your nickname on example.com' "password": 'hogehoge' "username": 'tyamaguc' ~ "/tmp/tdCjMOXXzo.yaml" 4L, 94C

試しに以下のように編集し保存してみる

    • -
"nickname": 'tyamaguc07' "password": 'hogehoge' "username": 'tyamaguc' ~ :wq

すると、こんな出力がされる

$VAR1 = {
          'password' => 'hogehoge',
          'nickname' => 'tyamaguc07',
          'username' => 'tyamaguc'
        };

~/.pit/default.yaml にも書きこまれている。

$ cat ~/.pit/default.yaml 
    • -
"example.com": "nickname": 'tyamaguc07' "password": 'hogehoge' "username": 'tyamaguc'

ppitコマンドを使って設定、参照する

Config::Pitをインストールすると、ppitというコマンドもインストールされる。
このコマンドを使うことにより、コマンドラインから設定の参照と設定が可能になる。
ppitを使って設定してみる。

$ ppit set example.com

viが開き、設定ファイルを編集出来る。

    • -
"nickname": 'tyamaguc07' "password": 'hogehoge' "username": 'tyamaguc' ~ "/tmp/dR4doK164H.yaml" 5L, 99C

"hogehoge": 'fugofugo' と1行追加して保存。

    • -
"nickname": 'tyamaguc07' "password": 'hogehoge' "username": 'tyamaguc' "hogehoge": 'fugofugo' ~ :wq

設定を取得してみると……。

$ perl get.pl
$VAR1 = {
          'password' => 'hogehoge',
          'nickname' => 'tyamaguc07',
          'hogehoge' => 'fugofugo',
          'username' => 'tyamaguc'
        };

ちゃんと追加されている。
もちろん、~/.pit/default.yaml にも追記されている。


また、先程も言ったように設定を参照することも可能。
しかし、ttyで参照しようとすると怒られる。

$ ppit get example.com
do not output to tty.

仕方が無いので、標準出力をパイプでcatにでも渡してみてみる。

$ ppit get example.com | cat
    • -
"hogehoge": 'fugofugo' "nickname": 'tyamaguc07' "password": 'hogehoge' "username": 'tyamaguc'

まとめ

スクリプトにパスワードなどを埋め込む必要がなく。
設定をしてしまえば、いろいろなスクリプトから読み込めるのですごく便利だと思う。

追記

設定を取得する際に、未設定項目があった場合に開くエディタは、
環境変数EDITORに設定したものになります。