Movatterモバイル変換


[0]ホーム

URL:


Upgrade to Pro — share decks privately, control downloads, hide ads and more …
Speaker DeckSpeaker Deck
Speaker Deck

JavaScript Runtime とはなにか

Avatar for Yosuke Furukawa Yosuke Furukawa
August 21, 2024

JavaScript Runtime とはなにか

Avatar for Yosuke Furukawa

Yosuke Furukawa

August 21, 2024
Tweet

More Decks by Yosuke Furukawa

See All by Yosuke Furukawa

Other Decks in Programming

See All in Programming

Featured

See All Featured

Transcript

  1. JavaScript Runtime ͱ͸ͳʹ͔ 2024/08/19 @ Offers Meetup

  2. X: @yosuke_furukawa GitHub: yosuke-furukawa

  3. CFP ืूதʂʂʂʂʂ

  4. Node.js is a free, open-source, cross- platform JavaScript Runtime Environment

  5. Deno is the open-source JavaScript runtime for the modern web.

  6. Bun is a new JavaScript runtime built from scratch to

    serve the modern JavaScript ecosystem
  7. ͦ΋ͦ΋ Runtime ͬͯͳΜͩ

  8. ೔ຊޠͷࣙॻతͳҙຯ: ࣮ߦதͷ ~

  9. ͑ͬܗ༰ࢺʁ

  10. ࣮͸ͦ͏ɻ Runtime System, Runtime library, Runtime Environment Έ͍ͨʹ࢖͏ɻ

  11. ݴޠ͸ compile time ͱ run time ʹ෼͔Ε ͯͯɺ run time

    ɺͭ·Γ࣮ߦதͷ࣌ʹඞཁ ͳ࢓૊ΈΛࢦͯ͠ Runtime System ΍ Runtime Environment, Runtime Library ͱݴͬͨΓ͢Δɻ
  12. JSͷ෼໺(Node.js, Deno, Bunͷྫ)Ͱ͸ Runtime = Runtime Environment Λলུͨ͠΋ͷͱͯ͠࢖͍ͬͯΔ

  13. ଞͷݴޠͰ͸ʁ

  14. PHPͷ৔߹: Zend Engineͱݺ͹ΕΔEngine͕ίϯύΠ ϧٴͼRuntime Engineͱͯ͠ৼΔ෣ͬͯ ͍Δɻ

  15. Javaͷ৔߹: Java Runtime EnvironmentͱJava VMʹ ෼͔ΕͯΔɻVM͕OS, CPUͷந৅ԽΛओ ʹ୲͍ɺRuntime Environment͸ͦΕҎ֎ ͷॲཧΛ೚͞ΕͯΔɻ(JSʹ͍ۙ)

  16. Rustͷ৔߹: Runtimeͷ۠෼͚Έ͍ͨͳ΋ͷ͸ͳ͍ɺಛ ʹΑ͋͘ΔRuntime࣌ͷGCॲཧ͸ଘࡏ͠ͳ ͍ɻҰ෦ͷasync IO͸tokioͳͲͷ3rd party library͕୲ͬͯΔ

  17. ͬ͘͢͝ᐆດ

  18. ΋ͬͱ͍͏ͱ

  19. ͔͜͜Β͜͜·Ͱ࣮૷͢Δ΋ͷ͕ "Runtime Environment" ͩɻ ͱ͍͏໌֬ͳఆٛ͸ͳ͍ͱࢥͬͯΔɻ

  20. ͳ͔ͥͱ͍͏ͱɺݴޠઃܭऀʹΑͬͯ ϓϩάϥϛϯάݴޠͱͦΕΛऔΓר͘पล ͷػೳΛͲ͏֊૚෼͚ͯ͠දݱ͍ͯ͠Δ͔ ͕ҧ͏͔Βɻ

  21. ͨ·ͨ· JavaScript ͸ݴޠͷίΞ࢓༷ (ECMAScript)ͱपลͷػೳ࢓༷͕෼͔Ε ͯɺϒϥ΢β΍αʔόʹ૊Έࠐ·ΕͯΔɻ

  22. ݴޠͷίΞ࢓༷ͱαʔό༻్Ͱར༻͢Δػ ೳ܈Λߏ੒ͨ͠΋ͷ͕ɺ Node.jsͰ͋Γ DenoͰ͋ΓBunͷΑ͏ͳ͜͜Ͱ Runtime ͱݺ͹ΕͯΔ΋ͷʹͳΔɻ

  23. Browser΋Runtimeͱ͍͏ᐆດͳఆٛͷ಺ ଆʹೖΕͯ͠·͑͹RuntimeʹͳΓ͑Δ

  24. ͳͷͰ

  25. Runtimeͱ͍͏ᐆດͳఆٛΛཧղ͠Α͏ͱ ͢ΔͷͰ͸ͳ͘ɺ

  26. ۩ମతͳݴޠ؀ڥʹ͓͍ͯɺ Ͳ͏͍͏ػೳ͕ݴޠଆͰఏڙ͞Ε͍ͯͯɺ Ͳ͏͍͏ػೳ͕पลଆͰఏڙ͞Ε͍ͯΔ͔ ͱ͍͏۩ମతͳػೳΛཧղ͢Δ΄͏͕෼͔ Γ΍͔ͬͨ͢Γ͢Δɻ

  27. JavaScriptͱपลΛؚΊͨ΋ͷʹ͸ ͦ΋ͦ΋ͲΜͳػೳ͕͋Δ͔

  28. JavaScript (+runtime) ػೳҰཡ • ࣈ۟ղੳ, ߏจղੳ (͍ΘΏΔ parser) • ߏจ࠷దԽ

    (͍ΘΏΔ JIT) • ϝϞϦ؅ཧ(ΨϕʔδίϨΫγϣϯ) • ΠϕϯτϋϯυϦϯά • ඇಉظॲཧػߏ • CPUந৅Խ • OSந৅Խ • File/Storage IO, Network IO • JS API (String, Number, etc) • ଞ API (DOM, Network, etc)
  29. JavaScript (+runtime) ػೳҰཡ • ࣈ۟ղੳ, ߏจղੳ (͍ΘΏΔ parser) • ߏจ࠷దԽ

    (͍ΘΏΔ JIT) • ϝϞϦ؅ཧ(ΨϕʔδίϨΫγϣϯ) • ΠϕϯτϋϯυϦϯά • ඇಉظॲཧػߏ • CPUந৅Խ • OSந৅Խ • File/Storage IO, Network IO • JS API (String, Number, etc) • ଞ API (DOM, Network, etc) JS Engine ͷػೳ Runtime ͷػೳ ྆ํ ͷػೳ
  30. Πϝʔδ JS Runtime JS Engine Parser JIT Memory Management CPU

    JS API (String, Number etc) Async Processing File Storage IO, Network IO Event Handling OS Other API (DOM, Network etc)
  31. ͜͜·Ͱͷ·ͱΊ

  32. Runtime ͱ͸ͳʹ͔ • Compile time / run time Ͱ෼͚ͨͱ͖ͷ࣮ߦதͷಈ͖ʹؔ͢Δ΋ͷΛࢦ ͢ɻ

    • ࣮͸ఆٛ͸ᐆດ • ʮ xxx ͸ Runtime ͳΜͰ͔͢?ʯΈ͍ͨͳ࣭໰͸͋·Γ͠ͳ͍ɻ • ݴޠͷίΞͱͳΔػೳ͕͋ΓɺͦͷपลΛͲ͏දݱ͢Δ͔Ͱܾ·Δɻ • ͔ͩΒΘ͔Γʹ͍͘ɺΘ͔ͬͨΑ͏ͰΘ͔Βͳ͍ɻ
  33. JavaScript ʹ͓͚Δ Runtime ͸Կ͕දݱ ͞ΕͯΔ͔ • ΠϕϯτϋϯυϦϯά • ඇಉظॲཧػߏ •

    File IO • Network IO • OSந৅Խ • ͦΕΒΛѻ͏ͨΊͷAPI • DOM • Network (fetch etc) • fs, http, child_process • etc
  34. ͣͬͱ͜͜·Ͱ Browser / Server Λ͋·Γ ෼͚ͣʹRuntimeͱͯ͠঺հ͖ͯͨ͠

  35. ࣮͸͜ͷBrowser/ServerपΓ͕࠷ۙ͸໘ ന͍ಈ͖Λݟ͍ͤͯΔɻ

  36. None
  37. WinterCG • Server ༻్Ͱར༻͞ΕͯΔ Runtime ͷ࠷খݶͷڞ௨APIηοτΛ࡞Γɺ૬ޓޓ ׵ੑΛ্͛Α͏ͱ͍͏ࢼΈ • ͦͷதͰʮͳΔ΂͘ʯBrowserʹ͍ۙAPIΛ࠾༻͠Α͏ͱ͍ͯ͠Δɻ •

    ྫ: • URL, Readable/Writable Stream, Request/Response, etc • https://common-min-api.proposal.wintercg.org/#api-index
  38. # Browser API Server API JS API ͜͜ͷڞ௨߲ʹͳΓಘΔ෦෼ΛͳΔ΂͘ େ͖͘Ͱ͖ͳ͍͔ͱ͍͏ࢼΈ

  39. ͯ͞ɺຊ୊

  40. Node.js / Deno / Bun ͦΕͧΕͷҧ͍ʹ͍ͭͯ

  41. ઓུ໘

  42. ڞ௨ઓུ • WinterCG΁ͷରԠΛਐΊͭͭɺ͓ޓ͍ͷྑ͍ͱ͜Ζ͕͋Ε͹ޙ௥͍Ͱ࠾༻͍ͯ͘͠ํ਑ • Node.js Ͱ͸࠷৽Ͱ strip-types ΍ storage ͷରԠ͕ਐΜͰΔ(Deno,

    Bunͷػೳ΁ͷ௥ै) • Deno͸Node.js Compatibility Λ্͛ͯnpmͷࢿ࢈΋࢖͑ΔΑ͏ʹ͍ͯ͠Δ(Node.jsطଘ ࢿ࢈΁ͷ௥ै) • Bun͸ WinterCG ΁͸ࢀՃද໌͍ͯ͠ͳ͍͕ɺ Web API Interop ͸Ͱ͖ΔൣғͰਐΊͯ Δɻ͞ΒʹNode.jsͷCompatibilityΛ্͛ͯnpmͷࢿ࢈΋࢖͑ΔΑ͏ʹ͍ͯ͠Δ(Node.js طଘࢿ࢈΁ͷ௥ै)
  43. ࠩผԽϙΠϯτ • Node.js • ػೳ໘ʹؔͯ͠͸େ͖ͳมߋ͸ͤͣʹɺখ͍͞มߋͷதͰଞ ͷruntimeͱͷࠩΛݮΒ͍ͯͬͯ͠Δɻ • ඇػೳཁ݅໘ͰͷύϑΥʔϚϯε޲্ɺηΩϡϦςΟରԠɺ ӡ༻࣌ͷ෼ੳํ๏ͷ௥ՃͳͲ͕ߦΘΕͯΔɻ ੒ख़ͯ͠Δҹ৅

  44. ࠩผԽϙΠϯτ • Deno • ͻͱͭ͸ηΩϡϦςΟॏࢹɺOSͷػೳΛ࢖͏ࡍʹύʔϛογϣϯ͕ཁ ٻ͞ΕΔͨΊɺҙਤ͠ͳ͍ϑΝΠϧૢ࡞΍ωοτϫʔΫૢ࡞Λ๷͛Δ • Deno Fresh ͳͲͷ

    ϑϨʔϜϫʔΫ΋ެ͕ࣜಉ͡organizationͰ։ൃ͠ ͓ͯΓɺपลͷπʔϧྨ͸ͦ͜Ͱαϙʔτ͞ΕͯΔҹ৅ɻ • Կͱݴͬͯ΋࠷ۙ͸JSRɺJavaScript Registry ͱͯ͠ొ৔ɻ
  45. ࠩผԽϙΠϯτ • Deno • JSR • TypeScript Λͦͷ··ιʔεͱͯ͠publishͯ͠ɺதͰίϯύΠϧͯ͠JavaScriptʹม׵Ͱ ͖Δ •

    npm ͷ publish ઌ͔Β JSR Λܦ༝ͯ࣋ͬͯ͘͠Δ͜ͱ΋Ͱ͖ΔͷͰɺطଘࢿ࢈͔ΒͷҠ ߦ΋Ͱ͖Δ • ԿΑΓɺ ESM Λ࠷ॳͷλʔήοτͱ͢ΔͷͰɺ CJS ͕جຊʹͳ͍ͬͯΔ npm ͱ͸Ұઢ Λը͢ ৽͍͠ϨδετϦΛඋ͑ͯɺNode.js͔ΒϢʔβʔΛͲ͜·Ͱ࣋ͬͯ͜ΕΔ͔
  46. ࠩผԽϙΠϯτ • Bun • ͱʹ͔͘ύϑΥʔϚϯεɺ଎͕ͦ͜͞ਖ਼ٛ • Node.jsޓ׵ੑॏࢹ • blog Λݟͯ΋ຖճඞͣύϑΥʔϚϯεվળͱNode.jsޓ׵ੑ޲্͕ॻ͍ͯ͋Δ

    • Next.js / Remix / Nuxt.js ͱ͔͕ಈ͘ΑʂΈ͍ͨͳΤϯδχΞਓؾͷߴ͍ϥΠϒ ϥϦ͕طʹಈ͘Ξϐʔϧ͞ΕͯΔ
  47. ࠩผԽϙΠϯτ • Bun • ͔ͳʔΓಠࣗ࿏ઢɻࢥ͍͖ͭΈ͍ͨͳ͜ͱΛαοͱ࣮૷ͯ͠ Δ BunͷதͰCݴޠ͔͚ͨΒͲ͏͔ͳʙʁ ཌ೔: ࣮૷Ͱ͖ͨʔ

  48. ࠩผԽϙΠϯτ • Bun • package.json Ͱ͸উखʹ jsonc ࢖ͬͯΔ͠ɺ console ͸

    async iterationͩ͠ɺΊͪΌͪ͘Όಠࣗ࿏ઢɻ • Զͷ࠷ڧͷ runtime Λ࡞ͬͯ΍Δͥײ͕͋Δɻ • ݏ͍͡Όͳ͍ɻ Performance is all you need!! And crazy ideas are all I need!!!
  49. ମ੍໘

  50. ମ੍ • Node.js: • Ϧʔμʔෆࡏ • େن໛OSS։ൃऀମ੍ɺ֤෼໺͝ͱʹWGΛ࡞ΓɺTSCͱݺ͹ ΕΔҕһձͰํ޲ੑΛܾΊΔɻίϛολʔΛ੒௕ͤͯ͞ମ੍ Λܧଓͤ͞ΔΑ͏ʹ͍ͯ͠Δɻ Ϧʔμʔ͕ډͳ͍ͱ͜Ζͱ֤ϝϯόʔʹΑͬͯ߹ٞͰܾ·Δॴ͸Web

    ͷඪ४ԽҕһձͱࣅͯΔ
  51. ମ੍ • Deno: • Ϧʔμʔ: Ryan Dahlࢯ • OSS։ൃऀͱDeno CompanyͰͷձࣾ։ൃͷϋΠϒϦου

    • ։ൃϓϩηε͸جຊΦʔϓϯɺ(Issue, PR, RFC) • Deno Deploy ͷ঎༻ࢧԉͳͲ΋͋ΓɺίϛϡχςΟͱίΞνʔϜͱ঎༻ࢧԉ ͞ΕͯΔνʔϜͷࡾҐҰମ Redisͱ͔VercelͷOSS + ঎༻ͰͷઓུʹࣅͯΔ
  52. ମ੍ • Bun: • Ϧʔμʔ: Jarred Summerࢯ • BunΛfull timeͰ։ൃ͠ɺ

    ϗεςΟϯά؀ڥͳͲΛ࡞ͬͯJS։ൃମݧΛ޲্ͤ͞ Δ໊໨Ͱձࣾ΋্ཱͪ͛ͯΔ (Oven)ɻ • OSS Contributors + ovenࣾͷϋΠϒϦουମ੍ • ঎༻Ϣʔεέʔεͱ͔͸ฉ͍ͨ͜ͱແ͍ͷͰɺϚωλΠζΛͲ͏͢Δͷ͔͸ෆ໌ ମ੍͸࡞ΒΕͯΔ͚Ͳɺ·ͩ͜Ε͔Βײ͕͋Δɻ
  53. ·ͱΊ

  54. ·ͱΊ • Node.js͸੒ख़ͯ͠Δɻ • Deno͸JSRͳͲͰΤίγεςϜΛ࡞Γม͑ͭͭɺطଘΤίγεςϜ͔Βͷ৐Γ ׵͑Λૂ͏ɻ • Bun͸ಠࣗ࿏ઢɺݏ͍͡Όͳ͍ɻ • ࡾऀࡾ༷ɺࠩผԽ͞Ε͖ͯͭͭ͋Δ͠ɺ͓΋͠Ζ͍ɻ

    • ΋ͬͱ੝Γ্͕ͬͯ͘Εɺͦͯ͠ JSConf.jp ͳͲͰൃදٻΉ

[8]ページ先頭

©2009-2025 Movatter.jp