おそらくはそれさえも平凡な日々

Const::Commonというのを書いた

https://metacpan.org/release/Const-Common

プロジェクト共通の定数定義クラスを作ったりするときに、単にuse constantだと以下の様な不満点があった。

  • use MyApp::Const;とかしても定数をExportしてくれないので、MyApp::Const::CONST_HOGEとかかくのがタルいしExportの設定を書くのもタルい
  • use constant CONST_HASH => +{BAR => 'BAZ'};とかできるけど、CONST_HASH->{BAR} = 'OVERWRITE'とかできてしまう

その辺は各プロジェクトで個別に解決していたのだが、いい加減共通化したくなって書いた。以下の様な感じで使う。

package MyApp::Const;
use Const::Common (
    BAR => 'BAZ',
    HASH => {
        HOGE => 'hoge',
    },
);
1;

このように定数定義ができ、その定数を他の場所で使うことができる。

use MyApp::Const;
print BAR; # BAZ
print HASH->{HOGE}; # hoge;
HASH->{HOGE} = 10;  # ERROR!

hashrefやarrayrefはrestrictedになるので変な上書きが発生することもなくて安心。

中身は結構無理矢理なコードなんですが、こういうのがプロジェクト毎に散在してしまうよりかはCPANとかに上げてしまったほうが良いんじゃないかという具合。

また、最近はクライアント側と定数を共通化するために、定数クラスの自動生成とかやったりしてるんですが、そのためのモジュールとして、Const::Common::Generatorというものも別に書きました。

ちなみに、上記2つは、大江戸Ruby会議04の会場でバッテリーと戦いながら書き上げました。

created at
last modified at

2014-04-21T20:13:11+0900

comments powered by Disqus