Slide 1

Slide 1 text

DQBOpMF͕3VCZͰύʔεͰ͖Δ ͜ͱʹؾ͍ͮͨԶͨͪ͸ CVJMEFSTDPOUPLZP େ஥ೳ࢙BLBJEPOL

Slide 2

Slide 2 text

ࣗݾ঺հ w େ஥ೳ࢙BLBJEPOL w ͸ͯͳͱ͍͏ձࣾͰɺ1FSMΛॻ͍͍ͯ·͢ɻ
 ژ౎͔Βདྷ·ͨ͠ w ࠓ೥ͷ݄·Ͱલ৬Ͱ3VCZΛॻ͍͍ͯ·ͨ͠ɻ 3VCZྺ೥͙Β͍

Slide 3

Slide 3 text

લճͷϥʂ

Slide 4

Slide 4 text

1FSM࢖͍ͷࠃͷ3VCZJTU w 

Slide 5

Slide 5 text

1FSM͔Β3VCZ΁ w 

Slide 6

Slide 6 text

ࠓ೔ͷ࿩

Slide 7

Slide 7 text

DQBOpMFΛ requires 'Plack'; ... on test => sub { requires 'Test2', '1.302138'; ... }

Slide 8

Slide 8 text

DQBOpMFΛ3VCZͰʜʜʁ $ ruby -cw cpanfile Syntax OK

Slide 9

Slide 9 text

͍ͭ͜ʜʜಈͧ͘ʜʜʂ

Slide 10

Slide 10 text

ͱ͍͏࿩Ͱ͢ w ΑΖ͓͘͠ئ͍͠·͢

Slide 11

Slide 11 text

DQBOpMFͱ͸

Slide 12

Slide 12 text

DQBOpMFͱ͸ w ϓϩδΣΫτͰ࢖͏$1"/ϞδϡʔϧͷҰཡΛॻ͘΋ͷ w 3VCZͰ͍͏(FNpMF HFNpMFSC

Slide 13

Slide 13 text

DQBOpMFͷTZOUBY # requires Ͱ ࢖͍͍ͨ CPAN Module Λฒ΂Δ requires 'Plack'; ... # ಛఆͷ env ͰͷΈ࢖͍͍ͨ΋ͷ͸ on Ͱ sub Λ౉͢ on test => sub { # ୈ2Ҿ਺Ͱόʔδϣϯݻఆ͍ͯ͠Δ৔߹΋͋Δ requires 'Test2', '1.302138'; ... }

Slide 14

Slide 14 text

DQBOpMFͷTZOUBY w 3VCZతʹ͜ͷDQBOpMF͸ͲͷΑ͏ʹύʔε͞ΕΔ͔ w ৄ͘͠͸SVCZEVNQQBSTFUSFFDQBOpMFΛ࣮ߦ

Slide 15

Slide 15 text

DQBOpMFͷTZOUBYJO3VCZ w ͜ͷߦ͸3VCZͰ΋ಈ͘͜ͱ͕໌ന w SFRVJSFTϝιουʹจࣈྻͷҾ਺Λ౉͍ͯ͠Δ w ߦ຤ͷηϛίϩϯ͸͋ͬͯ΋֐͕ͳ͍ requires 'Plack';

Slide 16

Slide 16 text

DQBOpMFͷTZOUBYJO3VCZ w ໰୊͸ίον w ͜ΕΛ΋͏ͪΐͬͱ͚ͩΧοίΛิ଍͢Δͱ on test => sub { requires 'Test2', '1.302138'; }

Slide 17

Slide 17 text

DQBOpMFͷTZOUBYJO3VCZ w ໰୊͸ίον w ͜ΕΛ΋͏ͪΐͬͱ͚ͩΧοίΛิ଍͢Δͱ on({ test => sub { requires 'Test2', '1.302138'; } })

Slide 18

Slide 18 text

DQBOpMFͷTZOUBYJO3VCZ w POϝιουʹϋογϡΛ౉͍ͯ͠Δ on({ test => sub { requires 'Test2', '1.302138'; } })

Slide 19

Slide 19 text

DQBOpMFͷTZOUBYJO3VCZ w ϋογϡͷΩʔ͸UFTUϝιου on({ test => sub { requires 'Test2', '1.302138'; } })

Slide 20

Slide 20 text

DQBOpMFͷTZOUBYJO3VCZ w ϋογϡͷΩʔ͸UFTUϝιου w ϋογϡͷόϦϡʔ͸TVCϝιουʹϒϩοΫΛ౉ͨ͠΋ͷ on({ test => sub { requires 'Test2', '1.302138'; } })

Slide 21

Slide 21 text

DQBOpMFͷTZOUBYJO3VCZ w ϋογϡͷΩʔ͸UFTUϝιου w ϋογϡͷόϦϡʔ͸TVCϝιουʹϒϩοΫΛ౉ͨ͠΋ͷ w ϒϩοΫͷத਎͸SFRVJSFTϝιουʹҾ਺Λ౉ͨ͠΋ͷ on({ test => sub { requires 'Test2', '1.302138'; } })

Slide 22

Slide 22 text

DQBOpMFͷTZOUBYJO3VCZ w ͜͜·Ͱ෼͔Ε͹ධՁͰ͖Δʂʂʂʂʂʂʁ on({ test => sub { requires 'Test2', '1.302138'; } })

Slide 23

Slide 23 text

3VCZͰDQBOpMFΛධՁ͢Δ

Slide 24

Slide 24 text

3VCZͰDQBOpMFΛධՁ͢Δ w SFRVJSFT͸PSҾ਺Λड͚औΔϝιου requires ‘Plack'; requires 'Test2', '1.302138';

Slide 25

Slide 25 text

3VCZͰDQBOpMFΛධՁ͢Δ w SFRVJSFT͸PSҾ਺Λड͚औΔϝιου w ͱΓ͋͑ͣͲΜͳϞδϡʔϧΛ࢖͍͍͔ͨ෼͔ΔΑ͏ʹɺΠϯελ ϯεม਺ʹͰ΋٧Ί͓ͯ͜͏ @requires = [] def requires(module_name, version = nil) @requires << [module_name, version] end

Slide 26

Slide 26 text

3VCZͰDQBOpMFΛධՁ͢Δ w PO͸ϋογϡΛҾ਺ʹऔΔϝιου on({ test => sub { requires 'Test2', '1.302138'; } })

Slide 27

Slide 27 text

3VCZͰDQBOpMFΛධՁ͢Δ w PO͸ϋογϡΛҾ਺ʹऔΔϝιου w ͱΓࣺ͋͑ͣͯΕ͹͍͍͔ͳɻɻ w ͋ͱͰ࢖͏Α͏ʹվળ͠·͢ ޙड़ def on(_hash) # nop end

Slide 28

Slide 28 text

3VCZͰDQBOpMFΛධՁ͢Δ w UFTU͸ϋογϡͷΩʔ on({ test => sub { requires 'Test2', '1.302138'; } })

Slide 29

Slide 29 text

3VCZͰDQBOpMFΛධՁ͢Δ w UFTU͸ϋογϡͷΩʔ w ͳͷͰɺจࣈྻͷlUFTUzͰ΋ฦ͓͚ͯ͠͹ྑ͍ w Կ΋ฦ͞ͳͯ͘΋OJM͕ΩʔʹͳΔ͚ͩͰ͢ def test "test" end

Slide 30

Slide 30 text

3VCZͰDQBOpMFΛධՁ͢Δ w TVC͸ϒϩοΫΛड͚औΔϝιου on({ test => sub { requires 'Test2', '1.302138'; } })

Slide 31

Slide 31 text

3VCZͰDQBOpMFΛධՁ͢Δ w TVC͸ϒϩοΫΛड͚औΔϝιου w ZJFME͠·͢ def sub yield end

Slide 32

Slide 32 text

3VCZͰDQBOpMFΛධՁ͢Δ w TVC͸ϒϩοΫΛड͚औΔϝιου w ZJFME͠·͢ w ༨ஊ POΛ༗ޮʹ࢖͏ͨΊʹ͸஗ԆධՁͤ͞ΔͷͰMBNCEBͰแΉ def sub -> { yield } end def on(hash) hash.each do |env, sub| sub.call end end

Slide 33

Slide 33 text

3VCZͰDQBOpMFΛධՁ͢Δ w ͋ͱ͸࣮ߦ͢Δ͚ͩʂʂʂ w σϞ eval File.read("./cpanfile") pp @requires

Slide 34

Slide 34 text

3VCZͰDQBOpMFΛධՁ͢Δ w ͋ͱ͸࣮ߦ͢Δ͚ͩʂʂʂ $ ruby cpanfile_parser.rb [["Plack", nil], ["Test2", "1.302138"]]

Slide 35

Slide 35 text

DQBOpMFΛධՁͰ͖ΔͱԿ ͕Ͱ͖Δ͔

Slide 36

Slide 36 text

DQBOpMFΛධՁͰ͖ΔͱԿ͕Ͱ͖Δ͔ w %FQFOEBCPUΛ࡞Δ͜ͱ͕Ͱ͖Δ w ϓϩδΣΫτ͕ґଘ͍ͯ͠ΔϥΠϒϥϦͷҰཡදࣔ w ࠷৽όʔδϣϯΑΓ΋ݹ͍όʔδϣϯͰݻఆ͍ͯͨ͠ΒܯࠂΛग़͢

Slide 37

Slide 37 text

DQBOpMFΛධՁͰ͖ΔͱԿ͕Ͱ͖Δ͔ w %FQFOEBCPUΛ࡞Δ͜ͱ͕Ͱ͖Δ w ϓϩδΣΫτ͕ґଘ͍ͯ͠ΔϥΠϒϥϦͷҰཡදࣔ w ࠷৽όʔδϣϯΑΓ΋ݹ͍όʔδϣϯͰݻఆ͍ͯͨ͠ΒܯࠂΛग़͢ w ͱ͍͏Θ͚Ͱ࡞Γ·ͨ͠ EFNP

Slide 38

Slide 38 text

DQBOpMFΛධՁͰ͖ΔͱԿ͕Ͱ͖Δ͔

Slide 39

Slide 39 text

૝ఆ2"

Slide 40

Slide 40 text

21FSM͡Όμϝͩͬͨͷ w μϝͳΘ͚͕ͳ͍ w ໘നશ෦Ͱ3VCZͰ࣮૷͠·ͨ͠

Slide 41

Slide 41 text

͸ͯͳͰ͸1FSMϓϩάϥϜʹ3VCZͰ4ZOUBY $IFDLΛࢼͯ͠ΈΔΤϯδχΞ΋ืू͍ͯ͠·͢