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が使いたい…です…