カテゴリ: Rails 更新日: 2026/02/01

renderとredirect_toの違いを初心者向けに解説!テンプレート・JSON・外部URLの使い分け完全ガイド

renderとredirect_toの違い:テンプレート/JSON/外部URLの返し方まとめ
renderとredirect_toの違い:テンプレート/JSON/外部URLの返し方まとめ

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

生徒

「Railsで画面を表示したり、他のページに移動させたりするにはどうすればいいですか?」

先生

「そのときには、renderredirect_toを使います。表示するか、移動するかで使い方が変わってきますよ。」

生徒

「renderとredirect_toの違いって、どうやって見分けるんですか?」

先生

「それでは、renderredirect_toの違いや、JSONや外部URLの使い分けを詳しく見ていきましょう!」

1. renderとは?

1. renderとは?
1. renderとは?

renderは、指定したテンプレートや内容をその場で表示する命令です。ページを移動せずに、コントローラ内で「この画面を表示してね」と指示する役割があります。

例えば、データの保存に失敗したとき、同じ入力フォームを再表示するのに使います。


def create
  @book = Book.new(book_params)
  if @book.save
    redirect_to @book
  else
    render :new
  end
end

render :newで、new.html.erbテンプレートを表示します。ここではURLは変わらず、あくまで表示内容だけが変わります。

2. redirect_toとは?

2. redirect_toとは?
2. redirect_toとは?

redirect_toは、ブラウザに「別のURLへ移動して」と伝える命令です。つまり、別のページへジャンプする仕組みです。

データの保存が成功したあと、詳細ページへ移動するときによく使われます。


redirect_to book_path(@book)

この命令が実行されると、ブラウザが/books/1のようなURLへアクセスし直します。

3. renderとredirect_toの違いを整理しよう

3. renderとredirect_toの違いを整理しよう
3. renderとredirect_toの違いを整理しよう
  • render:その場でテンプレートを表示(URLは変わらない)
  • redirect_to:別のURLに移動する(ブラウザが再リクエストする)

たとえるなら、renderは「その場で画面を差し替える」redirect_toは「ページをめくる」というイメージです。

4. renderでJSONを返す方法

4. renderでJSONを返す方法
4. renderでJSONを返す方法

RailsではHTMLだけでなく、JSON形式のデータも返すことができます。これはAPIなどでよく使われます。


render json: { title: "Rails入門", pages: 300 }

{"title":"Rails入門","pages":300}

render json:を使えば、コントローラからJSONを直接返すことができます。Webアプリだけでなく、スマホアプリと連携する際にも使えます。

5. redirect_toで外部URLにジャンプ

5. redirect_toで外部URLにジャンプ
5. redirect_toで外部URLにジャンプ

redirect_toは、外部のWebサイトにも移動できます。たとえば、ユーザーを公式サイトに移動させたいときなどに使えます。


redirect_to "https://example.com"

このコードを実行すると、ユーザーのブラウザはhttps://example.comへジャンプします。

6. renderとredirect_toのエラー処理での使い方

6. renderとredirect_toのエラー処理での使い方
6. renderとredirect_toのエラー処理での使い方

例えば、保存失敗時の対応として、次のように使い分けます。


def create
  @user = User.new(user_params)
  if @user.save
    redirect_to @user
  else
    render :new
  end
end

render :newとすることで、エラーメッセージとともに元の入力画面を再表示できます。一方、redirect_toを使うと、エラー情報は失われてしまうため、再入力画面ではrenderが好まれます。

7. まとめて使い分けるポイント

7. まとめて使い分けるポイント
7. まとめて使い分けるポイント
  • 同じリクエスト内で画面を切り替えるなら→render
  • 次のページに進ませたい・URLを変えたいなら→redirect_to
  • JSONを返したいとき→render json:
  • 外部サイトにジャンプしたいとき→redirect_to "https://..."

このように、目的によって正しく使い分けることが、Railsコントローラの基本になります。

まとめ

まとめ
まとめ

ここまで、Ruby on Railsにおける画面遷移の基本である「render」と「redirect_to」の違い、そして具体的な使い分けについて詳しく解説してきました。Webアプリケーション開発において、ユーザーの操作に対して「どの画面を見せるか」という制御は非常に重要です。正しく使い分けることで、入力エラー時のデータの保持や、処理完了後のスムーズな画面移動など、ユーザー体験(UX)を向上させることができます。

Railsの画面制御の核心を復習

基本的な考え方として、renderは「内部的な表示の切り替え」であり、redirect_toは「ブラウザへの再リクエスト命令」です。この違いは、HTTPリクエストの回数や、インスタンス変数の保持期間に直結します。例えば、新規登録フォームでバリデーションエラーが発生した場合、render :newを使えば、入力された値を保持したままエラーメッセージを表示できます。もしここでredirect_toを使ってしまうと、一度リクエストが切れてしまうため、入力内容は消えてしまい、ユーザーは最初から入力し直さなければなりません。

実践的なサンプルプログラムとデータの動き

より理解を深めるために、データベースの動きと合わせたサンプルを見ていきましょう。今回は、ユーザーが書籍情報を登録するシーンを想定した「books_controller」を例に挙げます。

データベースの状態(登録前)

現在は以下のようなデータが保存されているとします。


id | title            | price | author
---+------------------+-------+---------------
1  | Rails基礎        | 2500  | 山田太郎
2  | Rubyプログラミング | 3000  | 佐藤花子
3  | SQLの教科書       | 2800  | 鈴木一郎

コントローラでの実装例

以下のコードは、Rails開発で最も頻繁に書かれるパターンの一つです。成功時は別のページへ、失敗時はその場に留まるという制御を記述しています。


class BooksController < ApplicationController
  def create
    @book = Book.new(book_params)
    
    if @book.save
      # 保存成功:詳細ページへリダイレクト
      flash[:notice] = "書籍を登録しました"
      redirect_to book_path(@book)
    else
      # 保存失敗:入力フォームを再表示(インスタンス変数を保持)
      flash.now[:alert] = "登録に失敗しました"
      render :new
    end
  end

  private

  def book_params
    params.require(:book).permit(:title, :price, :author)
  end
end

SQLの実行ログ

保存が成功したとき、Railsの内部では以下のようなSQLが発行され、データベースに反映されます。


INSERT INTO books (title, price, author, created_at, updated_at)
VALUES ('Webデザイン入門', 2200, '田中次郎', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);

データベースの状態(登録後)


id | title            | price | author
---+------------------+-------+---------------
1  | Rails基礎        | 2500  | 山田太郎
2  | Rubyプログラミング | 3000  | 佐藤花子
3  | SQLの教科書       | 2800  | 鈴木一郎
4  | Webデザイン入門    | 2200  | 田中次郎

検索エンジンでの注目キーワードとSEO対策のポイント

Railsを学習する上で「render redirect_to 違い」というキーワードは非常によく検索されます。さらに踏み込んで、「render json」や「外部URL リダイレクト」といった具体的なユースケースについても把握しておくことが、モダンなWeb開発(特にAPI開発)において重要です。

例えば、ReactやVue.jsといったフロントエンドフレームワークと連携する場合、コントローラはHTMLではなくJSONを返すことが多くなります。その際は以下のような記述が一般的です。


def index
  @books = Book.all
  render json: @books
end

出力されるJSONデータの結果:


[
  {"id":1, "title":"Rails基礎", "price":2500},
  {"id":2, "title":"Rubyプログラミング", "price":3000}
]

最後に、renderとredirect_toの選択基準をもう一度表で整理します。

項目 render redirect_to
主な用途 フォームの再表示、JSON返却 保存完了後の移動、外部サイトへの遷移
ブラウザのURL 変わらない 新しいURLに変わる
リクエスト回数 1回(現在のリクエストのまま) 2回(改めてアクセスし直す)
データの引き継ぎ インスタンス変数がそのまま使える インスタンス変数は消える(flashを使う)
先生と生徒の振り返り会話

生徒

先生、詳しくありがとうございます!やっと整理がつきました。renderはその場で中身を書き換える紙芝居のようなもので、redirect_toは別の部屋へ移動するドアのようなイメージですね。

先生

その通りです!素晴らしい例えですね。特に、バリデーションエラーが発生したときにrender :newを使う理由が分かりましたか?

生徒

はい。renderならインスタンス変数(@bookなど)がそのまま残っているので、ユーザーが入力した内容を消さずに表示できるからですよね。もしredirect_toを使っちゃうと、せっかく入力した内容が空っぽになってしまって、ユーザーが「えーっ!」って驚いちゃいます。

先生

正解です。Railsの設計思想として、ユーザーにストレスを与えないフローを作ることが大切です。では、APIとしてデータを返したいときはどうすればいいでしょう?

生徒

そのときはrender json: オブジェクトを使いますね。HTMLのテンプレートを探しに行く代わりに、データを直接JavaScriptなんかに渡せるようになるんですよね。

先生

完璧です。あとは応用として、外部のサイトに飛ばしたいときはredirect_to "URL"を使えばOKです。この基本を押さえておけば、コントローラの設計で迷うことは少なくなりますよ。

生徒

ありがとうございます。まずは、保存が成功したらredirect_to、失敗したらrenderという鉄板パターンをしっかり身につけます!

先生

その意気です。実際に自分でアプリを作ってみて、URLがどう変わるか、ブラウザのデベロッパーツールでネットワークの動きを観察してみると、もっと理解が深まりますよ。頑張ってくださいね!

関連記事:
カテゴリの一覧へ
新着記事
New1
Ruby
“すべてはオブジェクト”を体感!初心者向けRubyのオブジェクト指向入門【irbで学ぶ】
New2
Ruby
Rubyの標準入出力を完全ガイド!puts・print・pの違いとデバッグ活用法
New3
Ruby
Gemとは?RubyGemsとBundlerを初心者向けに完全解説!依存関係管理も図解でわかりやすく理解
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
Ruby
Rubyの始め方ガイド:インストールから最初のHello Worldまで(Windows/Mac/Linux)
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関数の使い方を初心者向けに徹底解説