読者です 読者をやめる 読者になる 読者になる

$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

CPANモジュールに含まれるファイルについて調べた

おそらくはそれさえも平凡な日々: 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と言われているもの。

以下が参考になる。

さらにMETA.jsonはそれをjson化したもの。CPANdeps now understands META.json files | David Cantrell [blogs.perl.org]あたりが詳しそう。

MYMETA.yml, MYMETA.json

このファイルについてはいまいちよく分からなかった。MYMETA.yml in the wild | David Goldenによると

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 - perldoc.perl.orgあたりを参照。

まとめ

今回はCPANモジュールを作るときによく見るファイルについて調べたことについてまとめてみた。こういう感じで興味に湧いたことをなんとなく調べるのは楽しい。このへんの知識があるとcpanmとかcartonのコードが読めそうな気がするので、今度読んでみようと思う。
なおこの辺りについてはあまり詳しくないので、情報の正確性については保証しません。