Twigのテンプレート分割と再利用を完全解説!初心者向けinclude・embedの使い方
生徒
「Twigのテンプレートが長くなってきたので、整理したいんですけど、どうすればいいですか?」
先生
「そんな時は、テンプレートの分割と再利用が便利ですよ。Twigにはincludeやembedという便利な機能があります。」
生徒
「それってHTMLの部品を分けるみたいな感じですか?」
先生
「まさにそのとおり!では、Twigでテンプレートを分割して再利用する方法を一緒に見ていきましょう。」
1. Twigでテンプレートを分割する理由とは?
Symfonyでは、Twigを使ってHTMLテンプレートを作成しますが、画面が複雑になると1つのファイルがとても長くなってしまいます。これでは修正もしづらく、読みづらいコードになってしまいます。
そこでTwigのincludeやembedを使うことで、テンプレートを部品ごとに分けて、再利用可能にすることができます。
2. includeの使い方:テンプレートを読み込む基本
includeは、別のテンプレートファイルをその場に読み込んで表示するための構文です。たとえば、ヘッダー部分だけを別ファイルにしておき、必要なところで読み込むことができます。
次のように使います。
{% include 'partials/header.html.twig' %}
このコードは、partials/header.html.twigというテンプレートを現在の位置に挿入するという意味です。
3. 実際にテンプレートを分割してみよう
たとえば、ヘッダー・フッター・ナビゲーションを分割する場合、以下のような構成になります。
<!-- layout.html.twig -->
<html>
<body>
{% include 'partials/header.html.twig' %}
{% include 'partials/nav.html.twig' %}
<main>
{% block content %}{% endblock %}
</main>
{% include 'partials/footer.html.twig' %}
</body>
</html>
これで、共通部分を一か所にまとめて管理できるようになります。
4. embedとは?includeより少し便利な構文
embedはincludeに似ていますが、読み込んだテンプレートの中のblockを上書きしてカスタマイズできる点が特徴です。
つまり、「元の部品の構造は使いつつ、一部だけ変えたい」という場合に便利です。
次のように使います。
{% embed 'components/card.html.twig' %}
{% block title %}お知らせ{% endblock %}
{% block content %}新機能をリリースしました。{% endblock %}
{% endembed %}
このように書くと、card.html.twigの中に定義されたblock titleとblock contentの内容を、上書きして使うことができます。
5. embedを使ったカスタマイズ可能なパーツの例
例えば、components/card.html.twigが次のように書かれているとします。
<div class="card mb-3">
<div class="card-header">
{% block title %}デフォルトタイトル{% endblock %}
</div>
<div class="card-body">
{% block content %}デフォルト内容{% endblock %}
</div>
</div>
この構成をベースにしつつ、表示内容だけを差し替えられるので、共通パーツを大量に使う場合でも非常に便利です。
6. includeとembedの使い分け
簡単にまとめると次のように使い分けるのがおすすめです。
- include:そのまま表示すればOKな部品(ヘッダー、フッターなど)
- embed:内容を一部だけ変更したい部品(カード、通知ボックスなど)
特に大規模なWebアプリでは、共通パーツの再利用が重要になるので、この2つの使い分けはしっかり覚えておきましょう。
7. Twigで再利用可能なデザインを作るメリット
Twigでテンプレートを分割して再利用することで、次のようなメリットがあります。
- テンプレートの見通しがよくなる
- 修正が一箇所で済む(再利用されているため)
- 開発スピードが上がる
- HTMLの重複を減らせる
これはまさに「部品化」された設計で、初心者でも扱いやすく、プロジェクトが大きくなっても崩れにくいのが魅力です。