0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails初学者】ActionViewの概要についてざっくり理解する

0
Posted at

ゴール

この記事では、RailsのActionViewについてざっくり理解することを目指します⭐️
Railsのなかで、ActionViewがどのような役割を果たしているのかを理解し、基本的な使い方や概念についてイメージできる状態になることを目標とします🙋

action-view.png

ActionViewとは?

ActionViewは、RailsのMVCアーキテクチャにおける「View」の役割を担うコンポーネントです。Viewは、ユーザーに表示される部分を担当し、HTMLテンプレートのレンダリングやデータの表示を行います!

下記の図でいうと、7〜8番にあたります!

mvc-framework.png

レスポンスの流れ(7〜8番)

  • Controller:「このデータを使ってHTMLを作ってほしい🙏」とActionViewに依頼する。

  • ActionView:「了解🙆」と、HTMLを生成(レンダリング)し、その結果(HTMLのソースコード)をControllerに戻す。

  • Controller:「ありがとう👍ブラウザへの返答準備完了」として、HTTPヘッダー(ステータスコード200 OKなど)を付けて、ブラウザに返却(レスポンス)する。

ActionViewからブラウザにHTMLを直接渡さないの??

ActionViewはあくまで「HTMLを作って、それをControllerに渡す」役割であり、実際にブラウザに返すのはControllerの役割です。

ActionViewが直接ブラウザにHTMLを渡さない理由としては、HTTPレスポンスにはHTML以外にもステータスコードやヘッダー情報などが必要であり、これらを一括して管理・返却するのControllerの責任範囲だからです。

ActionViewはHTML生成に専念し、ControllerがHTTPレスポンス全体を構築・管理することで、役割分担が明確になり、コードの保守性が向上します⭕️

ActionView レンダリングのイメージ

ActionViewの主な構成要素

ActionViewは、以下のような主要な構成要素から成り立っています!

  1. テンプレート:各ページのメインコンテンツ
  2. レイアウト:全ページ共通の枠組み
  3. パーシャル:再利用可能なビューコンポーネント
  4. ヘルパーメソッド:ビューで使う便利なメソッド群

ファイル構成の例

app/
└── views/
    ├── layouts/
    │   ├── application.html.erb      ← レイアウト
    │   └── admin.html.erb
    │
    ├── shared/                        ← 共通パーシャル
    │   ├── _header.html.erb
    │   ├── _footer.html.erb
    │   └── _flash_messages.html.erb
    │
    └── users/                         ← コントローラーごとのビュー
        ├── index.html.erb             ← テンプレート
        ├── show.html.erb              ← テンプレート
        ├── new.html.erb               ← テンプレート
        ├── edit.html.erb              ← テンプレート
        ├── _form.html.erb             ← パーシャル
        └── _user_card.html.erb        ← パーシャル

app/
└── helpers/
    ├── application_helper.rb          ← 全体で使えるヘルパー
    └── users_helper.rb                ← Usersコントローラー用ヘルパー

テンプレート

テンプレートは、ビューの主要な部分を構成しHTMLと埋め込みRubyコード(ERB)を組み合わせて記述されます。テンプレートファイルは通常、app/viewsディレクトリ内に配置され、app/views/コントローラー名/アクション名.html.erbのような命名規則に従います。

<!-- app/views/users/show.html.erb -->
<div class="user-profile">
  <h1><%= @user.name %></h1>
  <p><%= @user.email %></p>
</div>

レイアウト

全ページ共通の枠組み(ヘッダー、フッター、メタタグなど)を定義します!

特徴

  • app/views/layoutsディレクトリに配置される
  • yieldで各ページのコンテンツが挿入される
  • コントローラーごとに異なるレイアウトを指定可能
<!-- app/views/layouts/application.html.erb -->
<!DOCTYPE html>
<html>
  <head>
    <title>My App</title>
    <%= csrf_meta_tags %>
    <%= stylesheet_link_tag 'application' %>
  </head>
  <body>
    <%= render 'shared/header' %>
    
    <main>
      <%= yield %>  <!-- ここに各ページの内容が入る -->
    </main>
    
    <%= render 'shared/footer' %>
  </body>
</html>

パーシャル

再利用可能なビューの部品(部分テンプレート)です!

パーシャルをビューの一部に含めてレンダリングするには、renderメソッドで呼び出します。

<!-- app/views/users/_user_card.html.erb -->
<div class="user-card">
  <h3><%= user.name %></h3>
  <p><%= user.email %></p>
</div>

<!-- 呼び出し側 -->
<%= render 'users/user_card', user: @user %>

パーシャルのファイル名に注意!
パーシャルは便利ですが、ファイル名の付け方に注意が必要です。
パーシャルのファイル名はアンダースコア(_)で始める必要があります。

例:_form.html.erb_header.html.erb_footer.html.erb

ヘルパーメソッド

ビューで使う便利なメソッド群です!Railsには多くの組み込みヘルパーが用意されており、リンク生成、フォーム作成、日付フォーマットなど、様々な操作を簡単に行えます🙆

<%= link_to 'ホーム', root_path %>
<%= form_with model: @user do |form| %>
  <%= form.label :name %>
  <%= form.text_field :name %>
  <%= form.submit '保存' %>
<% end %>

ローカライズされたビュー

ActionViewは、現在のロケール(言語設定)に応じて、異なるテンプレートを自動的に選択してレンダリングできます!

基本的な仕組み
ファイル名にロケールコードを付けるだけで、言語ごとに異なるビューを表示できます。
(publicディレクトリのエラーページも同様の仕組みです)

app/views/articles/
├── show.html.erb        ← デフォルト
├── show.ja.html.erb     ← 日本語版
└── show.en.html.erb     ← 英語版
└── show.ko.html.erb     ← 韓国語版

public/
├── 404.html          ← デフォルトの404エラーページ
├── 404.ja.html       ← 日本語版404エラーページ
├── 404.en.html       ← 英語版404エラーページ
└── 404.ko.html       ← 韓国語版404エラーページ

ローカライズのイメージ

ActionViewの利用に必要な準備

ActionViewはRailsフレームワークの一部として提供されているため、通常は個別にインストールする必要はありません。Railsアプリケーションを作成すると、自動的にActionViewも含まれます。
Gemfile.lockファイルを確認すると、actionviewのバージョンが記載されています。

    rails (8.0.2)
      actioncable (= 8.0.2)
      actionmailbox (= 8.0.2)
      actionmailer (= 8.0.2)
      actionpack (= 8.0.2)
      actiontext (= 8.0.2)
      actionview (= 8.0.2)   #← ここ!
      activejob (= 8.0.2)
      activemodel (= 8.0.2)
      activerecord (= 8.0.2)
      activestorage (= 8.0.2)
      activesupport (= 8.0.2)
      bundler (>= 1.15.0)
      railties (= 8.0.2)

まとめ

ActionViewは、「部品(レイアウト・パーシャル)を組み合わせ、Controllerからのデータ(@変数)を埋め込み、ヘルパーを使って効率的にHTMLを作る工場」のようなイメージで最初はいいのかなと思います😊
簡単な概要でしたが、Railsアプリケーション開発におけるActionViewの役割や基本的な使い方について理解が深まれば幸いです⭐️

参考記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?