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
Action Cableで簡易チャットを作ってみた
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Kazuhiro NISHIYAMA
July 13, 2019
Programming
400
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Action Cableで簡易チャットを作ってみた
第87回 Ruby関西 勉強会での発表資料です。
Kazuhiro NISHIYAMA
July 13, 2019
More Decks by Kazuhiro NISHIYAMA
See All by Kazuhiro NISHIYAMA
Reforming the Japanese Ruby reference manual
znz
0
19
Rubyの配布パッケージの変遷
znz
0
51
Headscale + Tailscale に移行中
znz
0
90
Ruby on Rails と私
znz
0
88
riscv64.rubyci.org internal
znz
0
67
Rubyの日本語リファレンスマニュアルの現在と未来
znz
0
120
devise-two-factorを4.xから5.xに上げた話
znz
0
450
docs.ruby-lang.org/ja/ の生成方法を変えた
znz
0
130
Ubuntuのriscv64版をqemuで動かした
znz
0
150
Other Decks in Programming
See All in Programming
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
460
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
3
270
Hono + Inertia + React で LP を構築した話
oukayuka
2
220
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
120
MIZARU@SPAJAM2026 第二回予選
1901drama
0
110
What We Talk About When We Talk About XP
m_seki
2
440
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
3
510
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
580
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
170
AIの中の人になってみる
htkym
0
170
Swift愛好会100回記念 第1回を振り返る
jollyjoester
0
120
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
760
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
41
2.7k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
520
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
840
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
590
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
510
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
660
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
410
How to build a perfect <img>
jonoalderson
1
6k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
230
Designing Experiences People Love
moore
143
24k
Transcript
Action Cableで簡易チャッ トを作ってみた Kazuhiro NISHIYAMA 第87回 Ruby関西 勉強会 2019/07/13 株式会社Ruby開発
Powered by Rabbit 2.2.1
自己紹介 西山 和広 Ruby のコミッター twitter, github など: @znz 株式会社Ruby開発
www.ruby-dev.jp 1/31
目的 Ruby 関西中継が止まっていた USTREAM も終了 外部サーバーに保存せずにユーザー登録 などなく視聴可能なライブ配信のみした い できればチャットもあると良いかも →
Ruby 勉強会なので Rails で 2/31
ライブ配信 YouTube Live 必ず保存されそう (公開するかどうかは選べそ う) スマホからの配信はチャンネル登録ユーザー数 が増えないとできない その他のサービス 視聴にアカウントが必要だったり
サービスの主な用途がゲーム配信だったり 3/31
nginx-rtmp-module 自前ライブ配信サーバが作成可能 録画を残すかどうかも設定次第 HLS + video.js で視聴可能 試したブラウザー全てで視聴可能 Windows, macOS,
iOS, Android (Linux は未確認) 4/31
チャット ライブ配信へのコメント機能 何を使っても良いのなら Firebase が楽そう だった Ruby 勉強会なので Action Cable
を使って みることに 5/31
なぜ Rails 6? 6.0.0.rc1 なので正式リリースとあまり変わ らないはず サンプル的にできるだけデフォルト構成で シンプルに作りたい デフォルトが CoffeeScript
ではない 新規で採用する理由はあまりない 6/31
View の選択 使ってみたかったから React (redux なし) material-ui 4 7/31
環境構築 gem install rails --pre yarn も入れておく 8/31
rails new rails new chat-$(date +%Y%m%d) --webpack=react または rails new
の後で bin/rails webpacker:install:react yarn を入れ忘れていたら、後から webpacker:install 9/31
埋め込むページ作成 rails g controller pages index routes 変更: root to:
'pages#index' app/views/pages/index.html.erb に React の呼び出し埋め込み <%= javascript_pack_tag 'hello_react' %> 10/31
channel 作成 rails g channel chat ChatChannel クラスができる rails g
controller と同様に rails g channel chat speak などでメソッドも生成可能 11/31
送受信テスト準備 (Rails 側) ChatChannel に def receive(data) を 追加 ActionCable.server.broadcast('ch
at_channel', data) subscribed で stream_from 'chat_channel' 12/31
送受信テスト準備 (JS 側) chat_channel.js の received(data) に console.log(data); JavaScript console
から send で送信して 確認 13/31
微調整 送信時刻追加 ダミーの id 追加 (あとで Active Record の id
に置き換え) material-ui で入力欄追加 faker を使ってランダムなデフォルトの名 前を設定 14/31
アイコン表示 gravatar でアイコン表示 サーバー側でしかわからない送信元 IP アド レスも使って、同じ名前でも同じアイコン にならないように 15/31
モデルなどを作成 rails g model message name body sent_at:timestamp rails g
job MessageBroadcast broadcast を job 経由に はっきりとした説明を見つけられなかったが、 アプリケーションサーバーが複数台になった時 に received で broadcast せずに job を経由す る必要がありそう 16/31
最近のメッセージ表示 hidden_field_tag で to_json した文字 列を埋め込み JSON.parse(document.getElementById( 'recent_messages').value) で取り出し ちゃんとエスケープされる方法を選択
あまり良い方法ではないが、開発速度重視 17/31
最近の基準 1時間以内 50件まで リロードするとここまでになる 開きっぱなしなら無制限に追加していく 18/31
送信中メッセージ表示 空欄アイコンで表示 空欄じゃないアイコンに変わったら受信完 了 19/31
微調整 入力欄が空欄の時は送信ボタンを無効化 IP アドレスとリクエスト ID も保存 → アイ コンに反映 20/31
デプロイ VPS のサーバーにデプロイ 21/31
production で動かない Uncaught TypeError: r is not a function で動かない
https://github.com/rails/rails/issues/ 35501 に同じ現象が書いてあったが未解決 動かすことを優先して development で動 かすことに 22/31
動画埋め込み 単独 HTML ファイルで試していた video.js 埋め込み 23/31
config.hosts 設定 development 環境を localhost 以外で使 うため config.hosts 設定 24/31
nginx 設定 普通の reverse proxy 設定 WebSocket も proxy するように設定
dehydrated で letsencrypt の証明書を発 行して https 設定 本題ではないので詳細は省略 25/31
Cloudflare 設定 Full (Strict) チャットは完全暗号化 ライブ配信の視聴も完全暗号化 wss (暗号化ありの WebSocket) も問題な
く通る 26/31
trusted_proxies 設定 Cloudflare 経由にすると remote_ip が取 れなくなったので config.action_dispatch.trusted_p roxies を設定
https://www.cloudflare.com/ips/ https://www.cloudflare.com/ips-v4 https://www.cloudflare.com/ips-v6 27/31
微調整 favicon 設定 title 設定 28/31
WireGuard WireGuard とは 高速軽量な VPN まだ本番運用には適さない ライブ配信の送信側を暗号化するのに利用 本題ではないので詳細は省略 29/31
さらに機能追加 接続しているユーザー一覧アイコン表示 reload video ボタン追加 30/31
まとめ Action Cable で簡単にリアルタイム通信が 作成可能 環境構築はちょっと面倒 (yarn が必須など) 本番環境で使うには WebSocket
が必須な どちょっと制限あり 31/31 Powered by Rabbit 2.2.1