CPANパッケージをつくった時のメモ

WebService::Hatena::Diary 0.01リリース/わーい,CPAN Authorになったよー - はこべブログ ♨ でCPANパッケージをつくった時のメモをおもむろに公開.なんか変なとこあったらおしえてくださいな みたいな.

書いてから気づいたのですが,Makefile.PLを書こう - soffritto::journalに書かれている,まず,Makefile.PLから書くやりかたの方が,より良さそうすね.Makefile.PLが開発プロセスをコントロールしていて,迷わずに開発がすすめられそうです.

ともあれ,以下メモ.


基本的に上から下の順番に実行していく.

pmsetup でひな形をつくる

パッケージのひな形を作成するためのpmsetupというプログラムを実行する.もともとは,miyagawaさんの作ったスクリプトで,自分用にカスタマイズして使う.(CodeRepos参照)

$ pmsetup WebService::Hatena::Diary

みたいにして使う.

pmsetupすると,CPANのパッケージに必要なファイルが展開される.この時,初回makeが実行されたりするので,いろいろとファイルができるけど,自分が変更を加える必要があるのは以下のファイルくらい.

Changes
MANIFEST.SKIP
Makefile.PL
README
lib/
t/

モジュールを作る

ひな形ができたらモジュール本体とテストを書く.がんばって書く.

ChangesとREADMEを修正する

必要に応じてChangesとREADMEを修正する.はじめてモジュールを作ったときは自動生成されたファイルでだいたい事足りる.

Makefile.PLを修正する

モジュールをコンパイル/インストールするために必要なMakefileを生成するためのスクリプトである,Makefile.PLを作ったモジュールに合わせて修正する.Makefile.PLの仕事をするのに使われるモジュールには何種類かあるけど,(ExtUtils::ModuleMakerとか)記述が簡潔でcoolなModule::Installを使うのが良い感じ.

Module::Installを使ったMakefile.PLは以下のように書く.決まり文句はpmsetupが生成してくれているので,必要に応じて自分で書く.

# Makefile.PL
use inc::Module::Install;
name 'WebService-Hatena-Diary';
all_from 'lib/WebService/Hatena/Diary.pm';

# 依存しているモジュール一覧
requires $_ for (qw(
    XML::Atom 
    HTTP::Request
    DateTime 
    DateTime::Format::W3CDTF 
    DateTime::Format::Strptime
));

# テストやビルドで使っているモジュール一覧
build_requires (qw(Test::More));

auto_include;
WriteAll;

重要なのは,requiresとbuild_requires.ここにそれぞれ,新しく作ったモジュールが依存しているモジュールとテスト/ビルドで使っているモジュールの一覧を書く.他にもいろいろできそうなのでマニュアルを要チェック.(Module::Install - search.cpan.org)

Makefile.PL を実行する

Makefile.PLを実行する.ルールーにしたがってMakefileが生成される.

make manifest する

パッケージ含めるファイル一覧が記述されるMANIFESTファイルを生成する.自動でパッケージディレクトリのファイルを一覧に含めてくれる.一覧に含めたくないファイルがある場合は,MANIFEST.SKIPに含めたくないファイルのパターンを書く.

make する

モジュールをビルドする.Pure Perlなモジュールだとmanファイルが生成されて,blibディレクトリにファイルがコピーされるくらいしかやらない.

make test する

proveによってモジュールのテストが実行される.テストが通らないモジュールをリリースしたらだめです.

make disttest する

リリース用のアーカイブを作って,それを展開し,その中でmake testする.実際に,make testされるのに近い状況にしてテストをすることに.MANIFESTにファイル書き忘れててテストが通らない,とかを防ぐ.

make dist する

リリース用のtar.gzなアーカイブが作られる.このファイルをPAUSEにアップロードすると,モジュールがリリースされる.

めもめも

  • 普段インストールしまくってるモジュールがどんな風にして作られてるかわかって非常におもろい
  • だましだまし作業してるところが多いので,ちゃんとマニュアルとか読んで理解する
  • shipitが使いたい…です…