おそらくはそれさえも平凡な日々: CPANモジュールのパッケージングの歴史 の話を見ていて、興味が湧いたというのと、CPANモジュールを作ってもそういうところは無視してしまっていたので、これは良くないと思い少しだけ調べた。
- lib, bin, t, xt
- README, Changes, LICENSE
- Build.PL, Makefile.PL
- MANIFEST, MANIFEST.SKIP
- META.yml, META,json
- MYMETA.yml, MYMETA.json
- blib
パッケージの歴史
先程も書いたけど、おそらくはそれさえも平凡な日々: CPANモジュールのパッケージングの歴史に非常によく説明されているので、これを見るのが一番手っ取り早い。
かなり適当にまとめると
- makeでビルドしよう ExtUtils::MakeMakerでMakefileを作ろう
- でも簡単なことしかしてないしperlでいいよね Module::BuildのBuild.PLだけでやろう
- 発展してDSLとかプラグイン機構を使おう Module::InstallでMakefile.PL
- Module::InstallはコアじゃないからMakefile.PLを読み込むのにもモジュールが入っていないといけない
- それもパッケージに含めてしまえ
- 設定読む前に必要なものを知ることが出来ればincとか使わなくていいのでMETA.ymlのconfigure_requiresを使うだけで良さそう
- いろいろあってModule::Buildに立ち返り
lib, bin, t, xt
この辺りは説明はいらなそう。libは本体のモジュール、binは実行ファイル、tはテスト、xtはAuthorテストを入れていることが多い。
README, Changes, LICENSE
ここも説明はいらなそう。READMEは言わずもがな、Changesは変更、LICENSEはライセンス情報。
Build.PL, Makefile.PL
ビルド用の情報を設定しておくファイル。author情報とかversion情報とか依存関係とか。
META.yml, META.json
このあたりからよくわからないファイルとしてこれまで扱っていた。
META.ymlは本当に簡単に言うと、単なるモジュールのメタデータ。author情報とかversion情報とか依存関係とかが書かれている。
で、ここまで聞くとBuild.PLとかと同じ情報ばっかりという感じなのだが、これがあることで例えばCPANのサイトでBuild.PLを実行しなくとも依存モジュールなどの情報を知ることが出来る。
また、Build.PLを実行する前にどのモジュールが必要かということを知るためにも利用することが可能。これがconfigure_requiresと言われているもの。
以下が参考になる。
- https://www.socialtext.net/perl5/meta_yml
- http://search.cpan.org/dist/CPAN-Meta/lib/CPAN/Meta/Spec.pm
- 第23回 Module::Build:MakeMakerの後継者を目指して:モダンPerlの世界へようこそ|gihyo.jp … 技術評論社
- https://www.socialtext.net/perl5/configure_requires
さらにMETA.jsonはそれをjson化したもの。CPANdeps now understands META.json files | David Cantrell [blogs.perl.org]あたりが詳しそう。
MYMETA.yml, MYMETA.json
このファイルについてはいまいちよく分からなかった。MYMETA.yml in the wildによると
MYMETA.yml is just like META.yml, in that it follows the CPAN Meta Spec, but whereas META.yml is generated by the distribution author at packaging time, MYMETA.yml is generated by the end user at configure time after any dynamic dependencies are known.
と書いてあるとおり、author側でなくてend user側で作られるファイルらしい。のでパッケージングには含めない。
ただし具体的にどのような状況下で有用になるのか、僕にはよく分からなかった。
blib
モジュールがインストールされる実際の配置通りに作られる。make testした時、MANIFESTに漏れがあるとテストが動かないとかでわかるみたいなのがありそう。
Perlのmakeフェーズの挙動 : D-7 <altijd in beweging>あたりがblibについてと、モジュールをインストールする際のmakeの挙動について詳しい。あとはblib - Use MakeMaker's uninstalled version of a package - Perldoc Browserあたりを参照。
まとめ
今回はCPANモジュールを作るときによく見るファイルについて調べたことについてまとめてみた。こういう感じで興味に湧いたことをなんとなく調べるのは楽しい。このへんの知識があるとcpanmとかcartonのコードが読めそうな気がするので、今度読んでみようと思う。
なおこの辺りについてはあまり詳しくないので、情報の正確性については保証しません。