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
120
everyone node.js
node.js 入門編
ogom
October 13, 2011
Tweet
Share
More Decks by ogom
See All by ogom
PicoRuby から始めるたのしい電子工作
ogom
0
2k
GraphQL Better Errors
ogom
0
390
Osaka RubyKaigi 02
ogom
0
360
Osaka RubyKaigi 01
ogom
0
240
Contributing to GitLab with OSS Gate
ogom
0
620
DojoCon Japan 2017
ogom
0
160
GDStudy Engage
ogom
1
810
Using Immutable.js with React Redux
ogom
0
170
CoderDojo と オープンソース
ogom
2
520
Other Decks in Programming
See All in Programming
Redox OS でのネームスペース管理と chroot の実現
isanethen
0
430
20260313 - Grafana & Friends Taipei #1 - Kubernetes v1.36 的開發雜記:那些困在 Alpha 加護病房太久的 Metrics
tico88612
0
230
AI時代の脳疲弊と向き合う ~言語学としてのPHP~
sakuraikotone
1
1.5k
AI時代のシステム設計:ドメインモデルで変更しやすさを守る設計戦略
masuda220
PRO
6
1.1k
見せてもらおうか、 OpenSearchの性能とやらを!
shunta27
1
130
SourceGeneratorのマーカー属性問題について
htkym
0
210
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
380
AI活用のコスパを最大化する方法
ochtum
0
320
AI Assistants for Your Angular Solutions
manfredsteyer
PRO
0
160
存在論的プログラミング: 時間と存在を記述する
koriym
4
480
Claude Code Skill入門
mayahoney
0
430
Everything Claude Code OSS詳細 — 5層構造の中身と導入方法
targe
0
150
Featured
See All Featured
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
120
How Software Deployment tools have changed in the past 20 years
geshan
0
33k
Speed Design
sergeychernyshev
33
1.6k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
130
Exploring anti-patterns in Rails
aemeredith
2
290
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
300
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
860
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
140
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.2k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.1k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
660
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!
͋Γ͕ͱ͏͍͟͝·ͨ͠