nDiki : Perl モジュールの作り方

Perl モジュールの作り方

Perl モジュールを作成し配布パッケージ化する方法。

1. モジュール名を決める

まず最初に モジュール名を決める。

2. モジュールインストーラ方式を選ぶ

シンプルなモジュールであれば、ExtUtils::MakeMaker ベースで作成するのが良い。

依存する CPAN モジュールが多い場合は Module::Install の利用も検討してみる。

方式特徴
ExtUtils::MakeMaker 方式標準 Perl ライブラリなので、いつでも利用できる。
Module::Build 方式ExtUtils::MakeMaker の代替。make ユーティリティが不要。ただし、Perl 5.8.8 時点で、CORE に含まれていない。
Module::Install 方式ExtUtils::MakeMaker あるいは Module::Build 上で動くモジュールインストーラ。簡便な記述や、インストール時の自動依存モジュールインストール機能などを提供する。必要なファイルは配布パッケージの inc ディレクトリにコピーされ同梱されるので、インストールする側はインストーラのために他のモジュールをインストールしておかなくてよい。

3. スケルトンを作成する

ディレクトリ構成を含めたスケルトンの作成は h2xs がメジャーどころ。 その他に

h2xs を使ったスケルトン作成の例:

 h2xs -AX --skip-exporter -n Foo::Bar

4. ビルドファイルを書く

スケルトンに含まれる、Makefile.PL を必要に応じて編集する。 Module::Build ベースであれば、Build.PL を編集する。

Pure Perl なモジュールならば、最初はそれほどいじらなくても大丈夫なはず。

5. コードを書く / テストを書く

がんばる。

Perl モジュールファイルは基本的には 「パッケージ名.pm」というファイル名で。(パッケージ名のつけかた → Perl style guide)

テストファースト開発がお勧め (→ Perl テストスクリプトの書き方)。

6. コードを綺麗にする

perltidy を通す。

7. MANIFEST ファイルを作成する

 perl Makefile.PL
 make
 make manifest

Windows 環境であれば、事前に MANIFEST ファイルを削除しないと更新されないので注意。

作成された MANIFEST ファイルの中身を確認し、パッケージに含めたいファイルに過不足がないか確認する。

余分に入ってしまいがちなファイルには以下のようなものがある。

  • blib ディレクトリ
  • pm_to_blib ファイル
  • Makefile ファイル

上記のファイルはビルドの過程で生成されるので、ソースパッケージには含めておく必要はない。

余分なファイルが含まれるようであれば、MANIFEST.SKIP に除外ルールを書く。

MANIFEST.SKIP ファイルには、パッケージに含めたくないファイル名にマッチする正規表現を1行に1つづつ記述する (perldoc ExtUtils::Manifest 参照)。

MANIFEST.SKIP の例

 ~$
 ~blib/

8. Makefile.PL の PREREQ_PM 属性 を確認する

Perl モジュールの中で依存している他の Perl モジュールがあれば、そのモジュールを Makefile.PL の PREREQ_PM 属性に追加する。

Module::Install を採用しているならば requires 等で指定する。

9. tarball を作ってみる

 make distclean
 perl Makefile.PL
 make
 make disttest
 make dist

make dist で パッケージ名-バージョン番号.tar.gz というファイルが作成される。

次のリリース時

他の人の変更がないか確認

 cvs update
 または
 svn update

テスト

 perl Makefile.PL
 make distclean
 perl Makefile.PL
 make
 make test

バージョン番号を更新

Makefile.PL か $モジュール::VERSION で定義しているバージョン番号を更新。 README 等に書いてあればそれも更新。

MANIFEST を更新

Windows 上の場合は一旦 MANIFEST ファイルを削除する。UNIX 系ならそのなまの状態から。

 make manifest

余分なファイルが MANIFEST に追加されていないか確認。 追加されていれば MANIFEST.SKIP を編集して make manifest しなおす。 OK ならば MANIFEST.SKIP をリポジトリへコミット。

ドキュメントを更新。

Changes を更新してリポジトリへコミット。

あるいは ChangeLogNEWS を更新してリポジトリへコミット。

全てのファイルがコミットされていることを確認

 cvs update
 または
 svn status

tarball の作成

 make distclean
 perl Makefile.PL
 make
 make disttest
 make dist

tarball のテスト

 cp パッケジー名-x.yz.tar.gz /tmp
 cd /tmp
 tar zxvf パッケジー名-x.yz.tar.gz
 cd パッケジー名-x.yz
 perl Makefile.PL
 make
 make test

必要なら Windows など別のマシンでも。

バージョン管理システムのリポジトリのタグ打ち

それぞれのルールに従ってタグ打ち。 適切なログメッセージをつけるようにする。

参考となるドキュメント

  • perlmodlib
  • perlmodstyle
  • perlnewmod
no diary

About

Naney Naneymx

Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。

※本サイトの内容は個人的見解であり所属組織とは関係ありません。

Process Time: 0.024644s / load averages: 0.66, 0.49, 0.43