Perlモジュールの書き方 ======== {{tag: perl, cpan, module}} Perlのモジュールを書こうと思うなら、Foo.pm や Makefile.PL など、必要なファイルをいちいち手で書いて揃えなくても、一括で雛形を揃えてくれる便利なコマンド(モジュール)があるので、それを利用します。 ## index ## {{toc 3-}} ### module-setup ### Perlモジュールの雛形づくりに module-setup コマンドは強力な助けになります。 module-setup コマンドは {{cpan: 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 ### モジュールの配布 ### あとで ### SEE ALSO ### * [Module::Setup でらくらくモジュール作成](http://perl-users.jp/articles/advent-calendar/2009/hacker/19.html) * [YappoLogs: Module::Setup - pmsetupをモジュール化した](http://blog.yappo.jp/yappo/archives/000608.html) * [CPAN - Module::Setup - antipop 式 Module::Setup 勉強帖](http://search.cpan.org/~yappo/Module-Setup-0.09/MEMOja.pod) * [Module::Setup::Flavor::CatalystStarterとしてコミットした](http://d.hatena.ne.jp/hide-K/20081023/1224737283)