Slide 1

Slide 1 text

JavaScript Package Manager 2019 2019/06/27 @NodeֶԂ 34࣌ݶ໨

Slide 2

Slide 2 text

Twitter: @yosuke_furukawa Github: yosuke-furukawa

Slide 3

Slide 3 text

Berlin Tips

Slide 4

Slide 4 text

JavaScript Package Manager

Slide 5

Slide 5 text

OQNJOD ձࣾ OQN$-* OQN3FHJTUSZ ZBSO

Slide 6

Slide 6 text

npm cli inside

Slide 7

Slide 7 text

ͦ΋ͦ΋npmͷ࢓૊Έɹ 1. ϩʔΧϧґଘϑΝΠϧΛಡΉ (package.json, package- lock.json, shrinkwrap.json) 2. ଘࡏ͠ͳ͍ύοέʔδͷϝλσʔλΛfetch͢Δ 3. ໦ߏ଄Λܭࢉͯ͠ɺ࣮ߦ͢Δʢnpm v3 Ҏ߱ͩͱflatten͢ Δʣ 4. ࣮ࡍʹଘࡏ͠ͳ͍ύοέʔδΛμ΢ϯϩʔυ͢Δ 5. ΠϯετʔϧεΫϦϓτΛ࣮ߦ͢Δ

Slide 8

Slide 8 text

ࠓͷͲ͕͜μϝͳͷ͔ • ʮ4. ύοέʔδΛμ΢ϯϩʔυ͢Δʯ͕ߴෛՙͷॲཧ • μ΢ϯϩʔυ͢Δɺͱ͍͏ߦҝ͸ • tar ball Λ fetch ͯ͠ɺ • ͔ͦ͜Β gunzip ͯ͠ɺ • Ͱ͖͕͋ͬͨϑΝΠϧΛnode_modulesҎԼʹίϐʔ • ͱ͍͏ϐʔΩʔͳॲཧΛ͍ͯ͠Δɻɹ

Slide 9

Slide 9 text

ࠓͷͲ͕͜μϝͳͷ͔ • tar ball Λ Fetch => Network IO΁ͷෛՙ • gunzip => CPU΁ͷෛՙ • node_modules Λίϐʔ => File IO΁ͷෛՙ Կ͔͠ΒͷΫϥΠΞϯτϦιʔεʹෛՙ͕ඞ͔͔ͣΔ

Slide 10

Slide 10 text

ࠓͷͲ͕͜μϝͳͷ͔ • tar ball Λ Fetch => Network IO΁ͷෛՙ • gunzip => CPU΁ͷෛՙ • node_modules Λίϐʔ => File IO΁ͷෛՙ ಛʹOPEF@NPEVMFTʹ࣮ମͷϑΝΠϧ͕ඞཁʹͳΔͨΊɺϑΝΠϧͷ૯༰ྔ͕ ૿͑Δɻ

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

tink: A next generation package manager

Slide 13

Slide 13 text

OQNJOD ձࣾ OQN$-* OQN3FHJTUSZ ZBSO UJOL

Slide 14

Slide 14 text

npm install ࣌ʹղܾ͢Δͷ Ͱ͸ͳ͘ɺ࣮ߦ࣌ʹղܾ͢Ε ͹͍͍Μͩʂʂʂ

Slide 15

Slide 15 text

tink sh • `tink sh ` Ͱىಈ͢Δɻ • tink sh ͕ node Λwrap ͍ͯ͠Δ • ͜ΕͰىಈ͢Δͱ node_modules ΛԾ૝্ ͷϑΥϧμʹ͢Δࣄ͕Ͱ͖Δɻ $ node foo.js # Ͱىಈ͢ΔͷͰ͸ͳ͘ɺ $ tink sh foo.js # Ͱىಈ͢Δɻɹ

Slide 16

Slide 16 text

node_modulesΛԾ૝্ͷϑΥ ϧμʹ͢Δ͜ͱͷϝϦοτɹ • ࣮ࡍʹϑΝΠϧΛίϐʔ͠ͳ͍ͨΊɺ File IO΁ͷӨڹ͕ ؇࿨͞ΕΔ • ϩʔΧϧ಺ʹ hash Λϕʔεʹͨ͠cacheΛ࡞Γɺhash ஋͕Ұகͨ͠ΒcacheΛ࢖͏ Network IO΁ͷӨڹ΋؇ ࿨͞ΕΔ • ϥϯλΠϜͰϞδϡʔϧΛղܾ͢ΔͨΊɺ npm install ͕ཁΒͳ͘ͳΔɻ

Slide 17

Slide 17 text

$ git clone && npm install && node app.js Ͱ͸ͳ͘

Slide 18

Slide 18 text

$ git clone && tink sh app.js ͜͏ͳΔ

Slide 19

Slide 19 text

͜ͷઓུΛ zero install ͱݺͿ

Slide 20

Slide 20 text

prepare && unwind • prepare ͸ࣄલʹ module Λ fetch ͢ΔίϚ ϯυ • unwind ͸ࣄલʹ node_modules Λ࣮ମԽ͢ ΔίϚϯυ $ tink prepare $ tink unwind

Slide 21

Slide 21 text

prepare && unwind • prepare ͸ࣄલʹ module Λ fetch ͢ΔίϚ ϯυ • unwind ͸ࣄલʹ node_modules Λ࣮ମԽ͢ ΔίϚϯυ $ tink prepare $ tink unwind ຊ൪ىಈ࣌ʹ͸ىಈޙͷGFUDIΛ஗͍ͱ໰୊ͳͷ Ͱɺىಈલʹࣄલॲཧ͢ΔίϚϯυ͕ఏڙ͞ΕͯΔ

Slide 22

Slide 22 text

loadmap • tink ͸ npm v8 Ͱ npm ຊମʹ౷߹͞ΕΔ༧ఆ • Node ͷίΞʹ΋integrate༧ఆ

Slide 23

Slide 23 text

·ͱΊ

Slide 24

Slide 24 text

·ͱΊ • npm, yarn ͸ࠓޙ zero install ࣌୅ʹͳ͍ͬͯ ͘ • ҰํͰɺͲͪΒʹ΋༗ҙ͕ࠩ͋ΔΑ͏ʹ͸ݟ ͑ͳ͔ͬͨ • ·ͩ experimental ৭Μͳͱ͜ΖͰ໰୊఺Λग़ ͢ϑΣʔζ

Slide 25

Slide 25 text

࣍ͷ࿩ߦ͖·͢ʂʂʂ

Slide 26

Slide 26 text

JavaScript Registry ͷࠓޙ

Slide 27

Slide 27 text

JavaScript Registryͱ͸: package Λ backend Ͱ؅ཧ ͍ͯ͠ΔαʔϏε npm, githubͷ෺͕͋Δ

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

Package Managementͷܦࡁ

Slide 30

Slide 30 text

RegistryΛϏδωεతʹ੒ޭ ͤ͞Δ͜ͱ͸೉͍͠ʂʂʂʂ

Slide 31

Slide 31 text

npmͷϏδωεϞσϧ

Slide 32

Slide 32 text

npmͷϏδωεϞσϧ • public module ΛແঈͰఏڙɺίετ͸npm Ͱෛ୲ • private module ΍ enterprise ͳΞΫηείϯτ ϩʔϧΛ͢ΔͳΒ༗ঈ൛Λܖ໿ • public module cost Λ private module ͷച্ Ͱ࿫͏Ϟσϧ

Slide 33

Slide 33 text

npm͸Ͱ͔͍ • 100ສϞδϡʔϧ΋͋Δ

Slide 34

Slide 34 text

npm is hard • اۀ͔Βͷد෇ۚͰ·͔ͳ͏ͷ͸ʁ • খ͍͞RegistryͳΒͰ͖Δ͕ɺେ͖͘ͳΔͱ NG • ࠓ͸Venture CapitalʹཔͬͯΔɻ • VC͔Βͷҙ޲͕มΘΕ͹ӡӦํ਑΋มΘΔ

Slide 35

Slide 35 text

͡Ό͋Ͳ͏͢Δ͔

Slide 36

Slide 36 text

͡Ό͋Ͳ͏͢Δ͔ • தԝूݖ؅ཧ͢ΔͷͰ͸ͳ͘ɺ෼ࢄ؅ཧͯ͠ ͍͜͏ • Ұͭʹू໿͗͢͠Δͱίετ΋ूத͢Δ͕ɺ ෼ࢄ͢Ε͹ίετ΋෼ࢄͰ͖Δ

Slide 37

Slide 37 text

Entropic: a federated package registry

Slide 38

Slide 38 text

OQNJOD ձࣾ OQN$-* OQN3FHJTUSZ OQN3FHJTUSZ &OUSPQJD UJOL ZBSO &OUSPQJD 3FHJTUSZ &OUSPQJD$-* ET

Slide 39

Slide 39 text

Entropic • npmʹ΋ܨ͕Δ৽͍͠Registry • ͨͩ͠෼ࢄ؅ཧͰ͖ΔΑ͏ʹ֤छͷRegistryͱ ࿈ܞͰ͖ΔΑ͏ʹͳ͍ͬͯΔ • ͜ΕΒΛ·ͱΊ͋͛ΔͨΊʹdsͱݺ͹ΕΔ৽ ͍͠CLI΋͍࣋ͬͯΔ

Slide 40

Slide 40 text

package ࢦఆํ๏ • namespace, domain, package nameͷͦΕͧ ΕΛͪΌΜͱࢦఆ͢Δ • [email protected]/pkg-name • npmʹ΋legacyωʔϜεϖʔεͰ઀ଓͰ͖Δ

Slide 41

Slide 41 text

Entropicͷΰʔϧ • ʮԿ΋͠ͳ͍Ͱnpm͕౗ΕΔ͔ɺ༗ޮࡦ͕ग़Δ ·Ͱ଴ͭʯҎ֎ͷબ୒ࢶΛ༻ҙ͍ͨ͠ • ʮRegistryͷӡ༻஌ݟʯΛ޿Ί͍ͨ • ʮதԝूݖ͔Β෼ࢄ؅ཧʯʹৼΓࢠΛ໭͍ͨ͠

Slide 42

Slide 42 text

Entropicͷΰʔϧ • ʮԿ΋͠ͳ͍Ͱnpm͕౗ΕΔ͔ɺ༗ޮࡦ͕ग़Δ ·Ͱ଴ͭʯҎ֎ͷબ୒ࢶΛ༻ҙ͍ͨ͠ • ʮRegistryͷӡ༻஌ݟʯΛ޿Ί͍ͨ • ʮதԝूݖ͔Β෼ࢄ؅ཧʯʹৼΓࢠΛ໭͍ͨ͠ OQNΛ౗ͧ͢ʂͰ͸ͳ͘ɺΈΜͳͰӡ༻஌ݟΛ ߴΊͯ෼ࢄ؅ཧͰ͖ΔΑ͏ʹ͠Α͏͕ΰʔϧ

Slide 43

Slide 43 text

·ͱΊ

Slide 44

Slide 44 text

·ͱΊ • npm vs yarn ͱ͔ͷ࿩Ͱ͸ͳ͘ɺࠓ΍ JavaScript Registry ͸༗ޮࡦ͕ग़ͳ͍ݶΓ·ͣ ͍ঢ়گ • ࠓٻΊΒΕͯΔͷ͸Registryͷӡ༻஌ݟ • ࠓޙͲ͏ͳΔ͔͸ෆ໌ɺΈΜͳͰ༗ޮࡦΛߟ͑ ͍ͯ͘ϑΣʔζ