Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
realtime_rails
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
mgi166
September 25, 2015
Programming
60
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
realtime_rails
mgi166
September 25, 2015
More Decks by mgi166
See All by mgi166
Gunosy のログ収集基盤
mgi166
2
730
Music as Code
mgi166
0
710
Other Decks in Programming
See All in Programming
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
140
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
260
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
270
Workers Cache を知る
syumai
0
360
残高管理から台帳サービスへの進化
artoy
1
200
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
220
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
28
32k
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
6.6k
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
35
17k
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.6k
Verilogで学ぶCPU自作入門
uyuki234
8
4.1k
Featured
See All Featured
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
280
Un-Boring Meetings
codingconduct
0
460
Ethics towards AI in product and experience design
skipperchong
2
430
Amusing Abliteration
ianozsvald
1
350
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
520
The agentic SEO stack - context over prompts
schlessera
0
970
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
A Tale of Four Properties
chriscoyier
163
24k
Speed Design
sergeychernyshev
33
2.2k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
The Language of Interfaces
destraynor
162
27k
Unsuck your backbone
ammeep
672
58k
Transcript
Realtime Rails mgi
࠷ۙͷ Web ք۾
React.js
scala
Elixir
golang
ΈΜͳ Rails Ͳ͏ͨ͠ : චऀ rails ͔͠ೝΊͳ͍ ͱݴ͍ͬͯΔͷͰ͋Γ·ͤΜ
ײ(ٴͼউखͳਪଌ) • ݴޠʹΑΓಘҙෆಘҙ͋ΔʹͤΑɺόοΫΤ ϯυͷબࢶ͕૿͍͑ͯΔ • rails Ͱ͔͠ग़དྷͳ͍͜ͱ͕ݮ͖ͬͯͨ(ͱ͍͏ ͔ࠓ࣌ͦΜͳͷ͋Δʁ)
Ͱ͑ͯ rails Λ औΓ্͛ͯΈͨ
ཧ༝ • ҰԠࣄʹ݁͢Δ • rails Λ͕͔ΓʹɺଞʹͰ͖Δ͜ͱΛ୳͢ͱɺ एׯֶशίετ͕͑ΒΕΔ • ظͷ •
खΛग़͠·͘Δͱ͍࣌ؒ͘Β͋ͬͯΓͳ ͍
ͱ͍͏Θ͚Ͱ…
ຊ
Realtime Rails • WebSocket ͷ֓ཁ • ͲΜͳࣄ͕Ͱ͖Δͷ͔ • WebSocket +
Rails ͷαϯϓϧίʔυ • actioncable (websocket-rails গ͠) • ՝ʹͳΓͦ͏ͳ
WebSocket
WebSocket ͱ • αʔόʔͱϒϥβؒͰϦΞϧλΠϜͰใ ΛΓͱΓ͢Δن֨ͷ͜ͱ • chat, online game, push
௨ • ࠷ۙͷϒϥβطʹ࣮ࡁΈ • αʔόʔଆͷ༻ҙΛ͢Εɺ࣮ݱՄೳ
Ξ̋ʔό̋ά
Aͷϒϥβ Bͷϒϥβ ͬͪ͜Ͱ Ұॹʹಈ͍ͯཉ͍͠ ͬͪ͜ͰΩϟϥΛ ಈ͔ͨ͠Β
WebSocket ͱ • server ʹ request ͯ͠ response Λฦ͢ɺͱ͍͏ http
ͷن֨Ͱ࣮ݱͰ͖ͳ͍ • αʔόʔͱϒϥβؒͰৗʹใΛΓͱΓ͠ଓ ͚Δ • ϒϥβͰೖྗͨ͠࠲ඪΛαʔόʔଆʹ • αʔόʔଆʹͬͨ࠲ඪΛϒϥβʹ
WebSocket ք۾ͷྺ࢙ • node.js ͕͍͢͝Β͍͠ (2013 ࠒ) • node.js ʹΑΔ
c10k ͷղফ • socket.io • http://socket.io/demos/weplay/ • ϒϥβ͕ websocket ରԠ࢝͠ΊΔɻnginx • ←ࠓίίʂ
ͿͬͪΌ͚ gem ͕͋Δ • websocket-rails • https://github.com/websocket-rails/ websocket-rails • Standalone
Server Mode • websocket ༻ͷαʔόʔΛཱͯͯ͘Ε Δ
ͿͬͪΌ͚ rails ରԠ͢Δ • rails5 ͷ ActionCable • rails +
WebSocket Λͬͯ͘ΕΔ • https://github.com/rails/actioncable • websocket-rails ͱͷҧ͍αʔόʔ • websocket-rails: thin, actioncable: ͳΜͰ
Sample (ແه໊νϟοτΞϓϦ)
WebSocket ͷΈ
͓͞Β͍ • websocket-rails Ͱطଘͷ rails ϓϩδΣΫτ ʹָʹಋೖՄೳ • rails5 ͔Β
websocket σϑΥϧτͰ͑Δ
XFCTPDLFU TFSWFS 4. Push change to users 1. Create new
message 2. Publish changes to Redis 3. Publish change to subscribers
var dispatcher = new WebSocketRails('localhost:3001/websocket'); var CommentForm = React.createClass({ onSubmit:
function(e) { e.preventDefault(); dispatcher.trigger('new_message', { text: text }); this.props.createMessage({ text: text }); }, render: function() { return ( <form className="comment-form" onSubmit={this.onSubmit}> <textarea placeholder="write something..." ref="text"/> <input type="submit" value="submit" /> </form> ); } }); WebSocket ʹΠϕϯτΛ௨ WebSocket Ͱαʔόʔଆ ʹ௨͢Δ Rails ͷ api Λ ajax Ͱୟ͘
# config/events.rb WebsocketRails::EventMap.describe do subscribe :new_message, to: BroadcastController, with_method: :new_message
end # app/controllers/broadcast_controller.rb class BroadcastController < WebsocketRails::BaseController def new_message WebsocketRails[:chat_channel].trigger(:new_message, message) end end WebSocket ͷ controller Event ໊ͱ controller Λهड़ (routing) :chat_channel ͱ͍͏νϟωϧʹରͯ͠ broadcast ͢Δ
var dispatcher = new WebSocketRails('localhost:3001/websocket'); var channel = dispatcher.subscribe(‘chat_channel’); var
Contents = React.createClass({ componentDidMount: function() { channel.bind('new_message', function(message){ var messages = this.state.messages; messages.unshift(message); this.setState({ messages: messages }) }.bind(this)); }, render: function() { return ( <div class=“content"> … </div> ); } ௨͕͖ͨΒɺDOM ʹө :chat_channel ͱ͍͏ νϟωϧΛ js ଆͰߪಡ νϟωϧʹ௨͕དྷͨΒ callback ͕ݺΕͯ state Λߋ৽
՝ʹͳΓͦ͏ͳͱ͜Ζ
• rails (≒ ruby ) Ͱ͍͍ͷ͔ • εέʔϥϏϦςΟ
rails (≒ ruby)Ͱ͍͍ͷ͔ • Γ͍ͨ͜ͱ(Ϗδωε)ʹΑΔ • ࠓͷձࣾ WebSocket ͷधཁߴ͘ͳ͍ •
ձࣾͷϦιʔεʹΑΔ • rails ΤϯδχΞଟ͍
rails (websocket-rails actioncable) ͷϙΠϯτ • EventMachine Λ৴༻͢Δ͔Ͳ͏͔ • Thin
EventMachine Ͱ࣮͞ΕͯΔ • puma EventMachine ʹͪΐͬͱґଘͯ͠Δ • ࠇ͍͔ᷚΓࣖʹͯ͠طʹک͑ͯΔ • actioncable ͳΒαʔόʔͷىಈΛࣗ༝ʹఆٛͰ͖Δɺ ॊೈੑ͕ߴ͍ҹΛड͚ͨ
node.js ͷϙΠϯτ • ϒϥβ͕ websocket ʹରԠ͍ͯ͠Δ͔ͷ ఆ(socket.io ͩͱͬͯ͘ΕΔΒ͍͠) • Ϛϧνϓϩηε
cluster ͑Մೳ
εέʔϥϏϦςΟ • EventMachine ͰͲ͜·Ͱεέʔϧ͢Δ͔ • 1000 ίωΫγϣϯ͔Βਏ͘ͳΔͱ͍͏ᷚ • puma Θ͔ΒΜ
• rails ͔ΒΓସ͑Δͱεέʔϧ͠·ͨ͠ɺͱ͍͏Α͘ฉ͘ • http://www.infoq.com/jp/news/2012/10/Ruby-on-Rails-Node-js-LinkedIn • http://www.infoq.com/jp/news/2014/01/paypal-java-javascript • http://www.infoq.com/jp/news/2015/07/parse-moved-ruby-go
WebSocket server ૿͑ͯΔ • node.js(javascript) • websocket(go) • https://godoc.org/golang.org/x/net/websocket •
phonix(Elixir) • http://www.phoenixframework.org/v0.17.0/ docs/channels
ఆ݁ • ͋ΔఔͷଓΛࡹ͘ϦΞϧλΠϜ web ͕ඞཁͳ Βɺrails Ҏ֎Λݕ౼ͨ͠΄͏͕͍͍͔ • WebSocket server
૿͖͍͑ͯͯΔͷͰɺબࢶ๛ ɻͲ͏Δ͔ॊೈʹબ͢Δ • rails Ҏ֎ͩͱ phoenix ג • actioncable ͳΒ͖ͬͱεέʔϧͯ͘͠ΕΔ…!
૯ׅ
ࠓճͷൃදͷ·ͱΊ • WebSocket ʹ͍ͭͯઆ໌͠·ͨ͠ • Rails + WebSocket ͷαϯϓϧΛ࡞ͬͯղઆ͠ ·ͨ͠
• rails Λ͏͜ͱͷ՝Λߟ͑·ͨ͠
͓ΘΓ