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

Rails Action Cable徹底解説!broadcastとstream_fromで学ぶリアルタイム通信の基本とパフォーマンス

broadcast/stream_from 徹底解説:対象スコープ・パフォーマンスの要点
broadcast/stream_from 徹底解説:対象スコープ・パフォーマンスの要点

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

生徒

「Railsでチャットや通知みたいに、画面が自動で更新される仕組みってどうなっているんですか?」

先生

「RailsにはAction Cableという、リアルタイム通信を簡単に扱える仕組みがあります。」

生徒

「broadcastとかstream_fromって言葉を見たんですが、何が違うのか全然わからなくて…」

先生

「そこが一番大事なポイントですね。仕組みと考え方を、例えを使ってゆっくり説明しますよ。」

1. Action Cableとは?Railsでリアルタイム通信を行う仕組み

1. Action Cableとは?Railsでリアルタイム通信を行う仕組み
1. Action Cableとは?Railsでリアルタイム通信を行う仕組み

Action Cableは、Railsに標準で用意されているリアルタイム通信のための機能です。 リアルタイム通信とは、ページを再読み込みしなくても、サーバーからの最新情報が自動的に画面へ届く仕組みのことです。

例えば、チャットアプリで誰かがメッセージを送信すると、他の人の画面にもすぐに表示されます。 この裏側ではWebSocketという、常に通信し続ける特別な接続方法が使われています。

Action Cableは、このWebSocketの難しい部分をRailsが肩代わりしてくれるため、 初心者でも比較的シンプルなコードでチャットや通知機能を作れるのが特徴です。

2. WebSocketの超かんたんイメージ

2. WebSocketの超かんたんイメージ
2. WebSocketの超かんたんイメージ

WebSocketを身近なもので例えると、「電話」に近い仕組みです。 普通のWeb通信は、手紙のように必要なときだけ送って返事を待つ形です。

一方でWebSocketは、一度つながると電話のようにつながりっぱなしになります。 そのため、サーバー側から「今すぐ伝えたい情報」があれば、すぐに利用者へ届けることができます。

Railsでは、このWebSocketをAction Cableが管理し、 私たちは「どこに」「何を送るか」だけを考えればよい仕組みになっています。

3. broadcastとは?情報を一斉送信する考え方

3. broadcastとは?情報を一斉送信する考え方
3. broadcastとは?情報を一斉送信する考え方

broadcastは、指定した場所に向けてデータを送信する仕組みです。 たとえば「チャットルーム1」という名前の場所に対して、メッセージを送るイメージです。

駅の構内アナウンスを想像してください。 「〇番線に電車が到着します」と放送すると、その場所にいる人全員に同じ情報が届きます。 broadcastは、まさにこの放送の役割を果たします。


ActionCable.server.broadcast(
  "chat_room_1",
  { message: "こんにちは!" }
)

このコードは「chat_room_1」という名前のストリームに対して、 「こんにちは!」というメッセージを送信しています。

4. stream_fromとは?受信側の設定

4. stream_fromとは?受信側の設定
4. stream_fromとは?受信側の設定

stream_fromは、どこから情報を受け取るかを決める命令です。 broadcastが「送る側」だとすると、stream_fromは「受け取る側」になります。

ラジオで言えば、「この周波数を聞きます」とチャンネルを合わせる行為です。 チャンネルを合わせていないと、どんな放送も聞こえません。


class ChatChannel < ApplicationCable::Channel
  def subscribed
    stream_from "chat_room_1"
  end
end

この設定により、このチャンネルに接続している利用者は、 「chat_room_1」に送られた情報を受信できるようになります。

5. 対象スコープとは?誰に届けるかを考える

5. 対象スコープとは?誰に届けるかを考える
5. 対象スコープとは?誰に届けるかを考える

Action Cableでとても重要なのが対象スコープです。 これは「その情報を誰に見せるのか」という範囲を決める考え方です。

全員に見せる通知もあれば、特定のユーザーだけに見せたい情報もあります。 例えば「あなた宛ての通知」は、他の人に見えてはいけません。


stream_from "user_#{current_user.id}_notifications"

このようにユーザーIDを含めることで、 「この人専用の通知チャンネル」を作ることができます。 対象スコープを意識することで、無駄な通信や情報漏れを防げます。

6. パフォーマンスの基本:流しすぎない工夫

6. パフォーマンスの基本:流しすぎない工夫
6. パフォーマンスの基本:流しすぎない工夫

リアルタイム通信は便利ですが、使いすぎるとパフォーマンスに影響します。 パフォーマンスとは、アプリの動作の速さや安定性のことです。

不必要に大勢へbroadcastすると、サーバーは大量の通信を処理しなければなりません。 これは、人が多すぎる場所で大声で話すようなものです。

必要な人だけに、必要な情報だけを送ることが、 Action Cableを安全に使うための基本ルールになります。

7. broadcastとstream_fromを組み合わせた流れ

7. broadcastとstream_fromを組み合わせた流れ
7. broadcastとstream_fromを組み合わせた流れ

Action Cableの流れはとてもシンプルです。 まず、利用者がstream_fromで「受信する場所」を決めます。 次に、サーバー側でbroadcastを使って情報を送信します。


# メッセージ作成後に通知を送信
ActionCable.server.broadcast(
  "chat_room_1",
  { message: "新しい投稿があります" }
)

このように、送信と受信の役割を分けて考えることで、 リアルタイム通信の仕組みがぐっと理解しやすくなります。

8. 初心者がつまずきやすいポイント

8. 初心者がつまずきやすいポイント
8. 初心者がつまずきやすいポイント

初心者がよく迷うのは、「どの名前でstream_fromしているか」と 「broadcast先の名前が一致しているか」です。

名前が一文字でも違うと、情報は届きません。 これは、違うラジオ局を聞いている状態と同じです。

Action Cableでは、名前の管理対象スコープを意識することが、 安定したリアルタイム機能を作る近道になります。

カテゴリの一覧へ
新着記事
New1
Rails
Railsの自動読み込みをやさしく解説!Zeitwerkの仕組みと命名規約・フォルダ設計の基本
New2
Ruby
macOSでRubyを最新版に!Homebrewとrbenvで初心者でもできるインストール方法
New3
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
New4
Ruby
Rubyの文字列エンコーディング完全ガイド!Encoding・force_encoding・encodeを初心者向け解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
Rubyのreduceとinject入門!合計計算や集計を初心者向けに分かりやすく解説
No.2
Java&Spring記事人気No2
Ruby
OpenSSL関連エラーの直し方を完全解説!証明書・ビルドオプション・brew対策まとめ
No.3
Java&Spring記事人気No3
Rails
Rails認可をやさしく理解!CanCanCan入門:ability.rbの定義とload_and_authorize_resource実例
No.4
Java&Spring記事人気No4
Ruby
Rubyのchunk/chunk_while/slice_whenを完全解説!連続データを塊で扱う方法
No.5
Java&Spring記事人気No5
Rails
Railsのqueue_adapter完全比較ガイド|inline・resque・sidekiq・good_jobの選び方を初心者向けに解説
No.6
Java&Spring記事人気No6
データベース
PostgreSQLのWHERE句を徹底解説!初心者でもわかるSQLデータ抽出の基本
No.7
Java&Spring記事人気No7
データベース
MySQLアーキテクチャ入門!初心者向けに基本構造と仕組みを徹底解説
No.8
Java&Spring記事人気No8
データベース
PostgreSQLのCTE(WITH句)完全解説!複雑なSQLを整理して読みやすくする書き方