Blade は、Laravel で画面テンプレートを組み立てるためのテンプレートエンジンです。 HTML の中に条件分岐やループ、レイアウト継承を書けるようにして、画面を整理しやすくします。
まず押さえたいポイント
- 一覧・詳細・フォームのような、サーバー側で組み立てるページで中心になる
@extendsと@sectionによるレイアウト継承で、共通部分をまとめられる{{ }}は自動でHTMLエスケープされる
セキュリティで唯一気をつける記法
Blade の {{ $value }} は自動エスケープされるため、通常はそのまま書けば XSS になりません。危険なのは、エスケープを外す {!! $value !!} の方です。
Markdown 本文をHTMLに変換して表示する、といった理由でこれを使う場面はありますが、ユーザーが入力した値をそのまま {!! !!} に流すのは事故そのものです。使うなら、HTMLを組み立てる側で許可タグを絞ってから渡します。
ループの中でDBを触らない
Blade の中で関連データを参照すると、テンプレート側から Eloquent のクエリが1件ずつ飛びます。画面のコードだけ見ても気づきにくいため、N+1 の温床になりやすい場所です。取得はコントローラ側でまとめ、Blade は表示に徹する形が安全です。
本番で見落としやすい運用の罠
Blade は毎回コンパイルされるのではなく、コンパイル済みのビューがキャッシュされます。本番で php artisan view:cache を使っている場合、テンプレートを更新してもキャッシュを作り直すまで表示は変わりません。「デプロイしたのに画面が古いまま」の原因はたいていこれです。当サイトでも Blade を触ったデプロイでは必ず view:cache を打ち直しています。
実務で見るポイント
- 管理画面や業務画面のようなサーバーレンダリングと相性がよい
- フロントを完全分離する構成では役割が薄くなる。判断は案件規模と体制で決める
- Laravel 全体の向き不向きはLaravelとは?を参照