Slide 1

Slide 1 text

Node.js v22 ͰมΘΔ͜ͱ 2024/4/24 @ ྩ࿨τϥϕϧ

Slide 2

Slide 2 text

X: @yosuke_furukawa Github: yosuke-furukawa

Slide 3

Slide 3 text

Node.js v21 => v22 ͰมΘͬͨ͜ͱΛ· ͱΊ·͢

Slide 4

Slide 4 text

໔੹ • v21 Ͱ͢ͰʹೖͬͯΔ΋ͷ΋ؚΈ·͢ • 21 ͱ 22 ͸ Major Version up Ͱ͋Γɺػೳͷ௥Ճ͸ Minor Version up Ͱ͢ͰʹߦΘΕͯΔ΋ͷ΋ଟ͍ͨΊ

Slide 5

Slide 5 text

1ݸ໨!!!

Slide 6

Slide 6 text

Ϛείοτര஀

Slide 7

Slide 7 text

Ϛείοτ

Slide 8

Slide 8 text

Ϛείοτ • ࣮͸ੲ͔ΒϚείοτΩϟϥΫλʔͱͯ͠ΧϝͱϩέοτͷΞ ΠσΞ͸͋ͬͨɻ

Slide 9

Slide 9 text

αΫαΫߦ͘Αʂ2ݸ໨!!!

Slide 10

Slide 10 text

require(ESM)

Slide 11

Slide 11 text

require(ESM) • ͜Ε·Ͱͷঢ়گ • Node.js ٴͼ JS ʹ͸̎ͭͷmodule load ํ͕ࣜ͋Δ • ESM ͱ CJS • ैདྷ͋ͬͨͷ͕ CJS, 2015೥Ҏ߱ʹͰ͖ͨͷ͕ESM • ESM ͔Β CJS ͸ಡΊ͕ͨɺٯͷCJS͔ΒESMΛಡΉ͜ͱ͕Ͱ͖ͳ͔ͬͨ

Slide 12

Slide 12 text

require(ESM) • ྫ͑ΔͳΒɺ USB-C ͱ USB-A Έ͍ͨͳɾɾɾʁ • USB-CରԠσόΠε͸ USB-CɺUSB-A྆ํରԠͰ͖ΔʢΞμϓλ΋ചͬͯΔ͠ɺن֨ తʹ΋ೝΊΒΕͯΔʣ • USB-AରԠσόΠε͸USB-C͔Βܨ͛ͳ͍ɻʢΞμϓλ͸ചͬͯΔ͚Ͳɺن֨֎ͰೝΊ ΒΕͯͳ͍ʣ • CରԠ AରԠ AରԠ CରԠ

Slide 13

Slide 13 text

require(ESM) • ৚݅෇͖Ͱ CJS => ESM ΋ೝΊΔ͜ͱʹͳͬͨ • ͖ͬ͞ͷྫͰݴ͑͹ɺ USB-A σόΠε͔Β USB-C ΁ͷม׵͕ ن্֨΋ೝΊΒΕΔΑ͏ʹͳͬͨɻ • ৚݅͸͋ΔɺதͰ top-level-await Λ͍ͯ͠Δͱμϝ • USB-A=>USB-C΋USB-Cͷಠࣗػೳ͸࢖͑ͳ͍ͷͱಉ͡

Slide 14

Slide 14 text

require(ESM) • --experimental-require-moduleϑϥά͕ࠓ͸ඞཁ • ͭ·Γ·࣮ͩݧஈ֊ • ࠓޙ͸ϑϥάແ͠Ͱ࢖͑ΔΑ͏ʹ͍ͯ͘͠༧ఆ

Slide 15

Slide 15 text

3ݸ໨ʂʂʂ

Slide 16

Slide 16 text

v8 Maglev

Slide 17

Slide 17 text

v8 Maglev • v8 ͱ͍͏ JavaScript ࣮ߦΤϯδϯ͕มΘͬͨɻ • Just In Time Compiler ʹ͸֊૚͕͋Δɻ • ࠓ·Ͱ Ignition, Sparkplug, TurboFan ͷ3૚ͩͬͨͷ͕ɺ4૚ʹ ͳͬͨɻ Ignition, Sparkplug, Maglev, TurboFan

Slide 18

Slide 18 text

v8 Maglev • ௒ઈͬ͘͟Γݴ͏ͱ: • 3ஈม଎ΪΞ͔Β4ஈม଎ΪΞʹมΘͬͨ • ΪΞ͕૿͑Δ㲈͍ΖΜͳہ໘ʹରԠͰ͖Δ • ݁Ռɺੑೳ໘Ͱ΋શମతʹߴ଎ʹɻ

Slide 19

Slide 19 text

v8 Maglev • Node.js ͷதͰݴ͏ͱɺServer Side ͷվળͱ͍͏ΑΓ΋CLIΈ ͍ͨͳγϣʔτλΠϜͰ࢖͏Α͏ͳΞϓϦέʔγϣϯͰվળ͞ ΕͯΔɻ • tsc ࣮ߦ, linter, formatter etc

Slide 20

Slide 20 text

4ݸ໨ʂʂʂ

Slide 21

Slide 21 text

node --run

Slide 22

Slide 22 text

node --run • npm run hogehoge Ͱ࣮ߦ͍ͯͨ͠ script ࣮ߦʹ৽͍͠ํ๏͕ ೖͬͨɻ • node --run hogehoge Ͱ࣮ߦՄೳ • ͜ΕʹΑΓɺ npm ্ཱͪ͛·Ͱͷىಈ࣌ؒΛݮΒͯ͠ύ ϑΥʔϚϯεվળͰ͖ΔΑ͏ʹͳ͍ͬͯΔɻ

Slide 23

Slide 23 text

node --run • npm run test ΑΓ΋ node --run test ͷํ͕଎͍ͬͯ͜ͱ • ద౰ͳ؀ڥͰ࣮ߦͨ݁͠Ռͩͱ100msલޙ଎͍ɻ

Slide 24

Slide 24 text

5ݸ໨ʂʂʂ

Slide 25

Slide 25 text

fs.glob, fs.globSync

Slide 26

Slide 26 text

fs.glob,fs.globSync import { glob } from 'node:fs/promises'; for await (const entry of glob('**/*.mjs')) { console.log(entry); } // foo.mjs // bar/baz.mjs // hoge/fuga/piyo.mjs

Slide 27

Slide 27 text

͜Μͳײ͡Ͱ

Slide 28

Slide 28 text

Node.js v22 • ৭ʑϦϦʔε͞ΕͯΔ͚Ͳɺجຊͦ͜·Ͱ໨৽͍͠΋ͷͰ͸ͳ ͍ɻ • خ͍͠ͷ͸ଟ͍ɻΑΓྑ͘͢ΔͨΊͷεςοϓόΠεςοϓͷ ਐԽ͕خ͍͠ɻ • ֵ৽తͳਐԽͰ͸ͳ͘ɺ઴ਐతͳਐԽ