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
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
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
350
デザインシステムが必須の時代に
yosuke_furukawa
PRO
2
250
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
10
5.3k
Welcome JSConf.jp 2024
yosuke_furukawa
PRO
1
4.8k
tc39 x jsconf.jp Panel Discussion 2024
yosuke_furukawa
PRO
0
360
Removing Corepack
yosuke_furukawa
PRO
9
2k
JavaScript Runtime とはなにか
yosuke_furukawa
PRO
15
3.2k
Strip Types と Storage
yosuke_furukawa
PRO
4
530
Module Harmony について
yosuke_furukawa
PRO
4
2k
Other Decks in Programming
See All in Programming
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
360
「人を評価する AI」の設計と実装
ryoyanara
0
230
AWS Transform Customによる Spring Boot 2.xから4.xへのVerUp
satoshi256kbyte
2
100
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
130
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
19k
言葉の格闘技のススメ~紙とペンと言葉から始める、キャリアの描き方~
progresscicada
2
170
My Marp Sample
sinoue0108
0
110
Go 1.27からのGODEBUG / Go 1.27 リリースパーティ #go127party
mazrean
0
190
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
240
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
570
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
320
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
220
Featured
See All Featured
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
350
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
470
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
800
Are puppies a ranking factor?
jonoalderson
2
3.8k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.5k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
The Curious Case for Waylosing
cassininazir
1
480
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
280
Odyssey Design
rkendrick25
PRO
2
770
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
480
How STYLIGHT went responsive
nonsquared
100
6.2k
Automating Front-end Workflow
addyosmani
1369
210k
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 ͱ͍͏ͷϑΝΠϧͷ ࣄͰ͋Γɺ࠷ݶͷ୯Ґ͔࣋ͨ͠ͳ͍ɻ • Կ͕Ұମਖ਼ղͩͬͨͷ͔·ͩΘ͔Βͳ͍ɻ໘നͦ͏ͳ͓ͪΌ͕ग़ ͖ͯͨͷͰ৮Δͷ͓͢͢Ίɻ