レイアウトとパーシャル

Railsにおける「ビュー(ERB, HTML)」の構成要素として重要な「レイアウト」と「パーシャル」は、ビューの再利用性・保守性・一貫性を高めるための仕組みです。以下、それぞれについて詳しく説明します。


1. レイアウト(Layout)

概要

レイアウトは、全体の共通デザイン(ヘッダー、フッター、ナビゲーションバーなど)を定義するテンプレートです。各コントローラーのビューは、このレイアウトに埋め込まれる形で表示されます。

デフォルトのレイアウト

Railsでは、アプリ全体のデフォルトレイアウトは app/views/layouts/application.html.erb に定義されています。たとえば以下のように記述されます:

erb
<!DOCTYPE html> <html> <head> <title>MyApp</title> <%= csrf_meta_tags %> <%= csp_meta_tag %> <%= stylesheet_link_tag "application", media: "all" %> </head> <body> <header> <h1>MyApp</h1> <%= render "shared/navbar" %> </header> <main> <%= yield %> <!-- 各ビューがここに挿入される --> </main> <footer> <p>Copyright © 2025</p> </footer> </body> </html>

コントローラーごとのレイアウト指定

コントローラーごとに個別のレイアウトを使いたい場合、以下のように指定します:

ruby
class AdminController < ApplicationController layout "admin" # app/views/layouts/admin.html.erb を使う end

2. パーシャル(Partial)

概要

パーシャルは、ビューの一部を切り出した再利用可能なテンプレートです。ヘッダー、サイドバー、コメント一覧、フォームなど、共通部分をパーシャルとして分割できます。

パーシャルの命名規則

パーシャルファイルは、アンダースコア(_)で始めるのが慣例です。例えば:

  • _header.html.erb

  • _form.html.erb

  • _comment.html.erb

パーシャルの呼び出し方法

通常の呼び出し

erb
<%= render "shared/header" %>

これは app/views/shared/_header.html.erb を読み込みます。

コレクションの呼び出し(eachと組み合わせ)

erb
<%= render @comments %>

この場合、Railsは自動的に @comments の各要素に対して _comment.html.erb を繰り返し描画します。

ローカル変数の渡し方

erb
<%= render partial: "form", locals: { user: @user } %>

パーシャル内では <%= user.name %> のように使えます。


まとめ

項目 目的 使い方の例
レイアウト 共通デザインの定義(ヘッダーやフッター) app/views/layouts/application.html.erb
パーシャル ビューの部分的な再利用・分離 _form.html.erbrender で読み込み

このように、Railsのビューにおける「レイアウトとパーシャル」は、保守性・再利用性・構造の明確化において極めて重要な役割を果たします。これらを適切に活用することで、開発効率とコードの品質を大幅に向上させることができます。

ChatGPT4o 生成日:2025/06/21