カテゴリ: Symfony 更新日: 2026/02/17

Twigのif文とfor文を完全ガイド!初心者でもわかる条件分岐とループ処理

Twigの条件分岐とループ処理の書き方
Twigの条件分岐とループ処理の書き方

先生と生徒の会話形式で理解しよう

生徒

「Twigのテンプレートで、条件によって表示を変えたり、繰り返し表示したりできますか?」

先生

「はい、Twigにはif文for文があって、条件分岐やループ処理が簡単に書けますよ。」

生徒

「それってプログラムみたいですね。初心者でも使えますか?」

先生

「もちろんです。Twigは初心者でも使いやすいテンプレート言語なので、やさしく解説していきますね!」

1. Twigで条件分岐をする方法(if文)

1. Twigで条件分岐をする方法(if文)
1. Twigで条件分岐をする方法(if文)

Webサイトを作っていると、「ログインしている人にはマイページへのリンクを、そうでない人にはログインボタンを表示したい」といった場面がよくあります。このように、特定の条件に合わせて表示を切り替える仕組みを「条件分岐」と呼び、Twigではif文を使って簡単に実現できます。

プログラミングが初めての方でも安心してください。基本の形は「もし〜なら(if)」「そうでなければ(else)」という非常にシンプルな英語のルールで構成されています。

基本の書き方とサンプルコード

まずは、ユーザーがログインしているかどうかを判定する、最も一般的なサンプルを見てみましょう。


{% if user %}
  <p>ようこそ、{{ user.name }}さん!</p>
{% else %}
  <p>ゲストさん、こんにちは!ログインしてください。</p>
{% endif %}

ここがポイント!解説と実行結果

Twigのif文には、書き方の決まり(構文)があります。

  • 開始と終了: {% if ... %}で始まり、必ず{% endif %}で閉じます。これを忘れるとエラーになるので注意しましょう。
  • elseの役割: 条件に当てはまらなかった(偽:false)場合の表示を指定できます。
  • 読みやすさ: PHPのように括弧 () や波括弧 {} を多用しないため、HTMLの中に書いてもコードがスッキリして見やすいのが特徴です。

もしuserというデータが存在する場合、ブラウザには次のように出力されます。


ようこそ、田中さん!

反対に、ログインしていない(データが空の)場合は、else以降の処理が実行されます。


ゲストさん、こんにちは!ログインしてください。

このように、一つのテンプレートファイルだけで、状況に応じた柔軟なページ作りができるようになります。PHPのif文よりも直感的で、デザイナーさんや初心者の方にも扱いやすい設計になっています。

2. Twigで繰り返し処理をする方法(for文)

2. Twigで繰り返し処理をする方法(for文)
2. Twigで繰り返し処理をする方法(for文)

次に、Twigのfor文を使って、リストや配列の中身を順番に表示する方法を紹介します。これは「ループ処理」と呼ばれるものです。

たとえば、商品一覧やメッセージの一覧を画面に表示するときに便利です。


<ul>
  {% for item in items %}
    <li>{{ item }}</li>
  {% endfor %}
</ul>

この例では、itemsという配列の中身を1つずつ取り出して、itemとして表示しています。

3. Twigの条件文で使える演算子

3. Twigの条件文で使える演算子
3. Twigの条件文で使える演算子

Twigでは、if文の中で次のような演算子(条件を比べる記号)を使うことができます。

  • ==(等しい)
  • !=(等しくない)
  • >(より大きい)
  • <(より小さい)
  • in(含まれている)

たとえば、ある商品が在庫切れかどうかをチェックしたい場合は、次のように書きます。


{% if stock == 0 %}
  <p>在庫切れです</p>
{% endif %}

4. Twigのループ内で使える便利な変数

4. Twigのループ内で使える便利な変数
4. Twigのループ内で使える便利な変数

forループの中では、loopという特別な変数が自動で使えるようになります。これを使うと、ループの回数や最初・最後の判定などができます。


<ul>
  {% for user in users %}
    <li>
      {{ loop.index }}番目のユーザー:{{ user.name }}
      {% if loop.first %}(最初の人){% endif %}
      {% if loop.last %}(最後の人){% endif %}
    </li>
  {% endfor %}
</ul>

このように、loop.indexは現在のループの番号(1から始まる)を表し、loop.firstloop.lastで最初や最後の要素かどうかを判定できます。

5. Twigの空データへの対応(ループのelse)

5. Twigの空データへの対応(ループのelse)
5. Twigの空データへの対応(ループのelse)

ループ処理をするとき、データが空の場合に何も表示されないと困りますよね。Twigではforループのあとにelseを使うことで、データが空だった場合の処理も書けます。


<ul>
  {% for item in items %}
    <li>{{ item }}</li>
  {% else %}
    <li>データがありません</li>
  {% endfor %}
</ul>

このように、itemsが空ならelseの中が実行されます。とても便利ですね。

6. Twigで条件とループを組み合わせる

6. Twigで条件とループを組み合わせる
6. Twigで条件とループを組み合わせる

実際の画面では、「ループの中で特定の条件が一致したら何かを表示する」といった複雑な処理もよくあります。Twigではifforを組み合わせることも簡単です。


<ul>
  {% for product in products %}
    {% if product.stock > 0 %}
      <li>{{ product.name }}:在庫あり</li>
    {% else %}
      <li>{{ product.name }}:在庫なし</li>
    {% endif %}
  {% endfor %}
</ul>

このように、商品ごとに在庫があるかどうかをチェックして、表示内容を変えることができます。

7. 実行結果のイメージ

7. 実行結果のイメージ
7. 実行結果のイメージ

例えば、次のような配列items = ['りんご', 'バナナ', 'みかん']をTwigでループしたときの出力結果は次のようになります。


<ul>
  <li>りんご</li>
  <li>バナナ</li>
  <li>みかん</li>
</ul>

Twigでは、HTMLと組み合わせて自由にレイアウトを作れるので、テンプレートエンジンとして非常に使いやすいのです。

まとめ

まとめ
まとめ

今回の記事では、PHPのテンプレートエンジンであるTwig(ツイッグ)の中でも、特に使用頻度が高い「if文による条件分岐」と「for文による繰り返し処理(ループ)」について詳しく解説してきました。WebサイトやWebアプリケーションを制作する際、ユーザーのログイン状態やデータの有無、あるいはデータベースから取得したリストの表示などは欠かせない要素です。

Twigを使う最大のメリットは、PHPのロジックとHTMLのデザインをきれいに分離できる点にあります。従来のPHPによる記述(<?php if(...): ?> など)と比較しても、Twigの構文は非常にシンプルで読みやすく、デザイナーとエンジニアが共同作業を行う現場でも重宝されています。

Twigの制御構文のポイント

ここで、今回学んだ重要なポイントを再確認しておきましょう。まず、条件分岐(if文)では、{% if %}{% elseif %}{% else %}{% endif %}という一連の流れをセットで覚えることが大切です。特に、終了タグである{% endif %}を忘れると構文エラー(Syntax Error)になってしまうため、注意が必要です。

繰り返し処理(for文)においては、{% for 変数 in 配列 %}という形でデータを1つずつ取り出します。このとき、データが空だった場合の処理を{% else %}で記述できる機能は、Twig独自の非常に強力なツールです。これを使えば、「該当するデータが見つかりませんでした」といったメッセージをスマートに表示できます。

実践的なサンプルコード:ニュース一覧の実装

より実践に近い形で、ニュース記事の一覧を表示するテンプレートを想定してみましょう。タイトルが存在する場合のみ表示し、最新の3件には「NEW」というラベルを付け、さらに記事が1件もない場合の処理も組み込んでみます。


<div class="news-container">
    <h2 class="news-title">最新のお知らせ</h2>
    <ul class="news-list">
        {% for article in articles %}
            <li class="news-item">
                <span class="date">{{ article.published_at }}</span>
                <a href="/news/{{ article.id }}">{{ article.title }}</a>
                
                {# 最初の3件にのみNEWバッジを表示する #}
                {% if loop.index <= 3 %}
                    <span class="badge">NEW!</span>
                {% endif %}
                
                {# 特定のカテゴリ(例えば重要)の場合の条件分岐 #}
                {% if article.category == 'important' %}
                    <strong style="color: red;">[重要]</strong>
                {% endif %}
            </li>
        {% else %}
            <li class="no-data">現在、掲載中のお知らせはありません。</li>
        {% endfor %}
    </ul>
</div>

上記のコードでは、loop.indexという便利な変数を使用しています。これはループが何回回ったかをカウントしてくれるもので、ランキング形式の表示や、特定の順番の要素だけにスタイルを適用したいときに非常に役立ちます。

PHP側でのデータ準備例

ちなみに、Twigテンプレートに渡すPHP側のデータ構造は、一般的に以下のような多次元配列やオブジェクトになります。開発環境を構築する際の参考にしてください。


$articles = [
    [
        'id' => 101,
        'title' => '新機能のリリースについて',
        'published_at' => '2026-01-20',
        'category' => 'info'
    ],
    [
        'id' => 102,
        'title' => 'システムメンテナンスのお知らせ',
        'published_at' => '2026-01-25',
        'category' => 'important'
    ]
];

echo $twig->render('news.html.twig', ['articles' => $articles]);

ステップアップのためのヒント

Twigの基礎をマスターしたら、次は「フィルタ(Filters)」や「関数(Functions)」についても調べてみてください。例えば、日付のフォーマットを整形する|dateフィルタや、文字列の長さを制限する|sliceフィルタなどを組み合わせることで、テンプレートの表現力は格段に上がります。

また、複雑な条件分岐が必要になった場合は、PHP側でロジックを整理してからテンプレートに渡すように心がけると、コードの保守性が高まります。テンプレートはあくまで「表示のためのロジック」に留めるのが、美しい設計のコツです。

今回の内容を理解すれば、Twigを使った開発の第一歩は完璧です。まずは自分で小さなリスト表示やプロフィールの切り替え表示などを作成してみて、少しずつ慣れていきましょう!

先生と生徒の振り返り会話

生徒

「先生、Twigのif文とfor文について詳しく教えていただきありがとうございました!{% endif %}{% endfor %}でしっかり閉じるのがポイントなんですね。」

先生

「その通りです。HTMLのタグを閉じるのと同じ感覚で、Twigの命令も閉じ忘れないようにしましょう。慣れてくると、PHPのコードを直接埋め込むよりもずっと読みやすく感じるはずですよ。」

生徒

「特に驚いたのは、forループの中でelseが使えることです。PHPだと、まずデータがあるかcount()とかで確認してからループを回す必要があるのに、Twigなら一気に書けるから楽ですね!」

先生

「いいところに気づきましたね。データがゼロ件のときの処理はWeb開発で頻繁に発生するので、Twigのその機能は本当に便利なんです。あと、loop.indexなどのループ変数も使いこなせれば、デザインの幅が広がりますよ。」

生徒

loop.indexを使えば、1番目、2番目といった順番に応じた表示が簡単にできるんですね。これを使って、次はブログの記事一覧を作ってみようと思います!」

先生

「素晴らしい意気込みですね。もし途中でわからなくなったら、いつでもこのガイドを読み返してください。実際に手を動かしてコードを書くことが、上達への一番の近道ですからね。頑張ってください!」

生徒

「はい!もっとTwigを使いこなせるように練習します。ありがとうございました!」

関連記事:
カテゴリの一覧へ
新着記事
New1
CodeIgniter
CodeIgniterでRESTful API開発!初心者でもわかる全体構成ガイド
New2
Symfony
Symfonyのコントローラとは?作成・構造・役割を初心者向けにやさしく解説!
New3
Symfony
Symfonyでバリデーションメッセージを多言語対応する方法!初心者でもわかる国際化の基本
New4
Symfony
Symfonyのキャッシュ機構の基本を理解しよう(HTTPとアプリ別)
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのシングルアクションコントローラとは?使い方と利点
No.2
Java&Spring記事人気No2
Laravel
Laravelで動的パラメータをルートに渡す方法!初心者にもやさしいルートパラメータの使い方入門
No.3
Java&Spring記事人気No3
Laravel
LaravelのBlade構文まとめ!@if @foreach など基本ディレクティブ解説
No.4
Java&Spring記事人気No4
Laravel
Laravelでキャッシュを使う方法(ファイル・Redis・Memcached)
No.5
Java&Spring記事人気No5
Laravel
Laravelで名前付きルートを設定する方法!初心者でもわかるroute()関数の使い方
No.6
Java&Spring記事人気No6
Symfony
Symfonyの依存性注入(DI)とは?コンストラクタでの注入方法を初心者向けに徹底解説
No.7
Java&Spring記事人気No7
Laravel
Laravelのマイグレーション履歴を確認する方法を徹底解説!migrate:statusの使い方
No.8
Java&Spring記事人気No8
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方