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

その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

CPAN モジュールの依存モジュールをお手軽に表示するスクリプトを書いた

perl

App-pmdeps
https://github.com/moznion/App-pmdeps

モジュールを書いている皆さんはモジュールの依存関係に細心の注意を払っていることと思いますが、
いちいち CPAN の Web ページにアクセスしたり、curlAPI を叩いたりするのがだるいですよね!!!
このスクリプトを使えば、以下のように CPAN モジュールの依存モジュールをお手軽に取得・表示が出来ます。

$ pm-deps Test::Most
Target: perl-5.016003
Depends on 3 core modules:
	Module::Build
	Test::Harness
	Test::More
Depends on 6 non-core modules:
	Data::Dumper::Names
	Exception::Class
	Test::Deep
	Test::Differences
	Test::Exception
	Test::Warn
こうすると Test::Most の依存関係を引っ張って来られます。
処理的には metacpan の API を叩いて prereqs を引っ張ってきている感じです。

$ pm-deps Test::Most 0.10
Target: perl-5.016003
Depends on 2 core modules:
	Test::Harness
	Test::More
Depends on 4 non-core modules:
	Test::Deep
	Test::Differences
	Test::Exception
	Test::Warn
もちろん、モジュールのバージョン指定も出来ます。
モジュール名に続いてバージョンを指定すると、そのバージョンの依存関係を持ってきます。
(バージョンが省略された場合は、最新のバージョンの情報を持ってきます)

$ pm-deps --perl-version 5.008001 Test::Most
Target: perl-5.008001
Depends on 2 core modules:
	Test::Harness
	Test::More
Depends on 7 non-core modules:
	Data::Dumper::Names
	Exception::Class
	Module::Build
	Test::Deep
	Test::Differences
	Test::Exception
	Test::Warn
`--perl-version` を使うと、対象とする Perl のバージョンを指定することも出来ます。
このオプションを省略した場合は現在使っている Perl のバージョンを利用します。
(コアモジュールと非コアモジュールの内容が変化したのがお分かり頂けるでしょうか)

$ pm-deps --local /path/to/App-pmdeps
Target: perl-5.016003
Depends on 6 core modules:
	CPAN::Meta
	CPAN::Meta::Prereqs
	Getopt::Long
	Module::Build
	Module::CoreList
        Term::ANSIColor
	Test::More
Depends on 9 non-core modules:
	Capture::Tiny
	Furl
	JSON
	Test::CPAN::Meta
	Test::MinimumVersion
	Test::MockObject::Extends
	Test::Perl::Critic
	Test::Pod
	Test::Spellunker
`--local` オプションでファイルパスを指定すると、ローカルに存在するモジュールの依存関係を引っ張って来れます。
内部的には META.json か MYMETA.json を読んで依存関係を抜き出しています (META.json と MYMETA.json の両方が存在する場合は META.json が優先されます)。


なんか再発明チックですね!!!!!!
ただ、なんか探してもなさそうな感じだったので書きました。アレだったらshipit したい気持ちがあります。