App::FatPacker::Simple
App::FatPacker::Simple というのを書いた。
これはモジュールの依存関係は 使う人が理解しているという前提 で fatpack するところだけいい感じでやってくるやつである。
INSTALL
> cpanm git://github.com/shoichikaji/App-FatPacker-Simple.git
App::FatPacker との関係
App::FatPacker は、あるスクリプトを その依存モジュールをすべて含めた形にまとめてくれるツールである。
利点としては、
がある。実際 cpanminus は fatpack された形で配布されていて その利点を多くの人が享受しているように思う。
一方で一度やってみればわかるが App::FatPacker は、はまりどころにあふれていてなかなか使いこなせない。
App::FatPacker は大きくわけて
をやっている。 この 1. が特にはまりどころ満載で、 2. については単に融通が利かないという感じである。
App::FatPacker::Simple は 1. については使う人がしっかり理解しているという前提で、2. だけの面倒を見る。
個人的に 1. を機械的に解決するのは無理だと思っている。
使い方
(以下の例は https://github.com/shoichikaji/fatpack-example にある)
例えば hello.pl
があり、それは lib/Hello.pm, lib/Hello/CLI.pm
を元にしているとしよう。
また外部依存モジュールは cpanfile に書かれているとする。
> find .
.
./cpanfile
./hello.pl
./lib
./lib/Hello
./lib/Hello/CLI.pm
./lib/Hello.pm
> cat cpanfile
requires "Sub::Retry";
requires "HTTP::Tiny";
App::FatPacker::Simple およびそのフロントエンド fatpack-simple
は
カレントディレクトリの
lib, local, fatlib, extlib ディレクトリにあるモジュールを
perl-strip して fatpacked スクリプトを作るだけである。
よってまず 依存モジュールを local, extlib などにインストールする。
> carton install
Installing modules using /Users/skaji/cpanfile
Successfully installed CPAN-Meta-2.143240 (upgraded from 2.140640)
Successfully installed Module-Build-0.4210 (upgraded from 0.4205)
Successfully installed Sub-Retry-0.06
3 distributions installed
# Sub::Retry は parent モジュールに依存すると **あなたが理解してる前提**
# HTTP::Tiny も fatpack すべきだと **あなたが理解してる前提**
> cpanm -nq --reinstall -lextlib parent HTTP::Tiny
Successfully reinstalled parent-0.228
Successfully installed HTTP-Tiny-0.053 (upgraded from 0.049)
2 distributions installed
その後、fatpack-simple を実行すればいい。ただしこのままだと build 時しか入らない Module::Build なども入るので それは exclude する。
> fatpack-simple --exclude Module::Build,CPAN::Meta hello.pl
-> perl-strip lib/perl5/parent.pm
-> perl-strip lib/perl5/HTTP/Tiny.pm
-> perl-strip Hello.pm
-> perl-strip Hello/CLI.pm
-> exclude CPAN/Meta.pm
...
-> exclude Module/Build.pm
...
-> perl-strip Sub/Retry.pm
すると hello.fatpack.pl ができる。
ちなみに以上の作業を Daikufile にまとめておくと便利。
> daiku fatpack
# get hello.fatpack.pl
その他
こうしてできた hello.fatpack.pl
を実際実行させたい perl (例えば 5.8.8 とか)
でテストすべき。
fatpack 自体を perl 5.8.8 などでやるという考えもあるが、 個人的に最新の perl で fatpack を作り、5.8.8 でテストの方がいいと思っている。
Enjoy fatpack!