Share
Embed
JSモジュールの歴史とSnowpack / History of JS module and Snowpack
三好康介(LINE 株式会社 Front-End Dev 10 チーム)
UIT Meetup vol. 13 『知っておきたいFront-end Toolingの今』
での登壇資料です
https://uit.connpass.com/event/216043/
LINE Developers
July 07, 2021
Transcript
14 slides
-
ొஃऀհ 2 ࠃͷՈిϝʔΧʔͳͲͰϒϥβػೳͷಈ࡞ݕূ༻ αΠτͳͲΛͭͬͨ͘Γɺಈ࡞ݕূΛͨ͠Γ͍ͯͨ͠ ͷ͕͜ͷۀքʹೖΔΩοΧέͰɺͦͷޙϥΠϒυΞ ʹೖࣾɺlivedoor ϙʔλϧ livedoor ϒϩάɺ BLOGOSͳͲͷϑϩϯτΤϯυʹؔΘͬͨޙʹձࣾ
͕߹ซɺLINEࣾͱͳͬͨޙओʹLINE NEWSʹؔΘ Δɻ myLifeAsaDog ͱ͍͏໊લͰɺSvelte ͷυΩϡϝϯτ ͷຊޠԽʹڠྗ͓ͯ͠Γɺઌਖ਼ࣜʹެ։͞Ε·͠ ͨɻ https://svelte.jp/ Kosuke Miyoshi LINEגࣜձࣾ Front-end ։ൃηϯλʔ -
ES Modules ·Ͱͷͬ͘͟Γͱͨ͠ྺ࢙ History of the JS modules format ਓྨͱϞδϡʔϧܗࣜͱͷઓ͍ͷي
1. NodeJS ͕ੜɺCommonJS Λجʹͨ͠ϞδϡʔϧػೳΛ࣮ 2. RequireJS ͕ੜɺAMD Λϒϥβ༻ʹม͢Δ 3. Browserify ͕ੜɺCommonJS Λϒϥβ༻ʹม͢Δ 4. CommonJS Ͱ AMD Ͱ͑Δ UMD ͕ੜ 5. Webpack ͕ੜɺͨΒͱଟػೳͰ࣮࣭తʹσϑΝΫτڥͱͳΔ 6. ES Modules ͷࡦఆ ͭ·Γݱঢ়Ͱ CommonJSʢCJSʣɺAMDɺUMDɺES ModulesʢESMʣ ͷ̐छྨͷϞδϡʔϧܗ͕ࣜଘࡏ ͢Δ͜ͱʹͳΓ·͢ɻ 3 ※ ຊਓͷओ؍తهԱͰهࡌ͍ͯ͠ΔͷͰɺৄࡉ͕ؒҧ͍ͬͯΔՄೳੑ͕͋Γ·͢ɻ -
ESM༷ͷࡦఆ ES Modules was born ES Modules ͷੜ ϑϩϯτΤϯυͷෳࡶԽɾංେԽʹͱͳͬͯ ES
ModulesʢESMʣ ͱ͍͏༷͕ࡦఆ͞Εͨɺ͜Ε 2021 ݱࡏͰطʹ Microsoft Edge ΛؚΉ IE Ҏ֎ͷϒϥβͰରԠ͞Ε͓ͯΓɺNodejs Ͱ v12 Ҏ߱ඪ ४ରԠ͍ͯ͠·͢ɻ 4 -
ES Modules ීٴͷน Dissemination of ES Modules ES Modules ͷීٴ
͡Ό͋ Production ڥͰґଘϑΝΠϧΛ ESM ͰΨϯΨϯ import ͢Εྑ͍ΑͶʂͱ͍ͨ͠ͱ͜Ζͩͬͨ ͕ɺ͍͔ͭ͘ͷ͕ଘࡏ͍ͯ͠·͢ɻ • webpack ͷόϯυϥ͕։ൃڥͱͯ͠ීٴͯ͠͠·͍ͬͯΔ • npm Ͱఏڙ͞Ε͍ͯΔϥΠϒϥϦͷଟ͕͘ ESM ʹରԠ͍ͯ͠ͳ͍ • import ʹରԠ͍ͯ͠ͳ͍ϒϥβʹର͢Δޓੑ͕·ΔͰͳ͍ 5 -
ES Modules Snowpack is here! ͦͯ͠Snowpackͷొ ͜͜Ͱલड़ͷΛղܾ͢ΔͨΊͷ৽ͨͳखஈͱͯ͠͞Ε͍ͯΔͷ͕ Snowpack ͱ͍͏Ϗϧυπʔϧ Ͱɺ͜Ε୯७ʹ͍͏ͱ
npm ϥΠϒϥϦΛ ESM ܗࣜʹมͯ͠ग़ྗ͢Δͱ͍͏ʮϏϧυπʔϧʯͰ͋Δɻ ͜ΕΛར༻͢Δ͜ͱʹΑΓɺલड़ͨ͠Α͏ͳैདྷͷΛΫϦΞͯ͠ϒϥβඪ४ͷϞδϡʔϧػೳΛར ༻͢Δ͜ͱ͕Ͱ͖ΔΑ͏ʹͳΓ·͢ɻ ͳ͓ʮҰϑϨʔϜϫʔΫͳͲΛར༻͍ͯ͠ͳ͍ʯͱ͍͏ͷͰ͋ΕͦΕ͚ͩͰେৎͰ͕͢ɺݱঢ়Ͱϑ ΝΠϧͷόϯυϧ͚ͩͰͳ͘ɺJSX Vue ςϯϓϨʔτϑΝΠϧͷมͳͲόϯυϥͰߦ͍ͬͯΔͱࢥ ͏ͷͰɺͦΕΒͷରԠʹ͍ͭͯղઆ͓͖ͯ͠·͢ɻ 6 -
Snowpack ͷϘΠϥʔϓϨʔτ Support for frameworks ϑϨʔϜϫʔΫͷରԠ Snowpack ʹ create-snowpack-app ͱ͍͏ϘΠϥʔϓϨʔτ͕ଘࡏ͓ͯ͠Γɺ؆୯ʹ͍͏ͱ
React VueJS ͳͲͷϑϨʔϜϫʔΫΛ Snowpack Ͱม͢Δࡍͷ։ൃڥ͕͋Β͔͡Ί༻ҙ͞Ε͍ͯ·͢ɻ ͜ΕʹΑΓ JSX VueϑΝΠϧɺSvelteϑΝΠϧͷมͳͲ͕ߦ͑·͢ɻ 7 -
React Specific examples when using frameworks ϑϨʔϜϫʔΫར༻࣌ͷ۩ମྫ npx create-snowpack-app <yourappname>
--template @snowpack/app-template-react 8 React + TypeScript npx create-snowpack-app <yourappname> --template @snowpack/app-template-react-typescript Vue npx create-snowpack-app <yourappname> --template @snowpack/app-template-vue Vue + TypeScript npx create-snowpack-app <yourappname> --template @snowpack/app-template-vue-typescript -
SkypackͱԿͳͷ͔ʁ What is Skypack Skypackʹ͍ͭͯ Snowpack खݩͰ npm Λesm ʹม͢ΔΘ͚Ͱ͕͢ɺखݩͰͰ͖Δͱ͍͏͜ͱαʔόʔͰͰ͖ΔΘ͚
Ͱ͢ɺैͬͯ npm ΛαʔόʔଆͰ esm ʹมͯ͠CDNͰ৴͢Δɺͱ͍͏͜ͱग़དྷ·͢ɻ ͪΖΜݸਓͰαʔόʔΛཱͯͯESMʹϏϧυͨ͠ͷΛ༻ҙͯ͠͏ɺͱ͍͏͜ͱͰ͖·͕͢ɺطʹα ʔϏεͱͯ͠༻ҙ͞Ε͍ͯΔCDN͕͋Γ·͢ɻ ͦΕ͕ Skypack ͰɺSnowpack ಉ༷ʹ͜Ε Pika ͷϓϩδΣΫτͷҰͰɺSnowpack ͰΦϓγϣϯͰࢦ ఆ͢Ε Skypack Λѻ͑·͢ɻ ※ Ωϟογϡ͕ͳ͚ΕϏϧυ͢ΔํࣜͳͷͰɺॳճΞΫηε࣌ʹԠ͕͍߹͕͋Γ·͢ɻ 9 -
Snowpack ͷϝϦοτ Merits and demerits of Snowpack SnowpackͷϝϦοτͱσϝϦοτʹ͍ͭͯ • ઃఆ͕γϯϓϧ
• Ωϟογϡ͕ޮ͖͍͢ • ESM͕ීٴͨ͠߹ͷҠߦָ͕ • มߋͷͳ͍ϑΝΠϧϏϧυ͠ͳͯ͘ࡁΉ 10 Snowpack ͷσϝϦοτ • ࠾༻࣮͕গͳ͍ʢΞϦόόͳͲதࠃͷαʔϏεͰଟগͷ࠾༻ྫ͕͋Δʣ • ࠷ۙͷͷͳͷͰΤίγεςϜ͕ෆे • طଘͷόϯυϥ͔ΒͷҠߦ͕͍͠ • IE༻ʹ݁ہόϯυϧϑΝΠϧΛग़ྗ͢Δ͜ͱʹͳΔ -
·ͱΊ Current Status of Snowpack Snowpackͷݱঢ় ڊେͳϑΝΠϧΛѻ͏ͱෆ҆ఆʹͳͬͨΓɺWindowsڥͷରԠ͕ෆेͰ͋ͬͨΓ͢ΔͨΊɺ Snowpack ͚ͩͰ։ൃڥΛΧόʔ͠Α͏ͱ͢Δ߹ɺݱঢ়ͰαʔϏεͷنӨڹൣғɺ ϝϯςφϯεͷίετΛߟྀͯ͠࠾༻͢Δඞཁ͕͋Γ·͢ɻ
͔͠͠ͳ͕ΒɺͦΕΒ·ͩ৽͍͠πʔϧ͔ͩΒͱ͍͏ଆ໘͕େ͖͘ɺ͍ϐονͰվྑ͕ ଓ͚ΒΕ͓ͯΓػೳॆ࣮͖͍ͯͯ͠ΔͷͰɺݱঢ়͚ͩΛݟͯஅ͢Δ͖Ͱ͋Γ·ͤΜ͠ɺ ݱঢ়ͰϓϩδΣΫτͷ্ཱͪ͛࣌ͳͲͰརศੑ͕ߴ͍ͷࣄ࣮Ͱ͢ɻ 11 -
։ൃڥʹ͓͚ΔSnowpack Current Status of Snowpack ݱঢ়ͰͷSnowpack ࣮ࡍʹݱঢ়Ͱ։ൃڥͰ Snowpack Ͱ ESM
ʹͯͬͯ͠Ϗϧυ࣌ؒΛॖͭͭ͠ɺ ϓϩμΫτڥͰͻͱͭʹόϯυϧͨ͠ϑΝΠϧͱͯ͠ग़ྗͯ͠৴͢Δɻ ͱ͍͏Α͏ͳ͍ํ͕ଟ͍Α͏ʹݟฉ͖͍ͯ͠·͢ɺ͜ͷ͍ํʹϓϩμΫτͷ্ཱͪ͛࣌ʹ ڥߏங͕ૣ͘ɺίʔυͷ࣮ʹ͙͢ҠΕΔ্ʹ։ൃதʹϑΝΠϧ͕όϯυϧ͞Εͨঢ়ଶͰͳ͍ͷͰɺ Τϥʔ͕ग़ͨ߹ͳͲʹσόοά͕͍͢͠ɺͱ͍͏ϝϦοτ͕͋Γ·͢ɻ ·ͨϓϩμΫγϣϯڥͰόϯυϧ͞ΕͨϑΝΠϧΛ৴͢ΔͷͰɺIEʹରԠͰ͖Δͱ͍͏Θ͚Ͱ͢ɻ 12 -
·ͱΊ Current Status of Snowpack ݱঢ়ͰͷSnowpack Snowpack ͕কདྷͲΕ΄Ͳ༗ྗͳπʔϧʹͳΔ͔ະͰ͕͢ɺલड़ͷ௨Γ2021ݱࡏͰɺ ओཁͳϒϥβͷΈͳΒͣ NodeJSɾDeno
ESM ʹରԠ͍ͯ͠Δঢ়ଶͰ͋Γɺطʹະདྷͷٕज़Ͱͳ͘ ࠓ͙͑͢Δٕज़ʹͳ͍ͬͯ·͢ɻ ͦͷͨΊόϯυϧΛ࠷খݶʹͯ͠ Native ESM Λར༻͢Δͱ͍͏࣮ํɺকདྷͷϑϩϯτΤϯυ։ൃʹ ͓͍ͯ৽ͨͳτϨϯυͱͳΔՄೳੑ͕ߴ͘ɺͦͷ࣌ʹඋ͓͖͍͑ͯͨ͠ɺબࢶͷҰͭͱͯ͠ Snowpack Λ ͓࣋ͬͯ͘ͷѱ͍͜ͱͰͳ͍ͱࢥ͍·͢ɻ 13