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

Rails Turbo StreamsでリアルタイムUIを実現!create / update / destroy を自動反映する仕組みをやさしく解説

Turbo StreamsでリアルタイムUI:create/update/destroy の自動反映
Turbo StreamsでリアルタイムUI:create/update/destroy の自動反映

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

生徒

「Webアプリって、データを追加したら毎回画面を更新しないといけないんですか?」

先生

「以前はそうでしたが、RailsではTurbo Streamsを使うと、画面を再読み込みしなくても自動で表示が変わります。」

生徒

「えっ、ページを更新しないのに変わるんですか?難しそうです…」

先生

「大丈夫です。Turbo StreamsはRailsの流れに乗るだけなので、初心者でも自然に使えますよ。」

1. RailsとHotwireの基本を押さえよう

1. RailsとHotwireの基本を押さえよう
1. RailsとHotwireの基本を押さえよう

Railsは、Webアプリケーションを効率よく作るためのフレームワークです。MVCという役割分担の考え方を採用しており、モデルはデータ、ビューは画面、コントローラは処理の流れを担当します。開発者が迷わないように、決まりごとを重視するコンベンションも特徴です。

Hotwireは、RailsでモダンなUIを作るための仕組みの集合体です。JavaScriptを大量に書かなくても、画面を動的に更新できます。その中心にあるのがTurboで、今回の主役であるTurbo Streamsもここに含まれます。

2. Turbo Streamsとは何か?

2. Turbo Streamsとは何か?
2. Turbo Streamsとは何か?

Turbo Streamsは、サーバー側から「画面のこの部分をこう変えてください」という指示を送る仕組みです。例えるなら、先生が黒板を全部消すのではなく、必要な一部分だけを書き換えるようなイメージです。

これにより、create(作成)、update(更新)、destroy(削除)といった操作が行われた瞬間に、一覧画面などが自動で変化します。ユーザーはページを再読み込みする必要がなく、スムーズな操作感を得られます。

3. Turbo Streamsが動く全体の流れ

3. Turbo Streamsが動く全体の流れ
3. Turbo Streamsが動く全体の流れ

Turbo Streamsは、通常のRailsの処理と同じ流れで動きます。フォーム送信やボタン操作でリクエストが送られ、コントローラが処理し、ビューを返します。その返却形式がHTMLではなく、Turbo Stream専用の形式になるだけです。

つまり、Railsの基本を理解していれば、新しい概念を大量に覚える必要はありません。これは初心者にとって大きな安心材料です。

4. create時に一覧へ自動追加する例

4. create時に一覧へ自動追加する例
4. create時に一覧へ自動追加する例

まずはデータを新しく作成したときに、一覧画面へ自動で追加される例です。投稿アプリを想像するとわかりやすいでしょう。


# posts_controller.rb
def create
  @post = Post.new(post_params)
  if @post.save
    respond_to do |format|
      format.turbo_stream
      format.html { redirect_to posts_path }
    end
  end
end

<!-- create.turbo_stream.erb -->
<turbo-stream action="append" target="posts">
  <template>
    <%= render @post %>
  </template>
</turbo-stream>

appendは「後ろに追加する」という意味です。targetで指定した場所に、新しい要素が差し込まれます。

5. update時に内容をその場で書き換える

5. update時に内容をその場で書き換える
5. update時に内容をその場で書き換える

次は更新処理です。編集した内容を保存した瞬間に、一覧の表示も変わります。これは「入れ替え」の動作になります。


# posts_controller.rb
def update
  @post = Post.find(params[:id])
  if @post.update(post_params)
    respond_to do |format|
      format.turbo_stream
      format.html { redirect_to posts_path }
    end
  end
end

<!-- update.turbo_stream.erb -->
<turbo-stream action="replace" target="<%= dom_id(@post) %>">
  <template>
    <%= render @post %>
  </template>
</turbo-stream>

replaceは指定した部分を丸ごと差し替えます。DOM IDという考え方を使うことで、どの要素を変えるかを明確にできます。

6. destroy時に画面から自動削除する

6. destroy時に画面から自動削除する
6. destroy時に画面から自動削除する

削除処理では、一覧から該当データを消します。ゴミ箱に入れると画面から消える感覚に近いです。


# posts_controller.rb
def destroy
  @post = Post.find(params[:id])
  @post.destroy
  respond_to do |format|
    format.turbo_stream
    format.html { redirect_to posts_path }
  end
end

<!-- destroy.turbo_stream.erb -->
<turbo-stream action="remove" target="<%= dom_id(@post) %>">
</turbo-stream>

removeは要素を完全に取り除きます。画面が即座に変わるため、操作結果が直感的に伝わります。

7. ViewComponentと組み合わせる考え方

7. ViewComponentと組み合わせる考え方
7. ViewComponentと組み合わせる考え方

ViewComponentは、画面の部品をクラスとして管理する仕組みです。Turbo Streamsと組み合わせることで、部品単位で安全に差し替えができます。表示のルールが一箇所にまとまるため、後から修正する際も混乱しにくくなります。

初心者のうちは、まず「部分的に画面が変わる」という体験を理解することが大切です。仕組みを理解してから、部品化を意識するとスムーズです。

8. Turbo Streamsが初心者に向いている理由

8. Turbo Streamsが初心者に向いている理由
8. Turbo Streamsが初心者に向いている理由

Turbo Streamsは、JavaScriptをほとんど書かずにリアルタイムUIを実現できます。Railsの基本的なCRUD操作と直結しているため、学習の流れを崩しません。

画面更新のたびにページ全体を描き直さないため、動作も軽く、ユーザー体験も向上します。まずはcreate、update、destroyの3つをしっかり使えるようになるだけで、現代的なWebアプリに近づきます。

カテゴリの一覧へ
新着記事
New1
Ruby
Rubyの文法超入門:式と文・endの役割をやさしく解説
New2
Rails
Nodeは本当に不要?Railsのimportmap最小構成とjsbundling構成の違いと選び方
New3
Rails
Rails開発で使うデータベースの選び方とSQLite・MySQL・PostgreSQLの初期設定
New4
Ruby
Ruby環境構築の最終チェック!セットアップ失敗あるあると確認リスト
人気記事
No.1
Java&Spring記事人気No1
Rails
Railsメール確認(confirmable)の実装手順を完全ガイド!初心者でもわかる有効化リンクと期限設定
No.2
Java&Spring記事人気No2
Ruby
OpenSSL関連エラーの直し方を完全解説!証明書・ビルドオプション・brew対策まとめ
No.3
Java&Spring記事人気No3
Ruby
RubyのEnumerable完全解説!cycle・zipで繰り返しの達人になろう
No.4
Java&Spring記事人気No4
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.5
Java&Spring記事人気No5
Ruby
プロキシ環境でも安心!社内ネットワーク下でのRuby gemインストール完全ガイド【SSL対応も解説】
No.6
Java&Spring記事人気No6
Ruby
PATHと環境変数の正しい設定!Windows・Mac・Linux別チェックリスト付き
No.7
Java&Spring記事人気No7
Rails
asdfで複数言語を一元管理:Ruby/Node/psql をまとめてセットアップ
No.8
Java&Spring記事人気No8
Ruby
Rubyのany? all? none? one? を完全攻略!条件判定を劇的に短く書く方法