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
830
リアルタイム回答集計システムを作って、実際にイベントで使った話
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
96
SVGアニメーションをやってみたら結構いい感じにできた話
inureo
1
150
はじめてのexpress+socket.io
inureo
1
4.1k
Other Decks in Technology
See All in Technology
新R25、乃木坂46 Mobileなどのファンビジネスを支えるマルチテナンシーなプラットフォームの全体像 / cam-multi-cloud
cyberagentdevelopers
PRO
1
130
WINTICKETアプリで実現した高可用性と高速リリースを支えるエコシステム / winticket-eco-system
cyberagentdevelopers
PRO
1
190
AIを駆使したゲーム開発戦略: 新設AI組織の取り組み / sge-ai-strategy
cyberagentdevelopers
PRO
1
130
2024-10-30-reInventStandby_StudyGroup_Intro
shinichirokawano
1
620
顧客が本当に必要だったもの - パフォーマンス改善編 / Make what is needed
soudai
24
6.7k
Jr. Championsになって、強く連携しながらAWSをもっと使いたい!~AWSに対する期待と行動~
amixedcolor
0
190
日経電子版におけるリアルタイムレコメンドシステム開発の事例紹介/nikkei-realtime-recommender-system
yng87
1
500
よくわからんサービスについての問い合わせが来たときの強い味方 Amazon Q について
kazzpapa3
0
220
カメラを用いた店内計測におけるオプトインの仕組みの実現 / ai-optin-camera
cyberagentdevelopers
PRO
1
120
最速最小からはじめるデータプロダクト / Data Product MVP
amaotone
5
730
フルカイテン株式会社 採用資料
fullkaiten
0
36k
IaC運用を楽にするためにCDK Pipelinesを導入したけど、思い通りにいかなかった話
smt7174
1
110
Featured
See All Featured
Visualization
eitanlees
144
15k
What's in a price? How to price your products and services
michaelherold
243
12k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
7.9k
GraphQLとの向き合い方2022年版
quramy
43
13k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
7
150
Documentation Writing (for coders)
carmenintech
65
4.4k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
32
1.8k
Practical Orchestrator
shlominoach
186
10k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Statistics for Hackers
jakevdp
796
220k
Done Done
chrislema
181
16k
The Cult of Friendly URLs
andyhume
78
6k
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
࣮ࡍʹࣾΠϕϯτͰͬͯΈͨॴײ ࠓޙ࣮͍ͨ͠ͷ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠