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

Node.js, Deno, Bun 最新動向とその所感について

Node.js, Deno, Bun 最新動向とその所感について

2025/3/14 toranoana.deno #20 で発表した内容です。

Yosuke Furukawa

March 14, 2025
Tweet

More Decks by Yosuke Furukawa

Other Decks in Programming

Transcript

  1. Node.js ࠷৽ಈ޲ͱઓུ • ࠷৽ಈ޲ • TypeScript strip ϞʔυΛ࠾༻ • require(ESM)

    Ͱ CJS ͱ ESM ͷஈ֊తҠߦΛαϙʔτ • EOLΛܴ͑ͨޙ΋vulnerableͳϨϙʔτΛ͢Δ͔Ͳ͏͔ͳͲɺ EOLͷExtended Support ʹ͍ͭͯ΋ݴٴ
  2. TypeScript strip mode • Denoͱ͔BunͰ΋΍ͬͯΔ .ts ϑΝΠϧͷܕͷ෦෼͚ͩΛநग़ ͯ͠ JavaScript ʹ࣮ͯ͠ߦ͢Δػೳ

    • ୯ͳΔ strip ͳͷͰܕνΣοΫͱ͔͸͠ͳ͍ • ·ͨ enum ΍ namespace ͳͲͷTSಠࣗͷػೳ͸αϙʔτ͞Ε ͍ͯͳ͍ʢ--experimental-transform-typesΛ͚ͭΔʣ
  3. require(ESM) • ES Modules Ͱ΋ require ͔Βݺ΂ΔΑ͏ʹͳΔ • ͨͩ͠ Top

    level await ͯ͠ΔϞδϡʔϧ͸ର৅֎ • A => B => C ͱґଘ͍ͯ͠Δͱ͖ʹ C ͕ESMʹͳͬͨͱ͜ΖͰ B͕CJSͩͱҠߦͰ͖ͳ͔͕ͬͨɺ͜Ε͔Β͸C͕ESMͰ΋B͔ Β require Ͱݺ΂ΔͷͰҠߦ͕ஈ֊తʹਐΉ
  4. EOL Support • EOL͕੾ΕͨޙͰ΋ݹ͍όʔδϣϯʹରͯ͠ Vulnerability Report Λ͍ͯ͘͠ํ޲ʹ • Node.js v16Λ࢖͍ͬͯΔϢʔβʔ͕·ͩ·͍ͩΔ

    • ݹ͍Node.jsΛ೗ԿʹΞοϓάϨʔυͤ͞Δ͔͕য఺ • ͦΕ͸ͦΕͱͯ͠ɺࠓޙϢʔβʔ͕ͲͷNode.jsͷόʔδϣϯΛ࢖͍ଓ͚͍ͯΔ͔Λཧ ղɾ೺Ѳ͍ͯ͘͠ • HeroDev ͳͲ঎༻ϥΠηϯεͰԆ௕αϙʔτ͢Δஂମ΋ग़͍ͯΔͨΊɺͦΕΒͱ࿈ܞ ΛऔΓͳ͕Β Extended EOL ΋ࢹ໺ʹೖΕ͍ͯ͘ɻ
  5. JSR੝Γ্͛ • lint-rule Λ JSR ʹ publish ͢Δίϯςετ։࠵த • https://deno.com/blog/lint-rules-contest

    • εςοΧʔͳͲ΋Β͑Δɻ • URL Import ๾໓ʹ޲͚ͯͷܒ໤ͳͲ • npm speci fi er ͚ͭͯͳ͍ͷ͸ؒҧ͍ • https://deno.com/blog/not-using-npm-speci fi ers-doing-it-wrong
  6. Node.js Compatibility ޲্ • Node.js / npm ͱͷޓ׵ੑΛ޲্ͤ͞Δ • Next.js

    ͕ Deno Ͱಈͥ͘ʂʂʂ \űŒŕŰŖ!/ • https://deno.com/blog/nextjs-on-deno-deploy • ࠓ΋ੵۃతʹ sqlite ͳͲͷ৽APIΛରԠ͍ͯͬͯ͠Δ
  7. WASM Module / Opentelemetry ରԠ • wasm ͕ module ͱͯ͠

    import Ͱ͖ΔΑ͏ʹͳͬͨ • OpenTelemetry ϓϩτίϧʹରԠ͠ɺՄ؍ଌੑ্͕͕ͬͨ • etc
  8. Deno ࠷৽ಈ޲αϚϦ • ͳΜͱ͍ͬͯ΋JSRΛྲྀߦΒͤΔ • npm ͔ΒΤίγεςϜΛҾ͖ܧ͍͗ͨ • ͦͷͨΊͷ Node.js

    compat ΞήΞή • աڈͷ URL import ͸ෛͷҨ࢈ Node.js / npm ͔ΒͲΕ͚ͩҨ࢈ΛҾ͖ܧ͛Δ͔͕ࠓޙͷ伴
  9. Bun ࠷৽ಈ޲ͱઓུ • ࠷৽ಈ޲ • Perf! Perf! Perf!! ύϑΥʔϚϯεͦ͜ਖ਼ٛʂʂ •

    ඞཁͳ΋ΜɺͱΓ͋͑ͣશ෦ೖΕͱ͖·ͨ͠ʂʂʂ • Bun.sql, Bun.s3, ࠓ౓͸ Bun.CSRF Ͱcsrf tokenݕূͰ͖ΔΑ͏ʹ͠· ͢ʂʂ • Node.js compatibility ޲্ʂʂʂ
  10. Perf! Perf! Perf!! ύϑΥʔϚϯεͦ͜ਖ਼ٛ!! • Bunͷىಈ࣌ؒ͸5ms, Node.js ͸25ms!! 5ഒͩͧ5ഒʂʂ •

    Bunͷhttp serve ͸59000 req/sec, Deno͸25000req/sec 2.4ഒͩ ͧ!! 2.4ഒ!! (ͪͳΈʹNode͸19000req/sec) • npm install ?? Bun install ͸25ഒ଎͍ͧʂʂʂ • https://bun.sh/docs/cli/install
  11. ඞཁͳ΋Μɺશ෦ೖΕͱ͖·ͨ͠!! • Bun.sql ͕ PostgreSQL ͷΫϥΠΞϯτʹʂʂࠓ౓ MySQL ΋࣮૷͢ Δ༧ఆʂʂʢͳΜͪΎ͏໊લͩ...ʣ •

    Bun.s3 ͕ Amazon S3 ͚ͩ͡Όͳ͘ɺCloudStorage ͱ͔ͷओͩͬͨ Ϋϥ΢υετϨʔδʹରԠʂʂʢͳΜͪΎ͏໊લͩ...ʣ • Bun.CSRF࣮૷ʂʂ Bun.CSRF.generate/verify ͰCSRFରࡦ͕Մೳ ʹʂʂʢ͍Δɾɾɾʁʣ
  12. Node.js Compatibility ޲্!!! • Node.js test cases ΛͲΕ͚ͩpass͍ͯ͠Δ͔͕Ұ໨ྎવ • Next.js

    ? ࠷ॳ͔Βಈ͖·͚͢Ͳ? • ʢ͜͜ຊ౰͸ඍົɺશػೳ͕ಈ͘ͱ͸ݴͬͯͳ͍ʣ
  13. Bun ࠷৽ಈ޲αϚϦ • ύϑΥʔϚϯεͦ͜ਖ਼ٛ • ಠಛͷAPIηϯεʢ׳Εͳ͍ʣ • Node.js compat Λ޲্͍ͤͯ͘͞

    ύϑΥʔϚϯεͱ͍͏Ұ൪ͷ෢ثΛҾͬఏ͛ͯͲ͜·ͰϢʔβʔΛ ֫ಘͰ͖Δ͔
  14. WinterTC • WinterCG (Community Group) ͔Β WinterTC (Technical Committee) ʹɻ

    • WinterTC͸࢓༷ܾΊΛத৺ʹɻCG͸ࠓ΋͜Ε͔Β΋࣮૷ఏҊ Λத৺ʹɻ • WinterTC͕ minimal API ΛܾΊ͍ͯ͘
  15. TypeScript αϙʔτ • Զ΋ check ػೳ͕ͳ͍ͷʹNode/Bun͕αϙʔτͬͯݴͬͪΌͬͯΔ͚Ͳ͍͍ͷʁͱ͸ ࢥͬͨΑɻ • ҰํͰαϙʔτͬͯ໘౗͍͘͞ͳͱ΋ࢥͬͨɻ •

    ͱΓ͋͑ͣݴ͑Δͷ͸΋͏TypeScript͕ಉࠝ͞Ε͍ͯΔ͜ͱʹڝ૪༏Ґੑ͸ແ͍ؾ͕͢Δɻ • ͩͬͯผʹࣗ෼ͨͪͰͪΌΜͱ΍Γ͍ͨਓ͸tsc͔ΒͪΌΜͱ؀ڥ࡞Δ͠ɺͦΕ͕ݏͳਓͰ ͋ͬͯ΋viteͱ͔next.jsͱ͔Ͱ΍Γ࢝ΊͨΒೖͬͯΔΜͩ΋Μɻɻɻ • ͳ͙Γॻ͖ͰTypeScript࣮ߦ͍ͨ࣌͘͠Β͍͔ʁศརͳͷͬͯɻ
  16. ύʔϛογϣϯ • ͜͜ʹؔͯ͠͸͍͔ͭ͘ݴ͍͍ͨ͜ͱ͕͋Δ • ·ͣݖݶ؅ཧ͚ͩͰ͸αϓϥΠνΣʔϯΞλοΫ͸๷͖͗Εͳ͍ɻͳͥͳΒιϑτ΢ΣΞͷ։ൃͷͲ͜Ͱࠞ ೖ͢Δ͔͸JSϓϥοτϑΥʔϜ͚ͩͰ͸๷͗Α͏͕ͳ͍͔Βɻ • Docker ͸ʁ 3rd

    party script ͸ʁ poly fi ll.io ͕ങऩ͞Εͯͦ͜Λಥ͔ΕͨΒʁͳͲ੾Γ͕ແ͍ • ͲͪΒ͔ͱ͍͏ͱɺଟ૚తʹ๷ޚ͢Δ࢓૊Έ͕ඞཁɻෆԺͳϓϩηεͷ؂ࢹɺΞ΢τό΢ϯυͷϦΫΤετ ͕Ͳ͜ʹߦͬͯΔ͔ɺมʹϦιʔε৯ͬͯΔϓϩηε͸͍ͳ͍͔ͳͲɻ • JSR / npm ͕΍ͬͯΔΑ͏ͳॺ໊෇͖Ͱվ͟Μݕূ͕Ͱ͖Δ࢓૊Έ΋ඞཁ • ͳͷͰɺDeno͕΍ͬͯΔύʔϛογϣϯࣗମ΋ͦͷଟ૚Խͷ࢓૊ͷҰͭʹ͗͢ͳ͍ɻݴͬͯ͠·͑͹ɺ͋Δ ͱྑ͍͚Ͳͳͯ͘΋ΫϦςΟΧϧ͡Όͳ͍ɻ
  17. ύʔϛογϣϯ • ࣍ʹͦ΋ͦ΋ਓ͕ؒӡ༻͢ΔҎ্ɺָΛͨ͘͠ͳΔɻ • σϑΥϧτ͕ݫ͍͠ͱΦϑʹ͞ΕΔࣄ͕ଟ͍ɻ • SELinux ͔͠Γɺద੾ͳݖݶઃܭ͕ OS /

    Platform ͷϨΠϠͰͪΌΜͱͰ͖ͨ ͷΛݟͨ͜ͱ͕ͳ͍ • ͦ΋ͦ΋OSͷϢʔβʔͷݖݶ؅ཧ΋͔ͬ͠ΓͰ͖͍ͯͯɺΞϓϦέʔγϣϯ ϓϩηε࣮ߦ͝ͱʹϢʔβʔͷݖݶ੾Γ෼͚Δͱ͔͕Ͱ͖ΔͳΒͦΕͰ΋ྑ͍ ͸ͣɺຖճswitch user͠ͳ͕Β΍ΔͷେมͩΖ͏͚Ͳɻ