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
110
everyone node.js
node.js 入門編
ogom
October 13, 2011
Tweet
Share
More Decks by ogom
See All by ogom
PicoRuby から始めるたのしい電子工作
ogom
0
1.9k
GraphQL Better Errors
ogom
0
370
Osaka RubyKaigi 02
ogom
0
340
Osaka RubyKaigi 01
ogom
0
210
Contributing to GitLab with OSS Gate
ogom
0
600
DojoCon Japan 2017
ogom
0
140
GDStudy Engage
ogom
1
800
Using Immutable.js with React Redux
ogom
0
150
CoderDojo と オープンソース
ogom
2
500
Other Decks in Programming
See All in Programming
ソフトウェア設計の実践的な考え方
masuda220
PRO
4
650
alien-signals と自作 OSS で実現する フレームワーク非依存な ロジック共通化の探求 / Exploring Framework-Agnostic Logic Sharing with alien-signals and Custom OSS
aoseyuu
2
600
Devoxx BE - Local Development in the AI Era
kdubois
0
140
『毎日の移動』を支えるGoバックエンド内製開発
yutautsugi
2
280
コード生成なしでモック処理を実現!ovechkin-dm/mockioで学ぶメタプログラミング
qualiarts
0
260
Leading Effective Engineering Teams in the AI Era
addyosmani
7
600
One Enishi After Another
snoozer05
PRO
0
160
Range on Rails ―「多重範囲型」という新たな選択肢が、複雑ロジックを劇的にシンプルにしたワケ
rizap_tech
0
6.8k
エンジニアインターン「Treasure」とHonoの2年、そして未来へ / Our Journey with Hono Two Years at Treasure and Beyond
carta_engineering
0
420
Six and a half ridiculous things to do with Quarkus
hollycummins
0
210
Go言語はstack overflowの夢を見るか?
logica0419
0
530
Domain-centric? Why Hexagonal, Onion, and Clean Architecture Are Answers to the Wrong Question
olivergierke
3
960
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Reflections from 52 weeks, 52 projects
jeffersonlam
353
21k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.6k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
YesSQL, Process and Tooling at Scale
rocio
173
15k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Unsuck your backbone
ammeep
671
58k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.9k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
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!
͋Γ͕ͱ͏͍͟͝·ͨ͠