Otsuka Yuhi
猫に支配されつつあるフロントエンドエンジニアです。スクラムマスターとかもやったりします。ゆめみという会社で働いています。趣味はエレキベースです。スラップ楽しい。
Pugは、JavaScriptのテンプレートエンジンです。
もともとJadeという名前でしたが、商標の問題でPugになりました。
拡張子は.pugです。
EJSも、JavaScriptのテンプレートエンジンです。
Pugには閉じタグがありません。階層はインデントで表現します。
section#foo_01
h2.title タイトル
p.txet テキストテキスト
img(src="./foo.jpg", alt="foo")
<section id="foo_01">
<h2 class="title">タイトル</h2>
<p class="text">テキストテキスト</p>
<img src="./foo.jpg" alt="foo">
</section>
Pug
HTML
Pugの最大のメリットは、タグの閉じ忘れが絶対に無いこと!
(記述に間違いがあると、エラーでコンパイルが通らない)
Github star | 17,302 | 2,830 |
npm weekly downloads | 54,926 | 487,851 |
Github starはPugの方が多いですが、
npm weekly downloadsを見ると、EJSのほうが多いです。
PugとEJSとで、変数のスコープが違う等はありますが、基本的にできることはそんなに違いません。
In JavaScript | ○ | ○ |
includes | ○ | ○ |
block and extends | ○ | × |
extendsでPugファイルを継承し、blockで部分的な上書きをすることができます。
layout.pug
top.pug
about.pug
header
footer
block
block
block
トップページ
アバウトページ
extends
extends
top.html
header
footer
トップページ
about.html
header
footer
アバウトページ
includesは、こう。
header
footer
includes
top.html
header
footer
トップページ
about.html
header
footer
アバウトページ
top.pug
トップページ
header.pug
footer.pug
header
footer
about.pug
アバウトページ
header
footer
In JavaScriptに焦点を当て、以下の内容をPugとEJSで比較してみましょう。
- const text = "テキスト";
.foo
p.foo_txt #{text}
<%_ const text = "テキスト" _%>
<div class="foo">
<p class="foo_txt"><%= text %></p>
</div>
Pug
EJS
<div class="foo">
<p class="foo_txt">テキスト</p>
</div>
HTML
- const array = ['aaa', 'bbb', 'ccc'];
ul
each value in array
li #{value}
<%_ const array = ['aaa', 'bbb', 'ccc'] _%>
<ul>
<% array.forEach(function(value) { %>
<li><%= value %></li>
<% }); %>
</ul>
Pug
EJS
<ul>
<li>aaa</li>
<li>bbb</li>
<li>ccc</li>
</ul>
HTML
- const page = "top";
section
if (page === "top")
h1 トップページ
else
h1 下層ページ
<%_ const page = "top" _%>
<section>
<%_ if (page === "top") { _%>
<h1>トップページ</h1>
<%_ } else { _%>
<h1>下層ページ</h1>
<%_ } _%>
</section>
Pug
EJS
<section>
<h1>トップページ</h1>
</section>
HTML
複雑な処理になると、 Pugのほうが見やすくない?(と、ぼくは思う)
Pugは強力なツールだが、HTMLではないという一点が、唯一の弱点。
どちらかのみしか使わないのではなく、
プロジェクトに合った適切なものを選択しましょう!
某HTMLメルマガのテーブルコーディングなHTMLファイルを、Pug化。
テキストやリンク、解析パラメータを、すべて定数や配列で管理し、大きな改修が無い限りは、HTMLを触らないようにした。
その結果。。。
HTML to JADE/PUG
https://html2jade.org/
こちらのWebページで、HTMLをPugにリアルタイム変換できます。
普段書いているHTMLが、Pugだとどうなるのか?調べるのに便利です。
あと、mixinとか作るときも、
いちいちトランスパイルしなくていいので、便利です。
By Otsuka Yuhi
猫に支配されつつあるフロントエンドエンジニアです。スクラムマスターとかもやったりします。ゆめみという会社で働いています。趣味はエレキベースです。スラップ楽しい。