ウェブデザイン・プログラム 使えるツール紹介

PHPテンプレートエンジンまとめ 一覧と構文例(随時追加中)

データベースから引き出したデータはなるべくきれいに表示したいものです。

とはいえ、いまどきechoを使いまくってPHP内からデータを書き出すのはナンセンスです。MVCの分担もできません。

そんなときにはテンプレートエンジン!!

データを渡せば簡潔な記述でhtmlに変換してくれます。また、コードとデザインを明確に分けることもでき、複数人での作業分担もできます。ということで今日はPHPのテンプレートエンジンをまとめてみました。

すごい数が出ていますので、とりあえず一覧と例文を載せておきます。(すべて試している訳ではありませんし知識も低いので、間違いがありましたらツイッターなどでご指摘ください)

テンプレートエンジンまとめ

有名どころはBlade、Twig、Smarty、PHPTALあたりでしょうか。

ちなみにぼくはBladeとDIVを愛用しています。BladeはLaravelと相性が良いから。DIVは1ファイル完結なので組み込みやすく、干渉しないので、たとえばWordPressの管理画面などで威力を発揮します。

どれも一長一短がありますので、あなたのコーディングスタイルに合っているものを選んでください。

おすすめエンジン

  • Blade・・・Laravel標準。拡張が柔軟。いい意味で半完成。
  • Twig・・・構文がきれい。PHPを感じさせないラッピング。自前メソッドは事前登録が必要で、拡張しづらい。
  • DIV・・・たった1ファイルで完結。局所使用に便利。大規模には向かない。
  • Smarty・・・万能。日本の利用者も多い。機能が多いゆえに重い。

2016.8.23追記 Laravel標準搭載のBladeを追加。

2016.9.5追記 Skinny、Foil、fenom、Latte、Voltを追加。


Blade

発音:ブレイド

Laravel標準搭載のテンプレートエンジン

{{ $x }}で変数を表示、@if~@endif などで分岐やループを呼びます。拡張子は「.blade.php」。

Laravelを使うなら、結局Bladeを使うのが一番ラク。

テンプレート中にいきなり<?php ~?>構文を書くことで、素のPHPを呼び出してしまえます。そのため、Twigのように使いたいメソッドを事前にエンジンに登録する必要がなく、かなり柔軟。Twigほどラッピングせず、かつ面倒な出力メソッドを隠ぺいした感じ。

TwigやSmartyと違い、クラス変数とarrayは明確に分かれており、PHPと同じように書く。なんでも「.」で書けるTwigとはここが大きく違う。(クラス変数は$a->abc、arrayは$a[‘abc’])

継承やincludeなども完備しています。

PackagistにBlade単体で使えるライブラリもある。(ただし依存ライブラリ多め 6MBほど) > https://packagist.org/packages/duncan3dc/blade

 

Dwoo

発音:ドゥー

html内で、{ }を使いphpの変数をそのままくくって出力する感じ。

 

PHPTAL – PHP Template Attribute Language

発音:ピーエイチピー タル

htmlに新たなタグ(<% %>など)を埋め込むのではなく、htmlの属性に命令を記述する。そのためどのブラウザでもプレビューが正確になるのが一番の長所。

しかし補完してくれるエディタがないと、書くのが非常に面倒。さらにHTMLが大量になってくると属性だらけで見づらくなってくる。

 

ググってもググってもググってもさっぱりわからねぇ

 

いや~もうめっちゃわかんねぇ。本気でわかんねぇ。コーヒー5杯飲んでもわかんねぇ。髪の毛マジ抜ける。終電もう行ったし。さて、画面でも割るか!

   

おまちください!その絶望コードを投げ込むと神が答えてくれる(可能性が高い)エンジニア特化型Q&Aサイト「teratail」

こんな質問がされています!
  • htmlファイルの絶対パスをJSへ渡す方法 [1 件の回答]
  • paypal決済導入について
  • php 指定したディレクトリ内のフォルダが空だったらフォルダ削除 [1 件の回答]
  • PHP ページネーション 10件づつ表示 [2 件の回答]
  • 関数Aで定義した変数を関数Bに持っていく方法がわかりません [2 件の回答]
  • PHPで入力フォームを中央寄せで表示したい [1 件の回答]
  • PHPでカレンダーを作成しているのですが・・・ [2 件の回答]
  • xserverのmysqlにphpからログインしたい [1 件の回答]
気になる質問があったらいますぐteratailへ [無料です]

 

haml

発音:ハムル

Wikiのような独自の記法を使ってhtmlを生成する。タグの構成をインデントで表現する、Yamlのような書き方。(たぶん名前もここから来ている)

テンプレートというよりはHTMLを手書きで作る、メタ言語的立場。Markdownと同類。

そのため閉じタグを書き忘れることはあり得ないのが利点。また、複雑なHTMLの構造が非常に見やすくなり、余分なタグや構造の問題(pの中にdivがあるような)を見つけやすくなる。

コマンドラインのコンパイラあり。GruntやGulpなどと組み合わせている人も多い。

 

jade

発音:ジェイド

hamlと似たような、階層型の記法を使う。JAVA Script(JST)系にて採用例多し。

 

Div PHP Template Engine

発音:ディブ

1ファイルで完結するテンプレートエンジン

機能が絞られているが、軽いテンプレート処理には十分に使える。機能は、判定、ループ、出力などに絞られており、継承やincludeなどはありません。Smartyよりも構文がシンプルなのが特長。

WordPressのプラグインの中で使ったり、ほんの小さなPHPスクリプトの出力に使ったりと、小回りが利く。他のエンジンが自動車なら、DIVは自転車のような感じ。

呼び出し:

 

テンプレート(基本拡張子は.tpl 拡張子は自由):

 

Volt

発音:ボルト

Phalcon系で標準採用されているテンプレートエンジン。{{~}}で出力、{%~%}でメソッドの実行。変数のアクセスはTwigに似ている。

大規模開発にも対応しているので、継承やインクルードなども充実している。

 

Rain.TPL(開発終了?ページ消滅)

発音:レインティーピーエル

ワンファイルで完結する軽量テンプレートエンジン。比較的絞られた機能だが、キャッシュ処理なども搭載する。が、現在は開発ページも行方不明で、実質消滅したとみられる。

 

Markdown

PHPだけでなく、メモや表記として広く使われる記法。PHPで変換出力可能。(外部ライブラリ必要)

hamlと同じくHTMLを生成するためのメタ言語的立場。GitHubのREADMEなどで標準採用されているので、一通り覚えておくといろいろ使える。ちなみに当サイトの原稿はMarkdownで書いています。(どうでもいいですね)

コマンドラインのコンパイラあり。GruntやGulpと組み合わせる人も多い。

Markdownコンパイラを内蔵したエディタもあります。(Windows : Markdown Pad 2、Mac Mouなどが有名。Sublime Text、VS Codeでもプラグインが存在)

 

mustache

発音:マスタッシュ

htmlの中に二重の{{ ~ }}を使い変数を組み込んでいく。

変数だけではなく、ループや判定も{{~}}のくくりになるのが特殊。そのため一目では変数なのかメソッドなのか分かりづらい。

 

 

Twig

発音:ツイグ

かなり活発な開発が続いているテンプレートエンジン。{{ ~ }}で変数の出力、{% ~ %}で判定やメソッドを書く。

フィルタ」と呼ばれる多数の処理が組み込まれていて、Twigだけでかなりの変形処理ができる。たとえばHTMLエスケープはPHP側で処理しなくても、{{ var | escape }}と書くだけでOK。非常に便利。

PHPを大きくラッピングしており、Twigだけでもかなりのレベルまで処理ができる。しかも表記は見やすく、きれい。

ただ、オリジナルメソッドや定義されていないメソッドを使いたいときは、事前にエンジンへの登録が必要で、そのような状況ではコード側が煩雑になる場合もある。もし定義されていないメソッドが多い場合は、Bladeがおすすめ。

 

Smarty

発音:スマーティ

かなり多くの開発者が使っている、歴史の長い高機能テンプレートエンジン。日本人の利用者、貢献者が多いのも特長。

高機能が故にソースは他に比べてかなり大型。もちろんマニュアルも長大。

しかし多くの技術と文献が集積されているので、あらゆる状況において参考文献があり、答えられる人も多い。これからも使いやすいエンジンの一つであろうと思う。また文献も日本語のものが多いのがうれしい。

{ } でくくった部分が変換される。

 

FastTemplate(公式ページ不明?)

発音:ファストテンプレート

軽量、スピードがウリのテンプレートエンジン。
構文はhtml内で{ }でくくるタイプ。

公式ページが行方不明。クローンはいくつか出ている模様。

 

Skinny

発音:スキニー

日本発のテンプレートエンジンと銘打ち、シンプル、1ファイルを実現しているテンプレートエンジン。

日本人が開発しているため、文字コードの扱いにこだわりがあるのが特長。PHP内 / テンプレート内 / ブラウザ出力でそれぞれ文字コードが設定できる。古いEUC-JPのDBなどがある場合は、非常に助かりそう。

テンプレート拡張子は.htmlで、出力したい部分に<% ~ %>のタグでくくった命令を書いていく。

1ファイルにも関わらずキャッシュ処理も搭載している。うまく使うことで2~10倍の高速処理が可能とうたわれている。

なぜか他のテンプレートエンジンでは真っ先に対応しているechoの代替タグがない。一番たくさん使うものなので、ぜひ装備してほしい。

 

fenom

発音:フェノム

Smartyの構文に近い、軽量エンジン。PSR-0に対応しており、オートロードに対応しているも特長。

テンプレートの拡張子も.tplでSmartyと揃えられているので、Smartyに慣れているけどSmartyを導入するほどでもない、小規模な部分に使えそう。

 

ググってもググってもググってもさっぱりわからねぇ

 

いや~もうめっちゃわかんねぇ。本気でわかんねぇ。コーヒー5杯飲んでもわかんねぇ。髪の毛マジ抜ける。終電もう行ったし。さて、画面でも割るか!

   

おまちください!その絶望コードを投げ込むと神が答えてくれる(可能性が高い)エンジニア特化型Q&Aサイト「teratail」

こんな質問がされています!
  • htmlファイルの絶対パスをJSへ渡す方法 [1 件の回答]
  • paypal決済導入について
  • php 指定したディレクトリ内のフォルダが空だったらフォルダ削除 [1 件の回答]
  • PHP ページネーション 10件づつ表示 [2 件の回答]
  • 関数Aで定義した変数を関数Bに持っていく方法がわかりません [2 件の回答]
  • PHPで入力フォームを中央寄せで表示したい [1 件の回答]
  • PHPでカレンダーを作成しているのですが・・・ [2 件の回答]
  • xserverのmysqlにphpからログインしたい [1 件の回答]
気になる質問があったらいますぐteratailへ [無料です]

 

Foil

発音:フォイル

BladeやTwigに影響を受けたとされる軽量エンジン。テンプレートは.phpにHTMLを書いていくような感じ。

個人的な感想だが、ほとんどラッピングが行われていないので、単純なPHPファイルとあんまり違わない気がする。既存のベタPHPファイルと置き換えるのは手軽かも。

セクションや継承などは使える。

 

Plates

発音:プレーツ

PHPをそのまま拡張したような形で、新しい構文を学ぶ必要がない、とされています。PSR-0のオートロードに対応。

確かにテンプレートはそのままPHPな感じで、echoは<?php echo ~か、<?= ~のショートタグとなります。これもFoilと同じで、普通のPHPファイルとあまり大差がなく、使いどころがイマイチわからない。

継承やセクションなどの機能もあります。

 

Latte

発音:ラテ

高速、シンプルなテンプレートエンジン。PHP拡張型。

独自の繰り返し構文や判定構文を「マクロ」として登録してあり、変数を判定しながらの出力もカンタンそう。

マクロ例

 

ShellPage

発音:シェルページ

サイト全体を一つのClassとして管理し、データの送り先クラスを変えることでサイトイメージを一気に変えるという使い方。

 

STP Simple Template Parser

発音:エスティーピー

名前の通りシンプルなテンプレートエンジン。とはいえ説明ページがNot Foundになっていて例文が読めず。

bTemplate

発音:ビーテンプレート

たった1ファイルで構成された非常にシンプルなテンプレートエンジン。ほんのちょっとした出力に使えます。ただし使い込むには制限が多い。1ファイルタイプならDIVがオススメ。

<tag>という専用のタグを使い、属性に変数名を書いていく。

 

Savant

発音:サーヴァント

PHPの出力を拡張するという感じのテンプレートエンジン。書き出したい位置に<?php  ?>でくくってそのままPHPを書きます。

テンプレートエンジンという感じはあまりしない気が・・・

 

ETS easy template system

発音:イーティーエス

{ }を使ったテンプレートエンジン。変換の開始位置やループの開始位置に、{mask}という構文を置くのが特徴。

 

vlib Template

発音:ブイリブテンプレート

{  }内にtmpl_varなどから始まる構文を書く。

 

AvanTemplate

発音:アヴァンテンプレート

1ファイルで構成されたテンプレートエンジン。[ ]で囲む構文を使う。bTemplateよりも条件分岐構文などが充実している感じ。

ただ更新は2001年で途絶えており、PHPの構文も古く、実質終了していると感じられる。

以下調査中・・・

 

かなりすっきりわかりやすい!PHPの基礎を身につける良書