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
リアルタイム回答集計システムを作って、実際にイベントで使った話
Search
inureo
November 27, 2014
Technology
1
810
リアルタイム回答集計システムを作って、実際にイベントで使った話
inureo
November 27, 2014
Tweet
Share
More Decks by inureo
See All by inureo
IGNITION: What we did to provide a high-quality experience
inureo
0
94
SVGアニメーションをやってみたら結構いい感じにできた話
inureo
1
150
はじめてのexpress+socket.io
inureo
1
4.1k
Other Decks in Technology
See All in Technology
Databricks における 『MLOps』
databricksjapan
2
170
Azure犬駆動開発の記録/GlobalAzureFukuoka2024_20240420
nina01
1
220
Gitlab本から学んだこと - そーだいなるプレイバック / gitlab-book
soudai
4
440
require(ESM)とECMAScript仕様
uhyo
3
770
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
2.1k
自己改善からチームを動かす! 「セルフエンジニアリングマネージャー」のすゝめ
shoota
6
780
Python と Snowflake はズッ友だょ!~ Snowflake の Python 関連機能をふりかえる ~
__allllllllez__
1
120
生産性向上チームの紹介
cybozuinsideout
PRO
1
870
サーバー間 GraphQL と webmock-graphql の話 / server-to-server graphql and webmock-graphql
qsona
2
190
Delivering Millions of Messages within seconds @ Duolingo
pelelgrino
0
350
Cloud Native Java with Spring Boot (CNCF Aarhus, April 2024)
thomasvitale
1
170
Google Cloud の AI を支える裏側のインフラを垣間見る!
maroon1st
0
360
Featured
See All Featured
Become a Pro
speakerdeck
PRO
11
4.5k
Testing 201, or: Great Expectations
jmmastey
28
6.4k
Code Reviewing Like a Champion
maltzj
514
39k
Designing for humans not robots
tammielis
248
25k
jQuery: Nuts, Bolts and Bling
dougneiner
59
7.1k
Fantastic passwords and where to find them - at NoRuKo
philnash
37
2.5k
Making Projects Easy
brettharned
108
5.5k
Atom: Resistance is Futile
akmur
259
25k
Producing Creativity
orderedlist
PRO
337
39k
In The Pink: A Labor of Love
frogandcode
138
21k
What’s in a name? Adding method to the madness
productmarketing
PRO
16
2.6k
Unsuck your backbone
ammeep
663
57k
Transcript
ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͯ ࣮ࡍͷΠϕϯτͰͬͨ גࣜձࣾnanapi ख௩ ྄ @inureo
ࣗݾհ ख௩ ྄ @inureo גࣜձࣾnanapi ΤϯδχΞ - άϥϑΟοΫσβΠϯͷઐֶߍΛଔۀ - Web੍࡞ձࣾ
5 - 201310݄ nanapiʹΤϯδχΞͱͯ͠ೖࣾ དྷྺ ※ ݩʑσβΠφʔͳͷͰϑϩϯτपΓ͕ಘҙ ϝΠϯͷۀͰRailsʴCoffeeScript+Markup
1. ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͨ 2. ࠾༻ٕज़ɾ࣮ࡍʹͬͨߏ 3. ੍࡞্ؾΛ͚ͭͨ͜ͱɾϋϚͬͨ͜ͱ 4. ࣮ࡍʹࣾΠϕϯτͰͬͯΈͨॴײ ࠓͷΞδΣϯμ
1. ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͨ 2. ࠾༻ٕज़ɾ࣮ࡍʹͬͨߏ 3. ੍࡞্ؾΛ͚ͭͨ͜ͱɾϋϚͬͨ͜ͱ 4. ࣮ࡍʹࣾΠϕϯτͰͬͯΈͨॴײ ࠓͷΞδΣϯμ
ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͨ 76ਓ16νʔϜͷΠϕϯτΛ ԁʹਐߦ͢ΔͨΊ Կނ࡞͔ͬͨ
ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͨ 16νʔϜͬͯଟ͍
ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͨ - 1νʔϜʹରͯ͠ճ֬ೝʹ5ඵ͔͚ͨ߹ɺ 16νʔϜͩͱ80ඵ͔͔Δ 16νʔϜͬͯଟ͍
ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͨ - 1νʔϜʹରͯ͠ճ֬ೝʹ5ඵ͔͚ͨ߹ɺ 16νʔϜͩͱ80ඵ͔͔Δ - ճ֬ೝޙɺಘूܭߦΘͳ͚ΕͳΒͳ͍ ͷͰߋʹ͕࣌ؒඞཁ 16νʔϜͬͯଟ͍
ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͨ - 1νʔϜʹରͯ͠ճ֬ೝʹ5ඵ͔͚ͨ߹ɺ 16νʔϜͩͱ80ඵ͔͔Δ - ճ֬ೝޙɺಘूܭߦΘͳ͚ΕͳΒͳ͍ ͷͰߋʹ͕࣌ؒඞཁ - ͦͷؒɺίϯςϯπ͕ࢭ·ͬͯ͠·͏ʂɹɹɹ ςϯϙѱ͍ʂ
16νʔϜͬͯଟ͍
͜ΜͳͷઈରճΒͳ͍ʂ ਓҝతϛεා͍Αʂ ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͨ
δϯΠɾςΩϛε [Gini Tekimis] ʢ1566ʙ1593ɹϑϥϯεʣ ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͨ
ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͨ ͡Ό͋γεςϜԽ͠Α͏
- ճͷूܭ - ਖ਼൱ͷൃද - શճͷҰཡදࣔ - ΫϥΠΞϯτͷճλΠϛϯά੍ޚ - ಘͷूܭ
ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͨ ࠓճγεςϜԽͨ͠ͱ͜Ζ
- ఏࣔը໘ - ճఏࣔը໘ ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͨ ࠓճγεςϜԽ͠ͳ͍ͱ͜Ζ
- ఏࣔը໘ - ճఏࣔը໘ ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͨ ࠓճγεςϜԽ͠ͳ͍ͱ͜Ζ ͋͘·ͰूܭγεςϜʂ
ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͨ γεςϜͷྲྀΕ ήʔϜϚελʔ ʢճҰཡը໘ɾཧը໘ʣ ΫϥΠΞϯτ
ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͨ ΫϥΠΞϯτ ճͷૹ৴ ճࡁΈ͔Ͳ͏͔Λදࣔ γεςϜͷྲྀΕ ήʔϜϚελʔ ʢճҰཡը໘ɾཧը໘ʣ
ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͨ ΫϥΠΞϯτ ཧը໘͔Βਖ਼ղऀͷ֬ೝ ճͷૹ৴ γεςϜͷྲྀΕ ήʔϜϚελʔ ʢճҰཡը໘ɾཧը໘ʣ
ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͨ ΫϥΠΞϯτ ਖ਼൱ͷૹ৴ ճͱਖ਼൱ΛҰཡදࣔ ճ݁Ռͷอଘ γεςϜͷྲྀΕ ήʔϜϚελʔ ʢճҰཡը໘ɾཧը໘ʣ
ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͨ ΫϥΠΞϯτ ूܭը໘͔Β݁ՌΛ֬ೝ γεςϜͷྲྀΕ ήʔϜϚελʔ ʢճҰཡը໘ɾཧը໘ʣ
ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͨ σϞ
1. ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͨ 2. ࠾༻ٕज़ɾΠϕϯτ࣌ͷػثߏ 3. ੍࡞্ؾΛ͚ͭͨ͜ͱɾϋϚͬͨ͜ͱ 4. ࣮ࡍʹࣾΠϕϯτͰͬͯΈͨॴײ ࠓͷΞδΣϯμ
࠾༻ٕज़ɾΠϕϯτ࣌ͷػثߏ - Node.js - Express - socket.io - CoffeeScript -
Jade/SASS/jQuery ࠾༻ٕज़
࠾༻ٕज़ɾΠϕϯτ࣌ͷػثߏ Ұཡը໘ ݉ ཧը໘ ϩʔΧϧαʔό ɾਐߦεϥΠυ WebSocket௨৴ ΫϥΠΞϯτʢiPad16ʣ εΠονϟʔ 3ͷϧʔλͰΠϯτϥωοτߏங
100ΠϯνϞχλ ग़ྗ Πϕϯτ࣌ͷػثߏ
࠾༻ٕज़ɾΠϕϯτ࣌ͷػثߏ Ұཡը໘ ݉ ཧը໘ ϩʔΧϧαʔό ɾਐߦεϥΠυ WebSocket௨৴ ΫϥΠΞϯτʢiPad16ʣ εΠονϟʔ 3ͷϧʔλͰΠϯτϥωοτߏங
100ΠϯνϞχλ ग़ྗ Πϕϯτ࣌ͷػثߏ
࠾༻ٕज़ɾΠϕϯτ࣌ͷػثߏ Ұཡը໘ ݉ ཧը໘ ϩʔΧϧαʔό ɾਐߦεϥΠυ WebSocket௨৴ ΫϥΠΞϯτʢiPad16ʣ εΠονϟʔ 3ͷϧʔλͰΠϯτϥωοτߏங
100ΠϯνϞχλ ग़ྗ ਐߦͱूܭΛׂ Πϕϯτ࣌ͷػثߏ
࠾༻ٕज़ɾΠϕϯτ࣌ͷػثߏ Ұཡը໘ ݉ ཧը໘ ϩʔΧϧαʔό ɾਐߦεϥΠυ WebSocket௨৴ ΫϥΠΞϯτʢiPad16ʣ εΠονϟʔ 3ͷϧʔλͰΠϯτϥωοτߏங
100ΠϯνϞχλ ग़ྗ 2ͭͷը໘ͷΓସ͑ Πϕϯτ࣌ͷػثߏ
࠾༻ٕज़ɾΠϕϯτ࣌ͷػثߏ Ұཡը໘ ݉ ཧը໘ ϩʔΧϧαʔό ɾਐߦεϥΠυ WebSocket௨৴ ΫϥΠΞϯτʢiPad16ʣ εΠονϟʔ 3ͷϧʔλͰΠϯτϥωοτߏங
100ΠϯνϞχλ ग़ྗ Πϕϯτ࣌ͷػثߏ
1. ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͨ 2. ࠾༻ٕज़ɾΠϕϯτ࣌ͷػثߏ 3. ੍࡞্ؾΛ͚ͭͨ͜ͱɾϋϚͬͨ͜ͱ 4. ࣮ࡍʹࣾΠϕϯτͰͬͯΈͨॴײ ࠓͷΞδΣϯμ
WifiରࡦʹΠϯτϥωοτΛߏஙͨ͠ - ձʹΠϯλʔωοτڥ͕༻ҙ͞ Ε͍ͯͨ - ͔͠͠ɺສ͕ҰΠϯλʔωοτʹܨ͕Β ͳ͘ͳͬͯ͠·ͬͨ࣌Λఆͯࣗ͠લͷΞ ΫηεϙΠϯτΛ3ͭ༻ҙͯ͠ɺΠϯτϥ ωοτΛߏஙͨ͠ ੍࡞্ؾΛ͚ͭͨ͜ͱɾϋϚͬͨ͜ͱ
ΫϥΠΞϯτ͕ෳͰಈ͘Α͏ʹͨ͠ - ສ͕ҰWebSocket௨৴Λอͬͨ··iPad ͕ಈ͔ͳ͘ͳͬͨ߹Λఆͯ͠ɺಉ͡νʔ ϜʹෳΫϥΠΞϯτ͕ଓͯ͠ ͳ͍ܗʹͨ͠ ੍࡞্ؾΛ͚ͭͨ͜ͱɾϋϚͬͨ͜ͱ
ΞΫηεURLͱνʔϜ໊Λඥ͚ͨ - ͕ࢮΜͩ߹Λఆͯ͠ɺґଘ CookieґଘSessionґଘͤͨ͘͞ͳ ͔ͬͨ - iPadͷΞΫηεΨΠυΛઃఆ͠ɺɹɹɹ URLόʔɾߋ৽ϘλϯͳͲΛແޮʹͯ͠ɺ ଞͷ෦ͷΞΫηεΛ͍ͩ ੍࡞্ؾΛ͚ͭͨ͜ͱɾϋϚͬͨ͜ͱ
༷ʑͳঢ়گΛఆͯ͠ػೳΛ࣮ͨ͠ - ֤νʔϜͷੜଘ֬ೝ - viewͷੜଘ֬ೝ - ΫϥΠΞϯτͷճకΊΓɾ࠶։ - ΫϥΠΞϯτͷճΛ࠶ಉظ -
etc ੍࡞্ؾΛ͚ͭͨ͜ͱɾϋϚͬͨ͜ͱ
express.ioͰϋϚͬͨ - express.ioͱ͍͏ͷɺexpress + socket.ioΛ͍͍ײ͡ʹউ खʹͭͳ͍Ͱ͘ΕΔͷ - express.ioͰrequire͍ͯ͠Δsocket.ioͷόʔδϣϯ͕ݹ - socket.io0.9
→ 1.0Ͱهड़ʹେ͖͘มΘ͍ͬͯΔɺͦ͜ʹؾ ͔ͣ req.to(id) ͕Ͱ͖ͳ͍ʂͱ͔ϋϚͬͨ - ݁ہexpress + socket.ioΛࣗͰͭͳ͛ͨʢ؆୯ʣ ੍࡞্ؾΛ͚ͭͨ͜ͱɾϋϚͬͨ͜ͱ
1. ϦΞϧλΠϜճूܭγεςϜΛ࡞ͬͨ 2. ࠾༻ٕज़ɾΠϕϯτ࣌ͷػثߏ 3. ੍࡞্ؾΛ͚ͭͨ͜ͱɾϋϚͬͨ͜ͱ 4. ࣮ࡍʹࣾΠϕϯτͰͬͯΈͨॴײ ࠓͷΞδΣϯμ
ͷ༷ࢠ ࣮ࡍʹࣾΠϕϯτͰͬͯΈͨॴײ
࣮ࡍʹࣾΠϕϯτͰͬͯΈͨॴײ
࣮ࡍʹࣾΠϕϯτͰͬͯΈͨॴײ
࣮ࡍʹࣾΠϕϯτͰͬͯΈͨॴײ
࣮ࡍʹࣾΠϕϯτͰͬͯΈͨॴײ
݁ ࣮ࡍʹࣾΠϕϯτͰͬͯΈͨॴײ
ʊਓਓਓਓਓʊ ʼɹେޭɹʻ ʉY^Y^Y^Yʉ ݁ ࣮ࡍʹࣾΠϕϯτͰͬͯΈͨॴײ
ͳΜͰେޭͳͷ͔ - Ұ੪ʹճ͕ग़ͯɺͲ͕͜ਖ਼ղ͔Θ͔Δͷ ͰΊͪΌͪ͘ΌΓ্͕Δ - ςϯϙྑ͘ਐߦͰ͖ɺ15ר͖Ͱఫऩྃ - ճɾಘूܭʹਓΛ͔ͣ͞ʹ͢ΉͷͰɺ ଞͷΠϨΪϡϥʔࣄ߲ʹରԠͰ͖ͨ -
γεςϜʹΑΔΤϥʔͳ͠ ࣮ࡍʹࣾΠϕϯτͰͬͯΈͨॴײ
- खॻ͖ೖྗͷ࣮ - σʔλͷӬଓԽʢMongoͱ͔ʣ - ूܭσʔλͷΞτϓοτػೳ - ֎෦αʔόʹ͓͍ͨ࣌ͷରԠ - etc
࣮ࡍʹࣾΠϕϯτͰͬͯΈͨॴײ ࠓޙ࣮͍ͨ͠ͷ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠