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学習者向けのLaravelAdvent Calendar 2024

Day 5

LaravelのBladeテンプレートエンジン:RailsのERBと比較

Posted at

はじめに

LaravelのBladeとRailsのERB(Embedded Ruby)は、それぞれのフレームワークにおける標準的なテンプレートエンジンです。両者はサーバーサイドのHTML生成を効率化しますが、使い方や特徴には違いがあります。本記事では、公式ドキュメントを参考にしながら、BladeとERBの違いや共通点を解説します。

BladeとERBの基本

Bladeの特徴(Laravel)

拡張子:Bladeテンプレートファイルは .blade.php という拡張子を使用します。
構文の簡潔さ:Bladeでは、{{ }} で変数を出力し、@if@foreach のようなディレクティブで制御構文を記述します。
コンパイル:Bladeテンプレートは、実行時にPHPコードにコンパイルされます。
レイアウトの継承@extends@section を使って、レイアウトを簡単に継承できます。

ERBの特徴(Rails)

拡張子:ERBテンプレートファイルは .html.erb という拡張子を使用します。
Rubyコードの埋め込み<%= %><% %> を使って、Rubyコードを直接埋め込むことができます。
シンプルさ:ERBは特別なディレクティブを持たず、Rubyコードをそのまま利用できます。
レイアウトの継承yieldcontent_for を使って、レイアウトの構造を定義します。

比較ポイント

1. 変数の出力

Blade: {{ $variable }}
→ 自動でHTMLエスケープされます。

ERB: <%= variable %>
→ エスケープされないため、エスケープが必要な場合は h(variable) または ERB::Util.html_escape(variable) を使用します。

: Blade:

blade
<h1>{{ $title }}</h1>

ERB:

erb
<h1><%= title %></h1>

2. 条件分岐

Blade: @if, @elseif, @else, @endif
ERB: <% if %>, <% elsif %>, <% else %>, <% end %>

: Blade:

blade
@if ($isLoggedIn)
    <p>ログインしています</p>
@else
    <p>ログインしていません</p>
@endif

ERB:

erb
<% if is_logged_in %>
  <p>ログインしています。</p>
<% else %>
  <p>ログインしていません。</p>
<% end %>

3. 繰り返し処理

Blade: @foreach
ERB: <% for %> または .each

: Blade:

blade
<ul>
    @foreach ($items as $item)
        <li>{{ $item }}</li>
    @endforeach
</ul>

ERB:

erb
<ul>
  <% items.each do |item| %>
    <li><%= item %></li>
  <% end %>
</ul>

4. レイアウトの継承

Blade: @extends, @section, @yield
ERB: layout, yield, content_for

: Blade: layouts/app.blade.php:

blade
<html>
<head>
    <title>@yield('title')</title>
</head>
<body>
    @yield('content')
</body>
</html>

home.blade.php:

blade
@extends('layouts.app')

@section('title', 'ホームページ')

@section('content')
    <h1>Welcome!</h1>
@endsection

ERB: layouts/application.html.erb:

erb
<html>
<head>
  <title><%= yield(:title) %></title>
</head>
<body>
  <%= yield %>
</body>
</html>

home.html.erb:

erb
<% content_for :title do %>ホームページ<% end %>

<h1>Welcome!</h1>

結論

BladeとERBは、それぞれのフレームワークに最適化されたテンプレートエンジンですが、基本的な用途は共通しています。

Bladeは比較的学習コストが低く、PHPの知識があればすぐに使えます。
ERBはRubyコードをそのまま活用でき、Rubyの柔軟性を最大限に引き出します。
プログラミング初心者にとっては、どちらのテンプレートエンジンも直感的に使える設計になっているため、フレームワークの選択に応じてスムーズに習得できるでしょう。

参考

Laravel公式ドキュメント

Ruby on Rails公式ガイド

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?