ruby on rails renderの基本と使い方を初心者でもわかりやすく解説
はじめに
皆さんは、Railsを使ってWebアプリを開発するときに、renderというメソッドをどのように使うか気になったことはありませんか。 Railsのコントローラとビューの連携で登場するrenderは、ユーザーに表示するデータをどのタイミングで、どのような形で返すかを指定する大切なメソッドです。
実務の現場では、単純なHTMLの表示だけでなく、部分的にデータを渡して再利用するケースも出てきます。 そのため、renderメソッドをしっかり理解しておくと開発がスムーズになります。 ここでは、初心者の方でもわかりやすいように、renderの基本や具体的な活用例を紹介します。
この記事を読むとわかること
この記事では、Railsにおけるrenderメソッドの主な使い方から実務での活用ポイントをまとめています。 初心者の方にも理解しやすいように、コード例や注意点をシンプルに解説しています。
- renderメソッドの基本的な役割
- テンプレートを指定して表示する方法
- 部分テンプレート(partial)の使い方
- JSONレスポンスを返す場合の記述方法
- 実務でよくある利用シーンや注意点
これらを知っておくことで、Railsでの開発時にビューの出し分けがより柔軟になります。 どんな場面でどのようにrenderを使えばよいのか、ぜひ参考にしてみてください。
レンダリングとは何か
Webアプリケーションでは、サーバー側で処理したデータをユーザーの画面に表示する仕組みが必要です。 Railsの場合は、コントローラで取得または計算したデータをビューに渡して描画を行いますが、その際に使うのがrenderです。
一言でいうと、renderは「指定した内容を表示するためのメソッド」です。 ただし、内容はHTMLだけでなく、JSON形式やテキスト形式などいろいろなパターンが用意されています。 この仕組みにより、同じコントローラの中でも出力の形式を柔軟に切り替えることができます。
Viewとの結びつけ
Railsでは、コントローラでインスタンス変数(@userなど)を用意し、それをビューに渡してHTMLを作ります。 通常はアクション名に対応したテンプレートが自動的に読み込まれますが、別のテンプレートを使いたい場合や特定のフォーマットで出力したい場合にrenderを使います。
たとえば、render :newのように書くと、new.html.erbが表示されます。 また、同じアクションでもJSON形式で返したい場合に、render json: @userと書くと、JSONとしてデータをレスポンスできます。
Railsでのrenderの基本
Railsのコントローラでは、アクションの最後に指定したテンプレートを表示するか、または明示的にrenderメソッドを呼び出してビューを出し分けることが多いです。 ここでは、どのような書き方があるのか、基本パターンを見てみましょう。
コントローラでのrender
下記は例として、Usersコントローラでshowアクションを定義したときのサンプルです。 コントローラ内で@userを用意し、それをビューに渡しています。
class UsersController < ApplicationController def show @user = User.find(params[:id]) render :profile # Railsはviews/users/profile.html.erb を探す end end
上記のrender :profileは、app/views/users/profile.html.erb
を使って画面を描画します。
もし何も書かない場合、Railsはアクション名と同じファイル(app/views/users/show.html.erb
)を表示します。
しかし、名前を変えたい場合などは、上記のように明示的にrenderを使うことがあります。
テンプレートファイルの仕組み
Railsのビューはデフォルトでapp/views/コントローラ名/アクション名.html.erb
のように保存されています。
テンプレートを変えたい場合は、renderの引数にテンプレート名を指定します。
render :profile
Railsはprofile.html.erb
を探します
render :edit
Railsはedit.html.erb
を探します
もし他のコントローラのビューを使いたい場合は、**"controller_name/template_name"**の形式で書きます。 たとえばusersコントローラからadmin/usersのビューを呼びたいときは、**render "admin/users/edit"**といった指定もできます。
部分テンプレート(partial)の活用
実務でRailsを使う際に便利なのが、 部分テンプレート (partial)です。 部分テンプレートはビューの一部を独立したファイルに切り出しておき、複数の箇所で再利用できるようにする仕組みです。 ファイル名の先頭がアンダースコア(_)になっているのが特徴です。
部分テンプレートの基本構文
たとえばユーザー情報を表示する_user.html.erbという部分テンプレートを用意し、それを複数のビューで共有したい場面を考えてみましょう。
<!-- app/views/users/_user.html.erb --> <p> 名前: <%= user.name %> </p> <p> メールアドレス: <%= user.email %> </p>
このファイルを呼び出すときは、render partial: "user", locals: { user: @user }
のように書きます。
localsを指定すると、部分テンプレート内で使う変数を渡せます。
複数ユーザーをまとめて表示する場合は、collectionを使うことで繰り返し処理が可能です。
<!-- app/views/users/index.html.erb --> <h3>ユーザー一覧</h3> <%= render partial: "user", collection: @users %>
このように書くと、@usersに含まれる要素がひとつずつ_user.html.erbに渡され、繰り返し表示が行われます。 リスト表示が多い場面で役立ちますね。
JSONを返す場合のrender
HTMLだけでなく、API用途としてJSON形式でデータを返したいケースもあるでしょう。 Railsは、コントローラの中で**render json:**を使うとオブジェクトをJSON化して返せます。
def user_data user = User.find(params[:id]) render json: user end
この場合、受け取った側(フロントエンドなど)はJSONとしてデータを扱うことができます。 単にJSONを返すだけでなく、変換するキーを選択したり、シリアライザー(ActiveModel::Serializerなど)を利用して高度な表現もできますが、初心者のうちは基本の書き方を押さえておくと十分役に立ちます。
実務での活用シーン
実務では、部分テンプレートを駆使して重複コードを減らす、特定の条件下のみテンプレートを変えるなど、柔軟なUIの構築が求められます。 たとえば、同じユーザープロフィール表示でも、PC画面用とモバイル画面用で若干レイアウトが違う場合がありますよね。
そんなとき、renderを使い分けることで、異なるテンプレートを切り替えられます。 また、Ajaxリクエストを受け取って部分更新したいときも、あらかじめ部分テンプレートを用意しておくとスムーズです。
画面表示の切り替え例
もし、adminユーザーには管理画面専用のビューを使い、それ以外のユーザーには一般向けビューを使いたい場合、下記のように書けます。
def show @user = User.find(params[:id]) if @user.admin? render "admin_show" else render "general_show" end end
こうしてユーザーの状態に応じて、違うテンプレートを表示することができます。 実際の業務では、権限レベルに応じてビューを切り替えたり、部分テンプレートを使い分けて表示内容をカスタマイズしたりします。
レイアウトとの組み合わせ
Railsのビューには、layoutという仕組みもあります。 layoutファイルを使うと、全ページで共通するヘッダーやフッターをまとめられるので、アプリのデザインを統一しやすくなります。
特定のレイアウトを指定する
通常はapplication.html.erb
が共通レイアウトとして使われますが、別のレイアウトを使いたいときはrenderの代わりにlayout指定を行うパターンもあります。
ただし、renderとlayoutの指定は少し用途が異なるため注意が必要です。
class AdminController < ApplicationController layout "admin" def dashboard # admin.html.erbを使ったレイアウトが適用される end end
このように書くと、app/views/layouts/admin.html.erb
がレイアウトとして適用されます。
render自体は部分テンプレートやテンプレートファイルを選ぶためのメソッドですが、レイアウトそのものはコントローラ単位で指定することが多いです。
ビュー全体を見通しよく保つために、レイアウトと部分テンプレートを適切に組み合わせると便利です。
エラーが出やすいポイント
Rails初心者の方は、renderで指定したテンプレートのパスが正しくないとエラーになりがちです。
たとえば**render "users/profile"**と書いたのに、実際のファイル名がapp/views/users/profile.html.erb
ではなかった、というミスが多いようです。
また、部分テンプレートでlocalsを渡すのを忘れると、「undefined local variable」といったエラーになってしまうことがあります。 明示的に変数を渡す必要があるかどうか、あらかじめチェックしておきましょう。
renderのパフォーマンス視点
renderの呼び出し回数が極端に多いと、サーバー側に負荷がかかることがあります。 ただし、通常の範囲内であれば問題なく動作するケースが大半です。
もし多数のレコードを一気に表示する際は、以下のような点を意識してみるとよいでしょう。
- N+1クエリを避ける(includesなどで関連情報をまとめて取得する)
- 部分テンプレートを使うときは最小限のデータを渡す
- キャッシュ機構(fragment cacheなど)を利用する
これらはrenderメソッドに限定した話ではありませんが、快適な画面表示のためには重要なポイントです。
まとめ
ここまで、Railsのrenderについて具体的な活用方法や注意点を見てきました。 初心者の方でも「なぜrenderが必要なのか」「どうやってビューを切り替えればいいのか」がイメージしやすくなったのではないでしょうか。
コントローラでアクションを定義し、renderでビューを切り替えることで、HTMLやJSON、部分テンプレートなどを柔軟に表示できます。 実務では、細かなUIカスタマイズや権限に応じたビューの出し分けなど、さまざまな場面でこの仕組みが活用されています。
Railsのプロジェクトを進めていると、ビューの再利用やレイアウトの分割などが必要になります。 そんなとき、renderメソッドの理解が深まっていると、よりスムーズに開発を進めることができるでしょう。