Module::Starter::PBPを使ってみた
Damian先生推奨のModule::Starterでモジュールを書き始めてみようと思い立ち、使ってみました。
以前こんなことをやっていたのですが、どうも性に合わないのでExtUtils::ModuleMakerとExtUtils::ModuleMaker::TTを使ってみました。
個人的にはこっちの方が性にあいそうです。
インストール
ExtUtils::ModuleMaker 0.44でExtUtils::ModuleMaker::UtilityがパッケージからはずされたのにExtUtils::ModuleMaker::TT 0.92のテストで要求されるため
Error: Can't locate ExtUtils/ModuleMaker/Utility.pm
でテストがこけます。
そこで一旦0.43をインストールしてからExtUtils::ModuleMaker::TTをインストールするとテストがすんなり通ってハッピーです。
ExtUtils::ModuleMaker 0.47を入れたい場合にはその後に普通にインストールすればアップデートされます。
$ cpan
cpan> install JKEENAN/ExtUtils-ModuleMaker-0.43
cpan> install ExtUtils::ModuleMaker::TT
cpan> install ExtUtils::ModuleMaker
初期設定
makeperlmodコマンドを使って設定ファイルとテンプレートを作成します。
$ makeperlmod --defaults
$ makeperlmod --templates ~/.makeperlmod/templates
これで~/.makeperlmod/default.confに設定ファイル、~/.makeperlmod/templates/以下にテンプレートが作成されます。
まずは設定ファイルを自分の環境に合わせて編集します。ボクはとりあえずこんな風にしてみました。
~/.makeperlmod/default.conf
ABSTRACT Module abstract (<= 44 characters) goes here
AUTHOR Hideo Kimura
BUILD_SYSTEM ExtUtils::MakeMaker
CHANGES_IN_POD 0
COMPACT 1
CPANID HIDE
EMAIL hide@hide-k.net
EXTRA_MODULES_SINGLE_TEST_FILE 0
FIRST_TEST_NUMBER 1
INCLUDE_FILE_IN_PM 0
INCLUDE_ID_LINE 0
INCLUDE_LICENSE 1
INCLUDE_MANIFEST_SKIP 0
INCLUDE_POD_COVERAGE_TEST 0
INCLUDE_POD_TEST 0
INCLUDE_SCRIPTS_DIRECTORY 1
INCLUDE_TODO 1
INCLUDE_WARNINGS 0
INTERACTIVE 0
LICENSE perl
NEED_NEW_METHOD 0
NEED_POD 1
ORGANIZATION
PERMISSIONS 493
SAVE_AS_DEFAULTS 0
TEST_NAME load
TEST_NAME_DERIVED_FROM_MODULE_NAME 0
TEST_NAME_SEPARATOR _
TEST_NUMBER_FORMAT %02d
USAGE_MESSAGE <<EOF
There were problems with your data supplied to ExtUtils::ModuleMaker.
Please fix the problems listed above and try again.
EOF
VERBOSE 0
VERSION 0.01
WEBSITE
TEMPLATE_DIR /home/hide/.makeperlmod/templates
変更したのは
- AUTHOR: 作成者名
- COMPACT: (0) モジュール作成ディレクトリをFoo/Bar/BazではなくFoo-Bar-Bazというディレクトリ名にする
- CPANID: CPAN ID (持っていれば)
- EMAIL: メールアドレス (公開するのであれば)
- ORGANIZATION: 組織名 (公開するのであれば)
- NEED_NEW_METHOD: (0) newメソッドを追加しない
- TEST_NUMBER_FORMAT: (%02d)テストスクリプトのバージョンナンバーの命名規則
- WEBSITE: Webサイト (持っていれば)
- TEMPLATE_DIR: 使用するテンプレートのディレクトリ
です。
次にテンプレートを自分の使いやすいように編集します。
~/.makeperlmod/templates/README
[%- IF BUILD_SYSTEM == 'ExtUtils::MakeMaker' -%]
perl Makefile.PL
make
make test
make install
[%- ELSE -%]
perl Build.PL
perl Build
perl Build test
perl Build install
[%- END -%]
~/.makeperlmod/templates/module.pm
package [% NAME %];
use strict;
use warnings;
our $VERSION = '0.01';
1;
__END__
=head1 NAME
[% NAME %] - Put abstract here
=head1 SYNOPSIS
use [% NAME %];
blah blah blah
=head1 DESCRIPTION
Description...
=head1 METHODS
=over 4
=item some methods
Description for method...
=back
=head1 SEE ALSO
L<SOME LINK>
=head1 AUTHOR
[% AUTHOR %] C<< <<[% EMAIL %]>> >>
=head1 COPYRIGHT
Copyright (c) [% COPYRIGHT_YEAR %] by [% AUTHOR %]
[% LicenseParts.COPYRIGHT %]
=cut
モジュールパッケージを作成する
新たなモジュールを作成するには
$ makeperlmod -n Sample::Module::Foo
とすればSample-Module-Fooというディレクトリが作成され、その下にパッケージ一式が用意されます。
新しいモジュールとサブモジュールを作りたい場合は
$ makeperlmod -n Sample::Module::Foo -e Sample::Module::Bar
すでにあるモジュールに新たにモジュールを追加したい場合は
$ cd Sample-Module-Foo/lib/Sample/Module
$ makeperlmod -m Sample::Module::Baz
viで編集しているモジュールに新たにメソッドを追加したい場合は
:r! makeperlmod -s sample_method
ただ、ボクはコード中にpodが混ざるのが好きじゃないので使ってません。
ちなみにExtUtils::ModuleMaker::PBPなんてのもあるので、Damian先生的にモジュールを書きたい人はこちらもいいかもしれません。