カテゴリ: Rails 更新日: 2026/03/05

RailsのAction Cableでチャット機能を最速実装!初心者でもわかるWebSocket入門

チャット機能を最速実装:rooms/channel・broadcastのサンプルコード
チャット機能を最速実装:rooms/channel・broadcastのサンプルコード

先生と生徒の会話形式で理解しよう

生徒

「RailsでLINEみたいなチャットって作れるんですか?」

先生

「作れます。RailsにはAction Cableという、リアルタイム通信の仕組みが用意されています。」

生徒

「リアルタイム通信って何ですか?メールとは違うんですか?」

先生

「画面を更新しなくても、その場でメッセージが届く通信方法です。今日はチャットを最短で動かします。」

1. RailsとAction Cableとは?

1. RailsとAction Cableとは?
1. RailsとAction Cableとは?

Railsは、Webアプリケーションを効率よく作るためのフレームワークです。フレームワークとは、最初から便利な道具箱が用意されている開発環境のことです。

Action CableはRailsに標準で入っているリアルタイム通信の仕組みです。リアルタイム通信とは、チャットや通知のように「相手の操作がすぐ画面に反映される」通信方式です。

これを実現するためにWebSocketという技術を使います。WebSocketは、サーバーとブラウザがずっとつながったまま会話できる電話のような仕組みです。

2. チャット機能の全体像を理解しよう

2. チャット機能の全体像を理解しよう
2. チャット機能の全体像を理解しよう

今回作るチャットは「チャットルーム」に参加した人全員にメッセージが即時表示される仕組みです。

流れはとてもシンプルです。

  • ブラウザがAction Cableに接続する
  • rooms_channelに参加する
  • メッセージを送信する
  • broadcastで全員に配信する

broadcastとは「拡声器で全員に話す」ようなイメージです。

3. Channelを作成する(rooms_channel)

3. Channelを作成する(rooms_channel)
3. Channelを作成する(rooms_channel)

Action Cableでは、Channelという単位で通信を管理します。Channelは「部屋」や「話題」だと思ってください。


# app/channels/rooms_channel.rb
class RoomsChannel < ApplicationCable::Channel
  def subscribed
    stream_from "rooms_channel"
  end
end

subscribedは接続した瞬間に呼ばれます。stream_fromは「このチャンネルの放送を聞く」という意味です。

4. メッセージをbroadcastする仕組み

4. メッセージをbroadcastする仕組み
4. メッセージをbroadcastする仕組み

次に、サーバー側からメッセージを全員に送信します。これがbroadcastです。


# app/controllers/messages_controller.rb
class MessagesController < ApplicationController
  def create
    ActionCable.server.broadcast(
      "rooms_channel",
      message: params[:message]
    )
  end
end

ここでは、フォームから送られた文字をそのまま配信しています。Action Cableが裏で接続中のブラウザ全員に届けてくれます。

5. JavaScriptで受信処理を書く

5. JavaScriptで受信処理を書く
5. JavaScriptで受信処理を書く

ブラウザ側では、届いたメッセージを画面に表示します。RailsではJavaScript用のChannelファイルが自動生成されます。


import consumer from "./consumer"

consumer.subscriptions.create("RoomsChannel", {
  received(data) {
    const messages = document.getElementById("messages")
    messages.insertAdjacentHTML("beforeend", `<p>${data.message}</p>`)
  }
})

receivedはサーバーからデータが届いた瞬間に呼ばれます。ここでHTMLを追加しています。

6. ビューにチャット画面を用意する

6. ビューにチャット画面を用意する
6. ビューにチャット画面を用意する

次は画面です。HTMLでシンプルなチャット画面を作ります。


<div id="messages"></div>

<form action="/messages" method="post">
  <input type="text" name="message">
  <button type="submit">送信</button>
</form>

送信ボタンを押すと、メッセージがサーバーに送られ、全員に表示されます。

7. WebSocketとHTTPの違いを知ろう

7. WebSocketとHTTPの違いを知ろう
7. WebSocketとHTTPの違いを知ろう

通常のWeb通信(HTTP)は「質問→回答」で終わります。一方、WebSocketは接続を維持したまま、いつでもデータを送れます。

例えるなら、HTTPは手紙、WebSocketは電話です。チャットや通知にはWebSocketが向いています。

8. チャット実装でよく使う用語解説

8. チャット実装でよく使う用語解説
8. チャット実装でよく使う用語解説
  • Action Cable:Railsのリアルタイム通信機能
  • Channel:通信の部屋
  • broadcast:全員に配信する処理
  • WebSocket:常時接続の通信方式

この用語を押さえるだけで、Railsのチャット実装がぐっと理解しやすくなります。

カテゴリの一覧へ
新着記事
New1
Ruby
Ruby標準ライブラリを使いこなそう!初心者向けのdate・json・csv・open-uri入門
New2
Ruby
Rubyの配列・ハッシュ・文字列の超基礎!初心者向け作成・参照・更新テクニック完全ガイド
New3
Rails
RailsのAction Cableでチャット機能を最速実装!初心者でもわかるWebSocket入門
New4
Ruby
Rubyの文字エンコーディング入門!UTF-8・マジックコメント・外部/内部エンコーディングを完全解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
Rubyのreduceとinject入門!合計計算や集計を初心者向けに分かりやすく解説
No.2
Java&Spring記事人気No2
Ruby
Rubyの文字列エンコーディング完全ガイド!Encoding・force_encoding・encodeを初心者向け解説
No.3
Java&Spring記事人気No3
データベース
PostgreSQLのWHERE句を徹底解説!初心者でもわかるSQLデータ抽出の基本
No.4
Java&Spring記事人気No4
Rails
Rails認可をやさしく理解!CanCanCan入門:ability.rbの定義とload_and_authorize_resource実例
No.5
Java&Spring記事人気No5
Ruby
Rubyで比較演算子を完全解説!==・===・<=>・eql? の使い分け
No.6
Java&Spring記事人気No6
Ruby
OpenSSL関連エラーの直し方を完全解説!証明書・ビルドオプション・brew対策まとめ
No.7
Java&Spring記事人気No7
Rails
RailsでHTML+テキストメールを送信する方法|Action Mailerのmultipart/alternative完全入門
No.8
Java&Spring記事人気No8
Ruby
Rubyのsortとsort_byの違いを徹底比較!性能や安定ソートのコツを初心者向けに解説