Perlモジュールの書き方
Perlのモジュールを書こうと思うなら、Foo.pm や Makefile.PL など、必要なファイルをいちいち手で書いて揃えなくても、一括で雛形を揃えてくれる便利なコマンド(モジュール)があるので、それを利用します。
index
module-setup
Perlモジュールの雛形づくりに module-setup コマンドは強力な助けになります。 module-setup コマンドは Module::Setup をインストールすると付いてきます。
$ cpanm Module::Setup
Module::Setup がインストールできたら、module-setup コマンドを初期化しておきます。 何も難しいことはなく、--init オプションをつけてコマンドを叩いたら、良しなに質問に答えていくだけです。
$ module-setup --init
Do you use SVN? [yN] [n] y
Do you use SVK? [yN] [n] n
Do you use Git? [yN] [n] y
Your name: bayashi
Your email: bayashi :at: cpan. org
Module::Setup
Module::Setup(module-setup) は flavor と呼ぶ仕組みで、いくつもの雛形セットを用意して、切り替えて利用します。 Module::Setup をインストールすれば、一通りの flavor が付いてきます。 もちろん、自分でカスタマイズした flavor を用意することもできます(後述)。
Module::Setup 0.09 で Module::Setup::Flavor::* にあるもの。
- CatalystStarter
- CodeRepos
- Default
- GitHub
- PBP
- SelectVC
- XS
また、Module::Setup(module-setup) が SVN や SVK そして git などを利用したバージョン管理システムによる開発を前提として作られている点も見逃せません。 他にも、組み込みでプラガブルな仕組みを利用できるなど、とても重宝します。
Module::Setup で雛形(skeleton: スケルトン)の作成
モジュールの開発ディレクトリで、以下のようにするだけです。
$ module-setup MyModule
Subversion friendly? [Yn] [y] y
Check Makefile.PL? [Yn] [y] n
Git init? [Yn] [y] y
出来た skeleton は以下のような構造になっています(Default)。
$ ls MyModule/
branches/ tags/ trunk/
$ ls -a MyModule/trunk/
./ .git/ .shipit MANIFEST.SKIP README t/
../ .gitignore Changes Makefile.PL lib/ xt/
Subversion friendly に branches/ tags/ trunk/ のディレクトリが作成され、その中に雛形が一式作成されています。 trunk/ には .gitignore や .shipit なんていうファイルも見えます。
あわせて、make test までやってみましょう。
$ cd MyModule/trunk/
$ perl Makefile.PL
$ make
$ make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'inc', 'blib/lib', 'blib/arch')" t/*.t xt/*.t
t/00_compile.t ...... ok
xt/01_podspell.t .... ok
xt/02_perlcritic.t .. ok
xt/03_pod.t ......... ok
All tests successful.
Files=4, Tests=4, 3 wallclock secs ( 0.03 usr 0.11 sys + 1.61 cusr 0.65 csys = 2.40 CPU)
Result: PASS
$ make clean
通りますね。あとは test とモジュールを書いていくだけです。すばらしい!!!
オリジナルの flavor の作り方
最初から用意されている flavor をベースに、自身の好みを加えた falvor を作りたくなる場合があると思います。そのような場合には、以下のような手順で、カスタム flavor を作ることができます。
以下のようにコマンドを打って、雛形ファイル群を生成します。
$ module-setup --init --flavor-class=Default MyFlavor
これで、~/.module-setup/flavors/MyFlavor
以下に雛形ファイル群が生成されているかと思います。今回は Default から生成しましたが、Module::Setup::Flavor::* にあるものや他の Flavor クラスをベースにしても問題ありません。自分が作りたい雛形に近いものを選ぶと良いです。
ここから、~/.module-setup/flavors/MyFlavor
以下の(主に template 内)を自分好みに編集します。編集した結果は、module-setup
する際に反映されます。
ひととおり編集し、以下のようにコマンドを打つと、module-setup --init
するときに、--flavor-class
に指定できる MyFlavor.pm が出来上がります。
$ module-setup --pack MyFlavor default > MyFlavor.pm
モジュールの配布
あとで