cpanfile
    Hokkaido.pm #9
    Yoshihiro Sasaki
自己紹介
twitter: aloelight
CPAN: YSASAKI
github: ysasaki
Perlでスマホアプリ向けAPI開発
Linuxサーバ運用・保守・監視
cpanfile
Ruby Gemfileの移植

依存モジュールの厳密なバージョン定義
ファイル

cpanm、cartonで利用可能

アプリケーション向け
依存モジュールの
バージョン定義
実行したいアプリ
use v5.16;
use warnings;
use LWP::UserAgent;

my $ua = LWP::UserAgent->new;
my $url = 'https://example.com';
my $res = $ua->get($url);
say $res->status_line;
cpanfile以前
依存の定義
use strict;
use warnings;
use ExtUtils::MakeMaker;

WriteMakefile(
    PREREQ_PM => {
        'LWP' => '6.00'
    }
);
Installと実行
$ cpanm -L local --installdeps -n .
$ perl -Mlib::core::only -Mlib=local/
lib/perl5 get.pl

501 Protocol scheme 'https' is not
supported (LWP::Protocol::https not
installed)
何が起きたのか
• LWP 6.02からhttpsサポートは
 LWP::protocol::httpsに分離

• Makefile.PL(EUMM)では       >= でしか
 指定できない
cpanfile以後
依存の定義
$ cat cpanfile
requires ‘LWP’, ‘== 6.00’;
Install
carton install
or
cpanm -L local --installdeps .
実行
$ carton install
$ carton exec -- ./get.pl
200 OK
基本構文
$FUNC $NAME, $VERSION;
ModuleのInstallの各段階

1. develop    ‣ author_requires
2. configure   ‣ configure_requires
3. build      ‣ build_requires
4. runtime    ‣ requires
5. test       ‣ test_requires
before action           requirements


開発時(develop)           author_requires


perl Makefile.PL      configure_requires

                  configure_requires, requires,
    make
                         build_requires

                  configure_requires, requires,
  make test
                  build_requires, test_requires


 make install              requires
on $phase => $definition;

on 'test' => sub {
    requires 'Test::More', '>= 0.96';
};

         ${phase}_requires
 Module::Install互換のショートカット
      中身は on で実装されている
その他関数
recommends

suggests

conflicts
基本構文
$FUNC $NAME, $VERSION;
バージョン指定
0        => 指定なし   ‘>= 1.00’ => 以上
‘1.00‘   => 以上     ‘<= 1.00’ => 以下
‘== 1.00’ => 固定    ‘>   1.00’ => 超過
‘!= 1.00’ => 以外    ‘<   1.00’ => 未満
ANDで指定可能
requires Foo , > 1.00, != 1.50, < 2.00

         •カンマ区切り
         •第2引数に全部含める
ここまでの仕様は
CPAN::Meta::Spec準拠
基本構文
$FUNC $NAME, $VERSION;
モジュール指定
cpanmの引数に取れるものが書ける
Distribution
Micro::Container
PAUSE ID + Filename
XAICRON/Micro-Container-0.03.tar.gz
URL
http://example.com/Micro-Container-0.03.tar.gz


          ftp, https? or file scheme
CPAN URI
cpan:///distfile/XAICRON/Micro-Container-0.03.tar.gz
Local File
/path/to/Micro-Container-0.03.tar.gz
Local Directory
/path/to/Micro-Container-0.03/
Git Repository URL
git://github.com/xaicron/p5-Micro-Container.git


              git scheme or .git
git://省略/p5-Micro-Container.git@0.01


       タグ、ブランチ指定が可能
     末尾に@タグ or @ブランチ名
注意
  cpanmは対応しているが
今後cpanfileに対応するツールが
 サポートするとは限らない
対応ツール
cpanm
 --installdepsを付けないとcpanfileを
認識しない

 後は各自必要なオプションを付ける
carton
 現在の最新版 v0.9.10ではcpanfileが
必須になった

Makefile.PL/Build.PLは一切みない
CPAN Distribution用
 CPAN Meta Spec v2.0に対応したい
 既存アプリをCPANに上げたい

 Module::Build::Pluggable::CPANfile

 Module::Install::CPANfile
質問タイム
ご清聴ありがとうございました

cpanfile