Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Node.js v22 で変わること
Search
Yosuke Furukawa
PRO
April 24, 2024
Programming
6.7k
13
Share
Node.js v22 で変わること
2024/04/24 令和トラベルで発表した Node.js v22 で変わることの話です。
Yosuke Furukawa
PRO
April 24, 2024
More Decks by Yosuke Furukawa
See All by Yosuke Furukawa
デザインシステムが必須の時代に
yosuke_furukawa
PRO
2
210
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
10
5.1k
Welcome JSConf.jp 2024
yosuke_furukawa
PRO
1
4.6k
tc39 x jsconf.jp Panel Discussion 2024
yosuke_furukawa
PRO
0
320
Removing Corepack
yosuke_furukawa
PRO
9
1.9k
JavaScript Runtime とはなにか
yosuke_furukawa
PRO
15
3k
Strip Types と Storage
yosuke_furukawa
PRO
4
490
Module Harmony について
yosuke_furukawa
PRO
4
1.9k
LTのやり方
yosuke_furukawa
PRO
16
2.9k
Other Decks in Programming
See All in Programming
iOS機能開発のAI環境と起きた変化
ryunakayama
0
140
Symfony + NelmioApiDocBundle を使った スキーマ駆動開発 / Schema Driven Development with NelmioApiDocBundle
okashoi
0
260
The Monolith Strikes Back: Why AI Agents ❤️ Rails Monoliths
serradura
0
110
AI駆動開発がもたらすパラダイムシフト
ryosuke0911
0
110
野球解説AI Agentを開発してみた - 2026/02/27 LayerX社内LT会資料
shinyorke
PRO
0
390
それはエンジニアリングの糧である:AI開発のためにAIのOSSを開発する現場より / It serves as fuel for engineering: insights from the field of developing open-source AI for AI development.
nrslib
1
820
条件判定に名前、つけてますか? #phperkaigi #c
77web
2
940
安いハードウェアでVulkan
fadis
1
890
レガシーPHP転生 〜父がドメインエキスパートだったのでDDD+Claude Codeでチート開発します〜
panda_program
0
210
煩雑なSkills管理をSoC(関心の分離)により解決する――関心を分離し、プロンプトを部品として育てるためのOSSを作った話 / Solving Complex Skills Management Through SoC (Separation of Concerns)
nrslib
3
370
事業会社でのセキュリティ長期インターンについて
masachikaura
0
230
The free-lunch guide to idea circularity
hollycummins
0
410
Featured
See All Featured
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
340
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
260
How STYLIGHT went responsive
nonsquared
100
6k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
140
The World Runs on Bad Software
bkeepers
PRO
72
12k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
How to train your dragon (web standard)
notwaldorf
97
6.6k
How to Talk to Developers About Accessibility
jct
2
170
Writing Fast Ruby
sferik
630
63k
Done Done
chrislema
186
16k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
110
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
330
Transcript
Node.js v22 ͰมΘΔ͜ͱ 2024/4/24 @ ྩτϥϕϧ
X: @yosuke_furukawa Github: yosuke-furukawa
Node.js v21 => v22 ͰมΘͬͨ͜ͱΛ· ͱΊ·͢
໔ • v21 Ͱ͢ͰʹೖͬͯΔͷؚΈ·͢ • 21 ͱ 22 Major
Version up Ͱ͋ΓɺػೳͷՃ Minor Version up Ͱ͢ͰʹߦΘΕͯΔͷଟ͍ͨΊ
1ݸ!!!
Ϛείοτര
Ϛείοτ
Ϛείοτ • ࣮ੲ͔ΒϚείοτΩϟϥΫλʔͱͯ͠ΧϝͱϩέοτͷΞ ΠσΞ͋ͬͨɻ
αΫαΫߦ͘Αʂ2ݸ!!!
require(ESM)
require(ESM) • ͜Ε·Ͱͷঢ়گ • Node.js ٴͼ JS ʹ̎ͭͷmodule load ํ͕ࣜ͋Δ
• ESM ͱ CJS • ैདྷ͋ͬͨͷ͕ CJS, 2015Ҏ߱ʹͰ͖ͨͷ͕ESM • ESM ͔Β CJS ಡΊ͕ͨɺٯͷCJS͔ΒESMΛಡΉ͜ͱ͕Ͱ͖ͳ͔ͬͨ
require(ESM) • ྫ͑ΔͳΒɺ USB-C ͱ USB-A Έ͍ͨͳɾɾɾʁ • USB-CରԠσόΠε USB-CɺUSB-A྆ํରԠͰ͖ΔʢΞμϓλചͬͯΔ͠ɺن֨
తʹೝΊΒΕͯΔʣ • USB-AରԠσόΠεUSB-C͔Βܨ͛ͳ͍ɻʢΞμϓλചͬͯΔ͚Ͳɺن֨֎ͰೝΊ ΒΕͯͳ͍ʣ • CରԠ AରԠ AରԠ CରԠ
require(ESM) • ͖݅Ͱ CJS => ESM ೝΊΔ͜ͱʹͳͬͨ • ͖ͬ͞ͷྫͰݴ͑ɺ USB-A
σόΠε͔Β USB-C ͷม͕ ن্֨ೝΊΒΕΔΑ͏ʹͳͬͨɻ • ݅͋ΔɺதͰ top-level-await Λ͍ͯ͠Δͱμϝ • USB-A=>USB-CUSB-Cͷಠࣗػೳ͑ͳ͍ͷͱಉ͡
require(ESM) • --experimental-require-moduleϑϥά͕ࠓඞཁ • ͭ·Γ·࣮ͩݧஈ֊ • ࠓޙϑϥάແ͠Ͱ͑ΔΑ͏ʹ͍ͯ͘͠༧ఆ
3ݸʂʂʂ
v8 Maglev
v8 Maglev • v8 ͱ͍͏ JavaScript ࣮ߦΤϯδϯ͕มΘͬͨɻ • Just In
Time Compiler ʹ֊͕͋Δɻ • ࠓ·Ͱ Ignition, Sparkplug, TurboFan ͷ3ͩͬͨͷ͕ɺ4ʹ ͳͬͨɻ Ignition, Sparkplug, Maglev, TurboFan
v8 Maglev • ઈͬ͘͟Γݴ͏ͱ: • 3ஈมΪΞ͔Β4ஈมΪΞʹมΘͬͨ • ΪΞ͕૿͑Δ㲈͍ΖΜͳہ໘ʹରԠͰ͖Δ • ݁Ռɺੑೳ໘Ͱશମతʹߴʹɻ
v8 Maglev • Node.js ͷதͰݴ͏ͱɺServer Side ͷվળͱ͍͏ΑΓCLIΈ ͍ͨͳγϣʔτλΠϜͰ͏Α͏ͳΞϓϦέʔγϣϯͰվળ͞ ΕͯΔɻ •
tsc ࣮ߦ, linter, formatter etc
4ݸʂʂʂ
node --run
node --run • npm run hogehoge Ͱ࣮ߦ͍ͯͨ͠ script ࣮ߦʹ৽͍͠ํ๏͕ ೖͬͨɻ
• node --run hogehoge Ͱ࣮ߦՄೳ • ͜ΕʹΑΓɺ npm ্ཱͪ͛·Ͱͷىಈ࣌ؒΛݮΒͯ͠ύ ϑΥʔϚϯεվળͰ͖ΔΑ͏ʹͳ͍ͬͯΔɻ
node --run • npm run test ΑΓ node --run test
ͷํ͕͍ͬͯ͜ͱ • దͳڥͰ࣮ߦͨ݁͠Ռͩͱ100msલޙ͍ɻ
5ݸʂʂʂ
fs.glob, fs.globSync
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
͜Μͳײ͡Ͱ
Node.js v22 • ৭ʑϦϦʔε͞ΕͯΔ͚Ͳɺجຊͦ͜·Ͱ৽͍͠ͷͰͳ ͍ɻ • خ͍͠ͷଟ͍ɻΑΓྑ͘͢ΔͨΊͷεςοϓόΠεςοϓͷ ਐԽ͕خ͍͠ɻ • ֵ৽తͳਐԽͰͳ͘ɺਐతͳਐԽ