Slide 1

Slide 1 text

Perl5ͷ ύοέʔδϚωʔδϟ Shoichi Kaji

Slide 2

Slide 2 text

Me • Shoichi Kaji • CPAN, github: skaji • the author of cpm
 (a Perl5 module installer)

Slide 3

Slide 3 text

͜ͷൃදͷ໨త • Perl5Λීஈ͋·Γ৮͍ͬͯͳ͍ਓΛର৅ʹ • ࠓޙɺPerl5Λ৮Ζ͏ͱͨ͠ͱ͖ͷͨΊʹ • moduleͷΠϯετʔϧ΍؅ཧͷ΍ΓํΛ
 ఏࣔ͢Δ

Slide 4

Slide 4 text

Contents • moduleͷΠϯετʔϧ - cpanm • ґଘmoduleͷએݴ - cpanfile • ґଘmoduleͷversionอଘɺ࠶ݱ - carton • ·ͱΊ • ࠓޙͷಈ͖

Slide 5

Slide 5 text

moduleͷΠϯετʔϧ › perl monitor.pl Can't locate Capture/Tiny.pm in @INC (you may need to install the Capture::Tiny module)… ͨͱ͑͹Perl5Ͱॻ͔Εͨ؂ࢹεΫϦϓτmonitor.pl͕ ͋Δͱ͢ΔɻͦΕΛ࣮ߦ͢Δͱ... Capture::Tiny͕ೖͬͯͳ͍

Slide 6

Slide 6 text

moduleͷΠϯετʔϧ moduleͷΠϯετʔϧʹ͸cpanmΛ࢖͏ cpanmࣗ਎ͷΠϯετʔϧํ๏ # case1. globalʹೖΕΔ › curl https://cpanmin.us | perl - -n App::cpanminus # ΋͠perl͕system perlͷ৔߹͸ɺ΋ͪΖΜsudo͕ඞཁ › curl https://cpanmin.us | perl - -n --sudo App::cpanminus # case2. ؀ڥΛԚͨ͘͠ͳ͍৔߹͸ΧϨϯτσΟϨΫτϦʹऔͬͯ͘Ε͹Α͍ › curl -o cpanm https://cpanmin.us › perl ./cpanm --version

Slide 7

Slide 7 text

moduleͷΠϯετʔϧ # Capture::TinyΛΠϯετʔϧ › cpanm -n Capture::Tiny Successfully installed Capture-Tiny-0.48 › perl monitor.pl # WORkS!

Slide 8

Slide 8 text

moduleͷΠϯετʔϧ # σϑΥϧτͰ͸୯ମςετΛ૸Β͔ͤͯΒΠϯετʔϧ͢Δ # -n ͰͦΕΛεΩοϓͰ͖Δ › cpanm -n Amon2 # σϑΥϧτͰ͸ɺglobalͳσΟϨΫτϦʹmoduleΛΠϯετʔϧ͢Δ # ؀ڥΛԚͨ͘͠ͳ͍৔߹͸ɺ-L Λ࢖ͬͯΠϯετʔϧઌΛมߋ͢Δ › cpanm -L ./local Mojolicious # ࣮ߦ࣌͸ -I ͰͦͷσΟϨΫτϦΛsearch pathʹ௥Ճ͢Δ › perl -I ./local/lib/perl5 script.pl ͍͔ͭ͘ͷcpanmͷtips

Slide 9

Slide 9 text

ґଘmoduleͷએݴ • ࣗ෼ͰPerl5ͷεΫϦϓτΛॻ͍ͨͱ͠Α͏ • ͍͔ͭ͘ґଘmodule͕͋Δ͚ΕͲɺ
 ͦΕΛͲ͏Ϣʔβʹ఻͑Ε͹͍͍ͷ͔ • cpanfileΛ࢖͓͏

Slide 10

Slide 10 text

ґଘmoduleͷએݴ cpanfile - ґଘmoduleΛએݴ͢ΔϑΝΠϧ › cat cpanfile requires 'Plack', '1.0'; # 1.0 or newer requires 'JSON', '>= 2.00, < 2.80'; # ୯ମςετ࣌ͷΈඞཁͳmodule on test => sub { requires 'Test::More', '== 1.302140'; recommends 'Test::TCP', '1.12'; };

Slide 11

Slide 11 text

ґଘmoduleͷએݴ # cpanfile͕͋ΔσΟϨΫτϦͰcpanmΛ--installdepsͱͱ΋ʹ # ࣮ߦ͢Ε͹ґଘmoduleΛΠϯετʔϧͰ͖Δ › capnm -n --installdeps . # -L ͱ૊Έ߹ΘͤΕ͹ɺΧϨϯτσΟϨΫτϦʹ # ґଘmoduleΛΠϯετʔϧͰ͖Δ › cpanm -n -L ./local --installdeps . › perl -I ./local/lib/perl5 script.pl cpanfileʹґଘmoduleΛએݴ͢Ε͹
 cpanmͰ؆୯ʹΠϯετʔϧͰ͖Δ

Slide 12

Slide 12 text

ґଘmoduleͷversionอଘɺ࠶ݱ • Perl5ͰຊࠊΛೖΕͯΞϓϦέʔγϣϯΛॻ͍͍ͯ͘ ͱɺґଘmodule͸͙͢ʹ100Λ௒͑Δ • ͢Δͱґଘmoduleͷversionʹහײʹͳͬͯ͘Δ • ։ൃ؀ڥͰςετΛpassͨ͠ͱ͖ͷґଘmoduleͷ versionΛ͢΂ͯอଘ͠ɺͦΕΛຊ൪Ͱ΋࠶ݱ͍ͨ͠ • cartonΛ࢖͓͏

Slide 13

Slide 13 text

ґଘmoduleͷversionอଘɺ࠶ݱ # Cartonࣗ਎ͷΠϯετʔϧ › cpanm -n Carton # cpanfileͰએݴ͞ΕͨґଘmoduleΛ./localʹΠϯετʔϧ͢Δ › carton install Complete! Modules were installed into …/local # Πϯετʔϧͨ͠moduleͷversion͸cpanfile.snapshotʹอଘ͞ΕΔ › ls cpanfile cpanfile.snapshot local # carton execͰ./localΛsearch pathʹೖΕͯperlΛىಈͰ͖Δ # (΋ͪΖΜɺcarton execΛ࢖Θͣࣗ෼Ͱ-IΛࢦఆͯ͠΋Α͍) › carton exec perl script.pl cartonΛ༻͍ͨ։ൃϑϩʔ(1)

Slide 14

Slide 14 text

ґଘmoduleͷversionอଘɺ࠶ݱ # ͦͷޙɺผͷ؀ڥͰ΋--deploymentΛ͚ͭͯΠϯετʔϧ͢Δ͜ͱͰ # snapshotʹهड़͞ΕͨversionΛ࠶ݱͰ͖Δ › carton install --deployment Installing modules using …/cpanfile (deployment mode) Complete! Modules were installed into …/local cartonΛ༻͍ͨ։ൃϑϩʔ(2)

Slide 15

Slide 15 text

·ͱΊ • moduleͷΠϯετʔϧʹ͸cpanmΛ࢖͏ • ґଘmoduleͷએݴʹ͸cpanfileΛ࢖͏ • ґଘmoduleͷversionอଘɺ࠶ݱʹ͸
 cartonΛ࢖͏

Slide 16

Slide 16 text

ࠓޙͷಈ͖ (πʔϧ) • moduleΠϯετʔϥͱͯ͠cpanmҎ֎ʹ
 CPAN.pm, CPANPLUS, cpmͳͲ͕͋Δ • cartonͷޙܧͱͯ͠carmel͕։ൃ͞Ε͍ͯΔ

Slide 17

Slide 17 text

ࠓޙͷಈ͖ (࢓૊Έ) • Perl5Ͱ͸GNU Autotoolsͱಉ͡Α͏ʹϢʔβαΠυͰεΫϦϓτΛ࣮ߦͤ͞ɺΠ ϯετʔϧ࣌ͷڍಈΛಈతʹมԽͤ͞Δͷ͕ৗͰ͋ͬͨɻ
 Ұํɺେ఍ͷ৔߹͜Ε͸overkillͰ͋Γɺ੩తղੳͱ΋૬ੑ͕ѱ͍ɻ
 ͜Εʹର͠ɺࡢࠓɺ΋ͬͱγϯϓϧͳstatic installͱ͍͏Πϯετʔϧͷ࢓૊Έ͕ ఏҊ͞Ε͍ͯΔɻ • Perl5Ͱ͸ී௨ɺ͢΂ͯͷmoduleͨͪΛ͋ΔҰͭͷσΟϨΫτϦʹ·ͱΊͯΠϯ ετʔϧ͍ͯ͠Δɻ
 ͔͠͠ɺͦ͏ͯ͠͠·͏ͱɺͲͷmodule͕Ͳͷdistributionʹଐ͢Δͷ͔Θ͔Β ͳ͘ͳΓɺ؅ཧ͕͠ʹ͘͘ͳΔɻ
 ͜Εʹର͠ɺʮdistribuitonΛผʑʹ؅ཧ͠ɺ࣮ߦ࣌ʹͦΕΒΛద੾ʹsearch pathʹ഑ஔ͠Α͏ʯͱ͍͏ΞΠσΞ͕͋Γ carmel͸·͞ʹͦΕΛ࣮૷͍ͯ͠Δɻ