Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
denoの話
Search
Yosuke Furukawa
PRO
June 29, 2018
Programming
2.6k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
denoの話
Node学園 31時限目で発表した deno の話です。
Yosuke Furukawa
PRO
June 29, 2018
More Decks by Yosuke Furukawa
See All by Yosuke Furukawa
AIがコードを書いてくれる時代、我々は何を確かめるのか
yosuke_furukawa
PRO
13
5.2k
AI時代のシニアエンジニアとは
yosuke_furukawa
PRO
12
11k
Webの地図
yosuke_furukawa
PRO
6
5.2k
XHTMLが残したもの
yosuke_furukawa
PRO
2
980
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
460
デザインシステムが必須の時代に
yosuke_furukawa
PRO
2
340
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
10
5.4k
Welcome JSConf.jp 2024
yosuke_furukawa
PRO
1
4.9k
tc39 x jsconf.jp Panel Discussion 2024
yosuke_furukawa
PRO
0
390
Other Decks in Programming
See All in Programming
Seven New Principles of Software Engineering
yegor256
0
390
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
210
SODA - FACT BOOK(JP)
sodainc
1
40k
contenteditable と日本語入力に向き合う
colorful12
0
230
Modernizing iOS Apps
seyfoyun
0
140
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
140
[Dev Group Paris Octobre 26] Agentforce, SIforce, Claudeforce, Slackbot… on s'y retrouve ?
nabondance
0
120
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
650
Inertia Rails: The One-Person Framework with React & Friends
skryukov
0
200
動画プレイヤーはなぜカクつくのか 〜Flutterのレンダリングとネイティブの境界を解剖する〜
naruogram
0
310
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
450
Vapor Mode でアクセシビリティは 壊れないか検証した話
fuqda
1
280
Featured
See All Featured
Google's AI Overviews - The New Search
badams
0
1.6k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
800
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1.1k
Evolving SEO for Evolving Search Engines
ryanjones
0
340
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
590
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Design in an AI World
tapps
1
380
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3.1k
Statistics for Hackers
jakevdp
799
230k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
570
Transcript
denoʹ͍ͭͯ 2018/06/28 @ Recruit Technologies TEPCO office
Twitter: @yosuke_furukawa Github: yosuke-furukawa
2018/11/23 - 24 Node ֶԂࡇ։࠵
deno
ྺ࢙ΛḪΔ͜ͱ9લ…
Ryan Dahl ͕Node.jsʹ͍ͭͯτʔΫ
https://www.slideshare.net/shigeki_ohtsu/node-v012tng12
v0.1ͷެද͔Β9ޙ…
10 THINGS I REGRET ABOUT NODE.JS
Ryan DahlͷޙչϙΠϯτ • Dynamic Typed Language ʹͨ͜͠ͱ • Promise Λ࠾༻͠ͳ͔ͬͨ͜ͱ
• Security ϞσϧΛצҊ͠ͳ͔ͬͨ͜ͱ • Gypʹ͔ͬͬͨ͜ͱ • moduleϋϯυϦϯά (package.json, node_modules, etc)
Dynamic Typed Language
Dynamic Typed Language • JavaScript࠷ྑ͍ಈతܕ͚ݴޠͩͱࢥͬͯΔ • ͔͠͠ͳ͕Βɺಈతܕ͚ݴޠҰճ͖ͬ͜Γͷܭ ࢉΛ͢ΔͳΒ·ͩ͠ɺԿ࣮ߦ͢Δͷʹద༻ ͢Δ͖͡Όͳ͍ͱࢥ͏ •
Node.jsઃܭաఔʹ͓͍ͯෳͷτϥΠΤϥʔΛ ܁Γฦ͢ඞཁ͕͋Γɺͦͷ࣌ͷΤϥʔͷ༰Θ͔ Γʹ͘͘ɺΤϥʔͷղফ͖ͬΓͯ͠ͳ͍ɻ
Dynamic Typed Language • JavaScript࠷ྑ͍ಈతܕ͚ݴޠͩͱࢥͬͯΔ • ͔͠͠ͳ͕Βɺಈతܕ͚ݴޠҰճ͖ͬ͜Γͷܭ ࢉΛ͢ΔͳΒ·ͩ͠ɺԿ࣮ߦ͢Δͷʹద༻ ͢Δ͖͡Όͳ͍ͱࢥ͏ •
Node.jsઃܭաఔʹ͓͍ͯෳͷτϥΠΤϥʔΛ ܁Γฦ͢ඞཁ͕͋Γɺͦͷ࣌ͷΤϥʔͷ༰Θ͔ Γʹ͘͘ɺΤϥʔͷղফ͖ͬΓͯ͠ͳ͍ɻ ͔֬ʹͦ͏͔͠ΕΜ͚Ͳɺ͍·ͦΕ͍͏ʁ
Dynamic Typed Language • ࣮ੲNode.jsΛશ෦TypeScriptʹ͠Α͏ͱ͠ ͨΓɺCoffeeScriptʹ͠Α͏͍ͬͯ͏PR͕ ཱͬͨ͜ͱ͕͋ͬͨɻ • ͪΖΜશ෦ফ͞Ε͖ͯͨɻ
PromiseΛ࠾༻Ͱ͖ͳ͔ͬͨ
Promise • 2009ʹҰ࣮͞Εͨͷͷɺ2010ʹ ؙ͝ͱফͯ͠͠·ͬͨɻ • ࠓͰ۪͔ͳܾஅͩͬͨͱࢥ͍ͬͯ·͢ɻ • async/awaitͷநԽʹඞཁͰͨ͠ɻ
Promise • 2009ʹҰ࣮͞Εͨͷͷɺ2010ʹ ؙ͝ͱফͯ͠͠·ͬͨɻ • ࠓͰ۪͔ͳܾஅͩͬͨͱࢥ͍ͬͯ·͢ɻ • async/awaitͷநԽʹඞཁͰͨ͠ɻ PromiseͷΛ͢Δͱͷલ͕͘ͳΔ
Promise • Ұ masuidrive ͞Μ͕nodeͷඪ४APIΛͯ͢Promiseʹ͠ ͨࣄ͕͋ͬͨɻ • ҰํɺIRCͷதͰɺʮPromise͕ඪ४ʹͳΔ͔ෆ໌ͩ͠ɺ callbackͷ͕simpleͰΑ͘Ͷʁʯ͍ͬͯ͏͕ٞ͋ͬͨɻ •
͔ͯ͘͠ɺPromiseͷίʔυͯ͢ফ͞Εͯ͠·ͬͨɻ • ͜Ε͕ੈʹݴ͏ʮmasuidrive ͷ൵ܶʯͰ͋Δɻ
Security ϞσϧΛצҊ͠ͳ ͔ͬͨ͜ͱ
SecurityϞσϧΛצҊ͠ͳ͔ͬ ͨ͜ͱ • V8ͦΕࣗsecureͳsandboxϞσϧΛදݱ ͍ͯ͠·͢ɻ • ͬͱྑ͍ηΩϡϦςΟʹͰ͖ͨͣɻ • LinterΛಈ͔͚ͩ͢Ͱ networkͷΞΫηε
ϑΝΠϧॻ͖ࠐΈΛ͢Δඞཁͳ͍Ͱ͢ΑͶʁ
SecurityϞσϧΛצҊ͠ͳ͔ͬ ͨ͜ͱ • v8͚ͩͩͱ ϑΝΠϧಡΈࠐΈɺॻ͖ࠐΈͰ͖ ͳ͍͠ɺωοτϫʔΫΞΫηεͰ͖·ͤΜɻ • ඪ४ग़ྗͷconsole.logv8ͷ֎Ͱ͢ɻ • ͜ΕΒΛsandboxͷதͰదٓύʔϛογϣϯΛಘ
ͳ͕Β࣮ߦͰ͖ΕͬͱΑΓྑ͍ηΩϡϦςΟ ϞσϧΛఏڙͰ͖ͨɺͱݴ͍͍ͨͷͰ͠ΐ͏ɻ
GYPΛ࠾༻ͨ͜͠ͱ
GYPΛ࠾༻ͨ͜͠ͱ • GYPେ͖ͳࣦഊͩͬͨ • V8͕GYPΛ࠾༻͍ͯͯ͠ɺnode.jsͦΕʹ҆қʹ ͔ͬͬͯ͠·ͬͨɻ • v8GYP͔ΒgnʹҠΓNode.jsͷgypϢʔβʔऔΓ ͞Εͯ͠·ͬͨɻ •
ࠓͳΒͦ͏͠ͳ͍ɺ FFI Λ࠾༻͢Δɻ
GYPΛ࠾༻ͨ͜͠ͱ • FFI (Foreign Function Interface)ͷ͕ϙʔλϒ ϧͰݺͼ͍͢ҰํͰɺgypͷ͕ߴͩͱ͞Ε ͍ͯͨɻ • ੑೳΛ༏ઌͨ݁͠ՌɺgypΛ࠾༻͕ͨ͠ɺࠓ
gyppython2Ͱ͋ΓɺgypաڈͷҨ ࢈ʹͳͬͯ͠·͍·ͨ͠ɻ
moduleϋϯυϦϯάશൠ
moduleϋϯυϦϯάશൠ • package.jsonपΓɺෆཁͳใ͕ଟ͗͢Δ • require()ͨ࣌͠ʹnode_modulesҎԼʹ͋ΔmainϑΟʔϧυΛউ खʹಡΉͳͲɺfancyͳڍಈ͕ଟ͍ʢnpmʹ͋Δͷͳͷ͔ɺ localͷదͳϑΝΠϧͳͷ͔Θ͔Γʹ͍͘ʣ •
moduleϋϯυϦϯάશൠ
moduleϋϯυϦϯάશൠ • moduleͷղܾΞϧΰϦζϜ͕૬ෳࡶʹͳͬ ͯ͠·ͬͨɻ • ϒϥβͷsemantics͔Β֎Εͯ͠·ͬͨɻ
moduleϋϯυϦϯάશൠ • module ͷղܾΞϧΰϦζϜ node_modules ͷґଘ ؔΛͨͲͬͯґଘղܾΛ͢Δɻ • ·ͨɺ moduleࢦఆݩ͔Βͷ૬ରύεͰϑΝΠϧΛࢦ
ఆ͢Δ͕ɺ $NODE_PATH ڥมʹύε͕ηοτ͞Ε ͍ͯΔͱ͔ͦ͜ΒಡΈࠐΉɻ • ͜ͷଞʹ͍͔ͭ͘ hacky ͳํ๏͕͋Δ͕ɺͲΕඍົ
moduleϋϯυϦϯάશൠ
moduleϋϯυϦϯάશൠ • ".js" ͳ͠ͰಡΈࠐΊΔ • "index.js" লུՄೳ • ͳͲͳͲɺϑΝϯγʔͳػೳ͕ଟ͘ɺ࣮ͦΕ͕ ෳࡶ͞ͱόάͷԹচʹͳΓ͍͢ɻ
• লུͪ͠Ό͏ͱɺϑΥϧμͳͷ͔ϑΝΠϧͳͷ͔ ݟ͚͕͔ͭͳ͍ɻ
ͦ͜Ͱ deno Λ࡞ͬͨ
deno v8 Ͱಈ͘ηΩϡΞͳ TypeScript ࣮ߦڥ
TypeScript
None
None
None
TypeScript • denoTypeScriptΛ࠾༻ͨ͠ • TypeScriptDartͳͲͷͷͱҟͳΓɺ JavaScriptͷεʔύʔηοτͱ͍͏Ґஔ͚ͮ • ڊେͳγεςϜʹରԠͰ͖Δɻ
sandboxηΩϡϦςΟϞσϧ
sandbox ηΩϡϦςΟϞσϧ • denosandboxͰಈ͘ • v8ͷϨΠϠworkerͰJSͷruntime͕ಈ͖ɺϑΝ ΠϧωοτϫʔΫʹΞΫηε͢Δͱ͖͚ͩಛ ݖϞʔυʹͳΔɻ • ಛݖϞʔυͷϓϩηεͱruntimeؒͰ௨৴͢Δࡍ
protocol bufferΛͬͯ௨৴͢Δɻ
sandbox ηΩϡϦςΟϞσϧ • denosandboxͰಈ͘ • v8ͷϨΠϠworkerͰJSͷruntime͕ಈ͖ɺ ϑΝΠϧωοτϫʔΫʹΞΫηε͢Δͱ͖ ͚ͩಛݖϞʔυʹͳΔɻ
sandbox ηΩϡϦςΟϞσϧ • denosandboxͰಈ͘ • v8ͷϨΠϠworkerͰJSͷruntime͕ಈ͖ɺ ϑΝΠϧωοτϫʔΫʹΞΫηε͢Δͱ͖ ͚ͩಛݖϞʔυʹͳΔɻ ͓ɺOS͔Αɻɻɻ
ϞδϡʔϧγεςϜͷγϯϓϧԽ
ϞδϡʔϧγεςϜͷγϯϓϧ Խ • NodeͷطଘϞδϡʔϧͱͷੑٻΊͯ· ͤΜɻ • import૬ରύε͔ઈରύεɺ͘͠URL ͚ͩͰ͔͠ࢦఆͰ͖·ͤΜɻ import {
test } from "https://unpkg.com/
[email protected]
/testing.ts" import { log } from "./util.ts"
ϞδϡʔϧγεςϜͷγϯϓϧ Խ • NodeͷطଘϞδϡʔϧͱͷੑٻΊͯ· ͤΜɻ • import૬ରύε͔ઈରύεɺ͘͠URL ͚ͩͰ͔͠ࢦఆͰ͖·ͤΜɻ import {
test } from "https://unpkg.com/
[email protected]
/testing.ts" import { log } from "./util.ts" ͍͗͞Α͗͢Δɻ
2018Ͱ͋Δ͜ͱΛར༻ͨ͠ Ϟσϧ • Ωϟον͞Εͳ͍ྫ֎͕ى͖ͨΒଈ࠲ʹఀࢭ͢Δ • top-level await Λαϙʔτ͢Δ • ػೳతʹॏͳΔ߹ϒϥβͱͷޓΛ༏ઌ͢
Δ • ॳGoͰ࡞͍͕ͬͯͨɺࠓRustͱC++ʹͳͬ ͍ͯΔɻ
2018Ͱ͋Δ͜ͱΛར༻ͨ͠ Ϟσϧ • Ωϟον͞Εͳ͍ྫ֎͕ى͖ͨΒଈ࠲ʹఀࢭ͢Δ • top-level await Λαϙʔτ͢Δ • ػೳతʹॏͳΔ߹ϒϥβͱͷޓΛ༏ઌ͢
Δ • ॳGoͰ࡞͍͕ͬͯͨɺࠓRustͱC++ʹͳͬ ͍ͯΔɻ ͪͳΈʹಈ͔ͯ͠Կى͖·ͤΜͰͨ͠ɻ
ײ
ײ • ·ͩ·ͩϓϩτλΠϓʢͱ͍͏ΑΓϋϩʔϫʔϧυϨϕϧʣ • Node.jsͰࢀߟʹͳΔͱ͜Ζଟͦ͏ • Node.jsʹ͓͚Δ module ͱ package
ͷ͜ͱͰ͋ΓɺσΟϨΫτϦ Λࢦͯ͠Δɻ • ҰํͰ ES Modules deno ʹ͓͚Δ module ͱ͍͏ͷϑΝΠϧͷ ࣄͰ͋Γɺ࠷ݶͷ୯Ґ͔࣋ͨ͠ͳ͍ɻ • Կ͕Ұମਖ਼ղͩͬͨͷ͔·ͩΘ͔Βͳ͍ɻ໘നͦ͏ͳ͓ͪΌ͕ग़ ͖ͯͨͷͰ৮Δͷ͓͢͢Ίɻ