カテゴリ: Rails 更新日: 2025/12/19

RailsでTurboとStimulusを完全ガイド!フォーム送信・モーダル・部分更新を初心者向けに解説

Turbo/Stimulusと連携:フォーム送信・モーダル・部分更新の基本
Turbo/Stimulusと連携:フォーム送信・モーダル・部分更新の基本

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

生徒

「Railsでページを全部読み込まずに部分的に更新する方法があると聞いたんですが、それってどうやるんですか?TurboとかStimulusって名前だけ聞いたことがあります。」

先生

「TurboとStimulusは、Railsで画面をスムーズに動かすための新しい仕組みです。JavaScriptを少なくしつつ、モーダル表示やフォーム送信を高速化できますよ。」

生徒

「モーダルでフォームを送信したり、一覧だけ更新したりできたら便利ですね。でも難しくないですか?」

先生

「初心者でも大丈夫です。Railsのビュー(ERB・Haml・Slim)とTurboの組み合わせなら、意外とシンプルに実装できますよ。では基本から見ていきましょう。」

1. Turboとは?ページ全体をリロードしない仕組み

1. Turboとは?ページ全体をリロードしない仕組み
1. Turboとは?ページ全体をリロードしない仕組み

Turboは、Rails7で標準採用されたフロントエンド技術です。ページ遷移やフォーム送信を高速化し、部分的な画面更新を実現できます。これにより、従来のJavaScriptを書かなくてもスムーズな動作が可能になっています。

Turboの基本機能は次の三つです。ページ遷移を高速化する「Turbo Drive」、フォーム送信を簡単にする「Turbo Frames」、部分更新の「Turbo Streams」です。初心者はまず、Turbo Frameを使った部分更新を覚えると理解しやすくなります。

2. Turbo Frameでフォーム送信を処理する基本

2. Turbo Frameでフォーム送信を処理する基本
2. Turbo Frameでフォーム送信を処理する基本

Turbo Frameを使うと、特定の部分だけを更新することができます。例えば、コメント一覧の部分だけ書き換えるような場面で使われます。


<turbo-frame id="comment_form">
  <%= form_with model: @comment, data: { turbo_frame: "comment_form" } do |f| %>
    <%= f.text_field :body %>
    <%= f.submit "送信" %>
  <% end %>
</turbo-frame>

form_withにturbo_frameを紐づけることで、送信後の結果がそのまま同じフレームに返ってきます。ページ全体をリロードする必要がなく、スムーズにコメント欄が更新されます。

3. Turbo Streamで部分更新をもっと便利にする

3. Turbo Streamで部分更新をもっと便利にする
3. Turbo Streamで部分更新をもっと便利にする

Turbo Streamsを使えば、コントローラ側で更新したビューをそのまま反映させることができます。特に、追加・削除・置き換えなどの操作が簡単に記述できます。


<turbo-stream action="append" target="comments">
  <template>
    <%= render @comment %>
  </template>
</turbo-stream>

appendは「末尾に追加する」という意味で、コメントを追加する際によく使われる書き方です。Rails側が自動でこのレスポンスを返すため、ビューの操作がとても簡単になります。

4. Stimulusとは?HTMLに動きを追加する仕組み

4. Stimulusとは?HTMLに動きを追加する仕組み
4. Stimulusとは?HTMLに動きを追加する仕組み

Stimulusは、必要なときだけJavaScriptを使えるようにする軽量フレームワークです。複雑なロジックをJSで書く必要がなく、HTML側に分かりやすく配置できます。


# controllers/modal_controller.js
export default class extends Controller {
  open() {
    this.element.classList.add("show")
  }
  close() {
    this.element.classList.remove("show")
  }
}

Stimulusの特徴はコントローラごとに役割が明確で、初心者でも構造を理解しやすい点です。Railsと組み合わせると、ビューの動きを自然に整理できます。

5. モーダルをTurbo+Stimulusで制御する基本パターン

5. モーダルをTurbo+Stimulusで制御する基本パターン
5. モーダルをTurbo+Stimulusで制御する基本パターン

Bootstrapなどのモーダルを使う場合も、TurboとStimulusがあると管理しやすくなります。リンクをクリックしてモーダルを開き、その中でフォームを送信する構成です。


<div data-controller="modal" class="modal" id="postModal">
  <div class="modal-content">
    <turbo-frame id="post_form">
      <%= render "posts/form", post: @post %>
    </turbo-frame>
    <button data-action="modal#close">閉じる</button>
  </div>
</div>

これにより、「モーダルの中だけを部分的に更新する」という実装が非常に簡単になります。モーダルを閉じてもページ全体は動かないため、アプリが軽く感じます。

6. ビューの種類(ERB・Haml・Slim)でもTurboの使い方は同じ

6. ビューの種類(ERB・Haml・Slim)でもTurboの使い方は同じ
6. ビューの種類(ERB・Haml・Slim)でもTurboの使い方は同じ

TurboとStimulusはテンプレートエンジンに依存せず、ERBでもHamlでもSlimでも同じタグ構造で動作します。HamlやSlimは記述が短いだけなので、慣れればどれでも扱えます。


/ Haml
%turbo-frame{id: "post_form"}
  = render "posts/form"

テンプレートの違いを意識しすぎず、Turboの基本構造を理解することが大切です。

7. パーシャル+Turboで管理しやすい設計にする

7. パーシャル+Turboで管理しやすい設計にする
7. パーシャル+Turboで管理しやすい設計にする

Turboはパーシャルとの相性がよく、部分更新を行うときには必ずパーシャルを使うと言っても良いほどです。追加・更新・削除に応じたパーシャルを用意することで、コントローラもビューも整理されます。


<!-- posts/_post.html.erb -->
<div id="post_<%= post.id %>">
  <p><%= post.title %></p>
</div>

Turbo Streamがこのパーシャルを利用するため、自然と再利用性の高い構造になります。

8. 初心者が最初に覚えるべきTurboとStimulusの使い方

8. 初心者が最初に覚えるべきTurboとStimulusの使い方
8. 初心者が最初に覚えるべきTurboとStimulusの使い方

TurboとStimulusは、Railsアプリをスムーズに動かすための必須スキルになっています。初心者はまず、フォーム送信・部分更新・モーダルの三つから覚えると理解しやすく、ビューの構造も自然に理解できます。

難しいJavaScriptを覚えなくても画面が動くため、Railsらしい「シンプルな構成で高機能なアプリを作る」という思想を体験できます。

関連記事:
カテゴリの一覧へ
新着記事
New1
Ruby
Gemとは?RubyGemsとBundlerを初心者向けに完全解説!依存関係管理も図解でわかりやすく理解
New2
Ruby
Rubyの文字エンコーディング入門!UTF-8・マジックコメント・外部/内部エンコーディングを完全解説
New3
Rails
Rails GoodJob入門!PostgreSQLベースのバックグラウンド処理を初心者向けに完全解説
New4
Ruby
Rubyで学ぶビット演算入門:&・|・^・~・<<・>>の基礎と実例
人気記事
No.1
Java&Spring記事人気No1
Ruby
Rubyのreduceとinject入門!合計計算や集計を初心者向けに分かりやすく解説
No.2
Java&Spring記事人気No2
Ruby
Rubyの始め方ガイド:インストールから最初のHello Worldまで(Windows/Mac/Linux)
No.3
Java&Spring記事人気No3
Ruby
Rubyの文字列エンコーディング完全ガイド!Encoding・force_encoding・encodeを初心者向け解説
No.4
Java&Spring記事人気No4
データベース
PostgreSQLのWHERE句を徹底解説!初心者でもわかるSQLデータ抽出の基本
No.5
Java&Spring記事人気No5
Ruby
Rubyのfind/detect/find_indexを徹底解説!目的のデータを素早く探す方法
No.6
Java&Spring記事人気No6
Ruby
Rubyで比較演算子を完全解説!==・===・<=>・eql? の使い分け
No.7
Java&Spring記事人気No7
Ruby
Rubyのselect/reject/filterの使い方を完全解説!初心者向けの条件抽出レシピ
No.8
Java&Spring記事人気No8
データベース
PostgreSQLで順位付け!ROW_NUMBER関数の使い方を初心者向けに徹底解説