LaravelのBlade構文まとめ!@if @foreach など基本ディレクティブ解説
生徒
「LaravelのBladeテンプレートでよく使う構文って何がありますか?特に@ifや@foreachの使い方が知りたいです。」
先生
「Bladeには、@ifや@foreachといった『ディレクティブ』があり、PHPの条件分岐や繰り返し処理を簡単に書けるようにしてくれます。」
生徒
「ディレクティブって何ですか?初めて聞きました。」
先生
「ディレクティブとはBladeで使う特別な命令のことです。@マークで始まり、HTMLの中で条件や繰り返し、コメントなどを分かりやすく書けますよ。」
生徒
「なるほど!それでは@ifや@foreachの基本的な使い方を教えてください!」
先生
「はい、それでは順番に説明していきますね!」
1. Bladeの@ifディレクティブとは?
@ifディレクティブは、LaravelのBladeテンプレートで最もよく使われる記述のひとつで、条件に応じて画面表示を切り替えるための仕組みです。普段のPHPのif文と同じ考え方ですが、HTMLの中でとても自然に書けるため、テンプレートが読みやすくなるというメリットがあります。特に「特定の条件のときだけメッセージを出したい」といった場面で大活躍します。
まずは基本の書き方を見てみましょう。初心者でも直感的に理解できるよう、シンプルな例を使っています。
@if ($score >= 60)
<p>合格です!</p>
@else
<p>不合格です。</p>
@endif
このコードでは、テストの点数を表す $score が60以上かどうかで表示内容を変えています。条件が「真」なら合格のメッセージ、そうでなければ不合格のメッセージを表示します。Bladeの@ifは「条件によって表示を切り替える」という動きを、そのまま素直に書けるため、実務でも頻繁に使われます。
例えば、ログイン状態に応じてボタンを切り替える、商品の在庫によって表示内容を変えるなど、日常的な画面づくりに役立つ場面はとても多いです。Bladeを使い始めたばかりの方は、まず@ifに慣れるだけでテンプレートが格段に書きやすくなります。
2. Bladeの@elseif・@elseも使える
複数の条件を分けたいときは、@elseifや@elseを使います。
@if ($score >= 80)
<p>優秀です!</p>
@elseif ($score >= 60)
<p>合格です!</p>
@else
<p>不合格です。</p>
@endif
このように条件ごとに違う内容を表示できます。
3. Bladeの@foreachディレクティブとは?
@foreachディレクティブは、LaravelのBladeテンプレートで「配列やコレクションの中身を順番に取り出して表示したい」ときに使う構文です。PHPのforeach文と同じ考え方ですが、HTMLの中にそのまま書けるので、画面用のテンプレートがとても読みやすくなります。商品一覧やユーザー一覧、ブログ記事の一覧など、「同じ形のパーツをずらっと並べる」場面で大活躍します。
まずは、果物のリストを表示するシンプルな例から見てみましょう。LaravelのBladeでよくある書き方です。
<ul>
@foreach ($fruits as $fruit)
<li>{{ $fruit }}</li>
@endforeach
</ul>
このコードでは、コントローラから渡された$fruitsという配列を、@foreachで一つずつ取り出して<li>タグの中に表示しています。たとえば$fruitsの中身が「りんご・バナナ・みかん」だった場合、画面には3行のリストが並びます。$fruitの部分には、配列から取り出された「今の1件分」が順番に入ってくる、とイメージすると分かりやすいです。
実際の画面づくりでは、果物の代わりに「ユーザー名」「商品のタイトル」「お知らせ一覧」など、さまざまなデータを@foreachでループ表示します。Bladeの@foreachを覚えておくと、「配列をそのままキレイなHTMLの一覧にする」というLaravelらしい書き方ができるようになります。
<ul>
@foreach ($users as $user)
<li>{{ $user->name }} さん</li>
@endforeach
</ul>
このように、@foreachは「配列やコレクションの件数分だけ、同じパターンのHTMLを繰り返し出力するための仕組み」です。プログラミング未経験の方も、「リストの人数分だけ同じ部品をコピーして並べてくれるもの」と考えると、LaravelのBladeテンプレートでの繰り返し処理のイメージがつかみやすくなります。
4. @forディレクティブの使い方
@forディレクティブは、LaravelのBladeテンプレートで「決まった回数だけ同じ処理を繰り返したい」ときに使う構文です。PHPのfor文と同じ考え方ですが、HTMLの中で自然に使えるのが特徴で、番号付きリストや特定回数の繰り返し表示をしたい場面でよく登場します。特に「1〜10までの数字を並べたい」「商品枠を5つだけ表示したい」など、明確な回数が決まっているときに便利です。
まずは基本の例を見てみましょう。初心者でも直感的に理解しやすいように、シンプルな番号のリストを作る例を使っています。
<ul>
@for ($i = 1; $i <= 5; $i++)
<li>番号: {{ $i }}</li>
@endfor
</ul>
このコードでは、$i が1からスタートし、5になるまで1ずつ増えながら処理を繰り返します。その結果、画面には「番号: 1」から「番号: 5」までが順番に表示されます。「i がいくつのときに動いているのか」がそのまま表示されるので、繰り返しの流れを理解しやすい構造になっています。
さらに、決まった数だけ枠を出したい場面でも@forは活躍します。たとえば、まだ商品データが揃っていなくても「5つ分の枠だけ作っておきたい」というケースです。
<div class="products">
@for ($i = 1; $i <= 3; $i++)
<div class="product-box">
商品枠 {{ $i }}
</div>
@endfor
</div>
このように、@forディレクティブは「決められた回数だけHTMLを繰り返す」ための便利な仕組みです。配列ではなく「回数」ベースで繰り返したいときは、まず@forを思い出すとスムーズに書けるようになります。
5. @whileディレクティブも使える
条件が真の間ずっと処理を繰り返したいときは、@whileを使います。
@php
$count = 1;
@endphp
<ul>
@while ($count <= 3)
<li>カウント: {{ $count }}</li>
@php
$count++;
@endphp
@endwhile
</ul>
この例では、$countが3以下の間、リストを表示しています。
6. @issetと@emptyの使い方
@issetは変数がセットされている(値がある)かを確認します。逆に@emptyは変数が空かどうかを調べます。
@isset($name)
<p>名前は{{ $name }}です。</p>
@endisset
@empty($items)
<p>アイテムはありません。</p>
@endempty
どちらも画面表示の条件分岐によく使います。
7. コメントを書くには{{-- --}}を使う
Bladeテンプレート内でコメントを書きたいときは、HTMLのコメントタグではなく、{{-- コメント内容 --}}を書きます。これによりコメントはブラウザに表示されません。
{{-- ここはコメントなので画面には表示されません --}}
8. @includeで部分テンプレートを呼び出す
共通のパーツを別のファイルに分けて使いたいときは、@include('ファイル名')で読み込みます。コードの重複を防ぎ、管理が楽になります。
@include('header')
<!-- 他の内容 -->
@include('footer')
9. Bladeのエスケープと非エスケープ表示
変数を表示するとき、通常は{{ $変数 }}でHTML特殊文字が自動でエスケープ(安全に表示)されます。
生のHTMLをそのまま表示したい場合は、{!! $変数 !!}と書きます。ただし安全性に注意が必要です。
10. ポイント整理
LaravelのBladeテンプレートは、@ifや@foreachなどのディレクティブを使うことで、PHPの条件分岐や繰り返し処理を簡単に書けます。HTMLとPHPを混ぜると複雑になりがちですが、Bladeなら読みやすく整理しやすいコードになります。
基本的なディレクティブをマスターして、効率よくLaravelのビューを作ってみてください。
まとめ
LaravelのBladeテンプレートで使用される@ifや@foreachなどのディレクティブは、条件分岐や繰り返しを視覚的にも理解しやすい形で記述でき、複雑な処理を直感的に整理しながら画面構築できる大きな利点があります。これらの構文は、ふだんPHPで行うロジックをより滑らかにテンプレートへ統合し、見やすいビューを保ちながら柔軟な表示制御を実現するために役立ちます。また、BladeはHTMLとの相性が良いため、テンプレートを編集する際に複雑さを感じにくく、画面の構造を把握しやすいという安心感があります。特に@ifディレクティブは、得点の判定や状態確認などで頻繁に利用され、@elseifや@elseと組み合わせることで多段階の条件分岐にも自然な形で対応できます。こうしたディレクティブの理解が進むと、複数の条件に応じたメッセージ表示や出し分けを容易に行えるようになり、ページ全体の完成度が大きく向上します。 さらに、繰り返し処理を行う@foreachディレクティブは、配列やリストを柔軟に展開しながら画面へ反映するのに役立ち、一覧表示や要素の反復に特に適しています。業務システムの一覧画面や、商品リストなどの動的コンテンツ表示において非常に役立ち、Blade特有の簡潔な記述により見通しよくコーディングできます。これらに加えて@forや@whileなどの繰り返し構文を併用することで、決まった回数のループや条件付きの反復処理も直感的に記述可能です。また、変数が存在するかを確認する@issetや、空かどうか判断する@emptyは、入力フォームやデータの有無に応じて表示内容を切り替えたい場面で重要な役割を果たします。 Bladeテンプレートには@includeによる部分テンプレートの読み込みも用意されており、ヘッダーやフッター、共通パーツを別ファイル化して管理しやすくできるため、大規模な画面構成でも統一感のあるコードが保てます。テンプレートを分割すれば、後から修正が必要になった場合でも変更箇所が明確になり、効率的にメンテナンスを行えるメリットがあります。また、HTMLエスケープと非エスケープ表示の違いも重要で、{{ }}と{!! !!}を正しく使い分けることで安全性を確保しつつ、必要な箇所では意図した通りの画面表現ができます。 Bladeを自在に扱うためには、まず基本ディレクティブの動きを自分の手で試しながら理解を深め、実際のページに適用してみることがとても効果的です。テンプレート構築の基礎が身につくと、自分の中で自然にパターン化され、複雑なレイアウトや条件分岐にも迷わず対応できるようになります。以下はBladeのディレクティブを組み合わせた簡単なサンプルです。画面の構造や条件に応じた表示を作る流れを再確認できる内容になっています。
{{-- データの状態に応じて表示内容を切り替えるサンプル --}}
<div class="card p-3">
@if ($level >= 80)
<p class="fw-bold text-success">とても優秀なスコアです!</p>
@elseif ($level >= 60)
<p class="fw-bold text-primary">必要条件を満たしています。</p>
@else
<p class="fw-bold text-danger">もうすこし頑張りましょう。</p>
@endif
<ul class="mt-3">
@foreach ($items as $item)
<li>{{ $item }}</li>
@endforeach
</ul>
@include('shared.notice')
</div>
Bladeディレクティブは、一見すると単純な文法の組み合わせに見えますが、画面設計では欠かせない柔軟性と統一性を与えてくれます。どのディレクティブも、ビューを見やすく整理しながら動的な要素を自然に扱えるという強みを持ち、Laravelを利用した開発の中でも非常に重要な役割を果たします。基本をしっかり身につけることで、複雑な画面やアプリケーションの構成にも対応しやすくなり、Laravelをより快適に扱えるようになります。これから実際にテンプレートを作成する際には、ここで学んだ@if、@foreach、@isset、@empty、@includeなどの構文を組み合わせ、わかりやすく整った画面作成へとつなげていってください。
生徒:「Bladeの@ifや@foreachって、こんなに便利に使えるんですね。ビューの整理がとても楽になりそうです!」
先生:「そうですね。特に条件分岐や繰り返しが自然に書けるので、HTMLとロジックの調和が取りやすくなりますよ。」
生徒:「@includeがあると共通パーツを分けて管理できるので、大きな画面を作るときにも安心ですね。」
先生:「その通りです。Bladeは構造を整える力が強いので、慣れてくると作業がどんどん効率的になります。」
生徒:「これからは@ifや@foreachを積極的に使いながら、読みやすいビューを作れるようになりたいです!」
先生:「とても良い心がけですね。実際に使いながら覚えていくと理解が深まりますよ。」