RubyのAction Cableで簡易チャットの作成(Ruby関西)

Ruby関西というイベントに参加してきました

そこで講演の1つにActionCableを使ってライブ配信にチャット機能をつけた話があったのでそれについて

youtube.Liveやその他サービスではチャット付きライブ配信であんまり良くないらしい、なので配信システムを自作したというお話でした

概要としては

HLS + video.js で動画配信
RailsのActionCableを使いチャット機能を作る
という感じ

 

・環境構築
Rails6は正式リリースまだだけど使ってみる

$gem install rails --pre

yarnも入れておく

rails new

$rails new chat -$(date+%Y%m%d) --webpack=react

rails newの後で

$bin/rails webpacker:install:react

・埋め込みページ作成

$rails g controller pages index

routes変更

root to: 'pages/index'

app/views/pages/index.html.erbにReactの呼び出し埋め込み

<%= javascript_pack_tag 'hello react' %>

・channelの作成

$rails g channel chat

ChatChannelクラスができる

$rails g channel chat speak

などでメソッドも生成可能

・送受信準備(Rails)
ChatChannelに

def receive(data)

を追加

ActionCable.server.broadcast('chat_chnnel',data)

subscriveで

stream_from 'chat_channel'

・送受信準備(JS)
chat_channel.jsにて
received(data)に

console.log(data)

consoleから送信を確認できる

・アイコン表示
おなじみgravater

・モデル

$rails g model message name body sent_at:timestamp
$rails g job MessageBroadcast

broadcastをjob経由に

こんな感じ行けるらしい