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
everyone node.js
Search
ogom
October 13, 2011
Programming
0
100
everyone node.js
node.js 入門編
ogom
October 13, 2011
Tweet
Share
More Decks by ogom
See All by ogom
PicoRuby から始めるたのしい電子工作
ogom
0
950
GraphQL Better Errors
ogom
0
240
Osaka RubyKaigi 02
ogom
0
240
Osaka RubyKaigi 01
ogom
0
180
Contributing to GitLab with OSS Gate
ogom
0
450
DojoCon Japan 2017
ogom
0
110
GDStudy Engage
ogom
1
690
Using Immutable.js with React Redux
ogom
0
120
CoderDojo と オープンソース
ogom
2
460
Other Decks in Programming
See All in Programming
Micro Frontends for Java Microservices - Devnexus 2024
mraible
PRO
0
410
try! Swift Tokyo 2024 参加報告 / try! Swift Tokyo 2024 Report
hironytic
0
160
puregoの活用例
aethiopicuschan
0
220
Ruby製社内ツールのGo移行
bgpat
2
330
せっかくモデル図描くのなら、嬉しいことが多い方がいいよね!
kuboaki
1
3.1k
Prepare for Jakarta EE 11 - Performance and Developer Productivity
ivargrimstad
0
370
CQRS/ES avec Symfony, c’est (trop) bien !
jeremyfreeagent
1
630
Java 22 Overview
kishida
1
160
Creating Retro-Style Photos Using Swift
ski
1
910
甘い香りに誘われてVanilla Extractを1年間運用してみた
miyahkun
1
110
オブジェクトしこう
okuramasafumi
2
150
CA.swift19 恋するAIアプリ開発の裏側
oskmr
0
330
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1354
200k
Principles of Awesome APIs and How to Build Them.
keavy
119
16k
From Idea to $5000 a Month in 5 Months
shpigford
377
45k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
1
3.4k
In The Pink: A Labor of Love
frogandcode
137
21k
Gamification - CAS2011
davidbonilla
76
4.6k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
320
20k
Intergalactic Javascript Robots from Outer Space
tanoku
266
26k
Mobile First: as difficult as doing things right
swwweet
216
8.6k
Web development in the modern age
philhawksworth
201
10k
Done Done
chrislema
178
15k
The Illustrated Children's Guide to Kubernetes
chrisshort
28
46k
Transcript
ΈΜͳͷ node.js node.js ೖฤ
ࣗݾհ ! •GitHubɿogom •Twitterɿ@ogomr
͡Ίʹ •ΈΜͳͷnode.jsͬͯʁ •node.js ΈΜͳͰ͏ΞϓϦέʔγϣϯʹ ద͍ͯ͠·͢ɻ •·ͨɺΈΜͳ͕͍ͬͯΔ JavaScript ͷ ݴޠͰهड़͠·͢ɻ !
•͜Ε͔Β node.js Λֶश͢Δํʹ͚ͯ ಛ͍ॴΛղઆ͠·͢ɻ hello node world!
Agenda ! •node.js ͱ •node.js ͷ͍ॴ •ྲྀߦͱظ
node.js ͱ
node.js ͷಛ •Eventide I/O for V8 JavaScript. •node.js ͷެࣜαΠτͷ࢝Ίʹग़͍ͯΔΩʔϫʔυͰ͢ɻ ͜ͷ
Evented I/O ͱ V8 JavaScript ͕ಛΛද͠·͢ɻ ! •Evented I/O •ΠϕϯτۦಈͷΈͰେྔͷೖग़ྗ(I/O)Ͱ ߴ͍ύϑΥʔϚϯεͷΞϓϦέʔγϣϯ͕࡞Ͱ͖·͢ɻ •V8 JavaScript •V8 Google ͷ Chrome ʹࡌ͞Ε͍ͯΔߴͳ JavaScript Engine Ͱ͢ɻͦͷ JavaScript ͰαʔόʔαΠυͷΞϓϦέʔγϣ ϯ͕࡞Ͱ͖·͢ɻ
node.js ͍͍Ͷʂ •ΠϕϯτϧʔϓߴͳύϑΥʔϚϯεΛཁٻ͞ΕΔ ωοτϫʔΫΞϓϦέʔγϣϯʹ࠷దͰ͢ɻ •ฒߦॲཧΛγϯάϧεϨουͰ͢ΔͨΊʹϊϯϒϩοΩϯάI/OͰඇಉظॲཧΛ࣮ݱ͍ͯ͠·͢ɻ ɹ(node.js ฒߦॲཧʹΠϕϯτϧʔϓͱݺΕΔϞσϧΛ࠾༻͍ͯ͠·͢ɻ) •γϯάϧεϨουϝϞϦͷফඅྔ͕গ͘ ϋʔυΣΞͷίετΛ͑·͢ɻ •1ͭͷϓϩηεͰෳͷϦΫΤετΛѻ͏ͷͰϝϞϦྔΫϥΠΞϯτʹൺྫ͠·ͤΜɻ
•γϯάϧεϨουͱϊϯϒϩοΩϯI/O JavaScript ͱ૬ੑ͕Α͘ ·ͨɺΫϩʔδϟ͕ΠϕϯτۦಈͷΈͷίʔϧόοΫʹͱͯศརͰ͢ɻ •ϑϩϯτΤϯυͷߏஙͰϝδϟʔͳ JavaScript Ͱ όοΫΤϯυͷॲཧΛߏஙͰ͖·͢ɻ •αʔόʔαΠυJavaScript ͱݴΘΕ͍ͯ·͢ɻ͞ΒʹɺϑϩϯτΤϯυͰख़Ε͍ͯΔ ΠϕϯτۦಈͷελΠϧόοΫΤϯυͰར༻Ͱ͖·͢ɻ
͝Μ͍͖ͨͩ·͢ •ಠͷஉ͕͝Μͷ༻ҙΛ࢝Ί·ͨ͠ɻ •ిࢠϨϯδͰࡢͷ͡Ό͕ΛԹΊ·͢ɻ •ͦͷؒʹΨείϯϩͰ͓౬Λ͔͠·͢ɻ •͝൧ΛΑͦͬͯɺ͠͠ٳܜŋŋŋ •͓౬͕ΰϘΰϘͨ͠ͷͰ͓ΛೖΕ·͢ɻ •νʔϯͱ໐ͬͨͷͰςʔϒϧͷࡼʹҠͯ͠ Ҝࢠʹ࠲Γ·͢ɻ •͠Λखʹʮ͍͖ͨͩ·͢ʯ ͋ͬςϨϏ͚ͭͳ͖Όʂ
! •ૣ͘͝ΜΛ৯͍ͨͷͰ͡Ό͕ͱ ͓ͷ༻ҙΛฒߦʹ࡞ۀ͠·͢ɻ •͡Ό͕ͷԹΊͱ͓౬͕͘ͷͲͪΒ͕ઌ ͰΑͯ͘ɺͰ͖ͨํ͔ΒऔΓֻ͔ΕΔͷ خ͍͠Ͱ͢ɻ
ΠϕϯτϧʔϓͱϊϯϒϩοΩϯάI/O •͝Μͷ༻ҙͰઆ໌͠·͢ɻ •ಠͷஉɿΠϕϯτϧʔϓ •ϨϯδͷԹΊɿΠϕϯτϋϯυϥA •νʔϯɿΠϕϯτϋϯυϥAͷίʔϧόοΫ •ίϯϩͰ౬͠ɿΠϕϯτϋϯυϥB •ΰϘΰϘɿΠϕϯτϋϯυϥBͷίʔϧόο Ϋ •Πϕϯτϧʔϓ
•Πϕϯτ͕ൃੜͨ͠λΠϛϯάͰ ίʔϧόοΫͰݺͼग़͞ΕΔΈͷ͜ͱ •ϊϯϒϩοΩϯάI/O •σʔλೖग़ྗ(I/O)͕ྃΛͨͣʹ ଞͷॲཧΛ։࢝͢Δํࣜͷ͜ͱ ϊϯϒϩοΩϯά ΠϕϯτϋϯυϥA ίʔϧόοΫA ΠϕϯτϋϯυϥB ίʔϧόοΫB ΰϘΰϘ νʔϯ ͓ࡼ ౬ͷΈ ͡Ό͕ ϨϯδԹΊ ͓ ίϯϩ౬͠ Πϕϯτϧʔϓ ϊϯϒϩοΩϯά
node.js ͷ͍ॴ
Αࣖ͘ʹ͢Δ •C10K •C clientɺ10K 10000 Λද͍ͯ͠·͢ɻ •ಉ࣌ʹଓ͢ΔΫϥΠΞϯτ͕ଟ͗͢ΔͱαʔόͷύϑΥʔϚϯε͕େ͖͘Լ͢ΔͰ͢ɻ •ϋʔυΣΞ͕ϘτϧωοΫͰͳ͘ιϑτΣΞʹ͕͋Γ·͢ɻ
•Apache ͱ nginx •Apache εϨουϞσϧͰ͢ɻ •ΫϥΠΞϯτ͔ΒͷϦΫΤετΛॲཧΛ͢Δͷʹ1ͭͷϓϩηε͕ඞཁͰ͢ɻ •ಉ࣌ʹॲཧ͢ΔϦΫΤετͷΛ૿͢ͱϓϩηεͷ૿͑ΔͷͰϝϞϦͷ༻ྔ૿Ճ͍͖ͯ͠·͢ɻ •nginx ΠϕϯτϧʔϓͰ͢ɻ •1ͭͷϓϩηεͰෳͷϦΫΤετΛѻ͏ͷͰϝϞϦͷ༻ྔ΄ͲΜͲ૿Ճ͠·ͤΜɻ •εϨουϞσϧେྔͷܭࢉॲཧ(CPUόϯυ)ʹ͍͍ͯ·͢ɻ •Πϕϯτϧʔϓେྔͷཁٻॲཧ(I/Oόϯυ)ͷωοτϫʔΫ ΞϓϦέʔγϣϯʹద͍ͯ͠·͢ɻ
ωοτϫʔΫΞϓϦέʔγϣϯͷࣄ •ϦΫΤετͱϨεϙϯε 1.ϦΫΤετΛड͚·͢ɻɹɹɹɹɹɹɹ→ɹnetwork read 2.σΟεΫ͔ΒίϯςϯπΛಡΈ·͢ɻɹ→ ɹdisk read 3.ϨεϙϯεΛฦ͠·͢ɻɹɹɹɹɹɹɹ→ɹnetwork write •ωοτϫʔΫ
ΞϓϦέʔγϣϯৗʹԿॲ͔Ͱread/write Λ ॲཧ͍ͯ͠·͢ɻ •read/write ඞͣ४උ͕ඞཁ͕ͦΕΒશͯϒϩοΫ͢Δͱ ϦΫΤετ͔ΒϨεϙϯεΛྃ͢Δ·Ͱʹ͕͔͔࣌ؒΓ·͢ɻ •node.js read/write ΛϒϩοΫ͠ͳ͍ɻ •ωοτϫʔΫ ΞϓϦέʔγϣϯͰߴ͍ύϑΥʔϚϯε͕ಘΒΕ·͢ɻ
ྲྀߦͱظ
JavaScript ͷಈ •JavaScript ͷීٴ •JSON •Web্ͷσʔλަϑΥʔϚοτ͕XML͔ΒJSONʹγϑτ͍ͯ͠·͢ɻ •HTML5 •ωοτϫʔΫ(Web Socket)ɺεϨου(Web Workers)ɺͳͲ
•HTML5ͷීٴ͢ΔͱɺJavaScript։ൃऀ͕૿Ճ͢ΔͱݴΘΕ͍ͯ·͢ɻ •υΩϡϝϯτσʔλϕʔε •CouchDB, MongoDB •JavaScriptͰͷΞΫηεΛڧ͘ҙ͍ࣝͯ͠·͢ɻ • JavaScript ։ൃऀͷ૿Ճ͕༧ଌ͞Ε·͢ɻ •࣮ߦڥ։ൃڥɾϑϨʔϜϫʔΫ͕͑ঘߋͰ͢ɻ •ࣄྫαϯϓϧίʔυͷྔ͕ JavaScript ͷར༻Λଅਐ͞Ε·͢ɻ
node.js ͷ͜Ε͔Β •node.js Λ࢝ΊΑ͏ •JavaScript ͰϓϩάϥϜΛهड़͢ΔͷͰෑډ͍Ͱ͢ɻ •socket.ioΛ͡ΊศརͳϥΠϒϥϦ͕ࢁ͋Γ·͢ɻ •npm registry Ͱެ։͞Ε͍ͯ·͢ɻ
•node.js ͷ PaaS ϩάσʔλϕʔεͳͲͷ SaaS ͕ ొ͓ͯ͠Γ؆୯ʹ࣮ߦڥ͕खʹೖΓ·͢ɻ ✤node.js ͕ϓϩάϥϛϯάΛ࢝ΊΔ ֻ͚ͬʹͳΕΑ͍ͳͱࢥ͍ͬͯ·͢ɻ enjoy node!
͋Γ͕ͱ͏͍͟͝·ͨ͠