nuxt.svg

【Nuxt 2】Pugの導入

Nuxt2

Pug とは

Pug は、HTML の記述を簡略化できるテンプレートエンジンです。 タグを使わずに HTML を記述するため、効率化が見込めます。

NuxtJS への導入

Pug を NuxtJS で利用するために、以下をインストールします。

$ npm i pug pug-loader pug-plain-loader

あとは<template>で言語を指定すれば利用できます。

.vue
<template lang="pug">
</template>

基本構文

こちらのサイトで Pug の動作を確認できます。

Pug では、タグを使わずインデントによって HTML を記述していきます。 まずは簡単な例をみてください。

Pug
div
  p Hello World!

これは以下の HTML と同義です。

HTML
<div>
  <p>Hello World!</p>
</div>

Pug では、タグではなく要素名のみを使用します。 また、インデント構造によって親子関係を表します。 これが Pug の基本となります。

テキスト

テキストを表示する場合は、要素名の後に 1 つスペースを開けて記述します。

Pug
p Hello World!

親子関係

要素の親子関係については、先程記述した通りインデント構造によって決まります。

Pug
div
  p Hello World!

親子関係が 1:1 の場合は、コロン(:)を使って以下のように記述できます。

Pug
div: p Hello World!

属性

属性は()を用いて記述します。

Pug
a(href="https://hogehoge.com") Hoge Site
HTML
<a href="https://hogehoge.com">Hoge Site</a>

当然ながら、Vue.js のディレクティブも記述できます。

Pug
a(:href="url") Hoge Site

id・class

id と class は属性として指定することもできますが、CSS と同様に#.を用いて以下のように記述することができます。

Pug
main#main
  div.container
HTML
<main id="main">
  <div class="container">
  </div>
</main>

id または class を指定する場合、divは省略することができます。

Pug
.container
HTML
<div class="container">
</div>

インライン要素

以下のようにインライン要素のタグを使うことができます。

Pug
p Hello <span style="color: red">World</span>!
HTML
<p>Hello <span style="color: red">World!</span>!</p>

上記は#[](インターポレーション)を使用することで、Pug の表記に置き換えることができます。

Pug
p Hello #[span(style="color: red") World]!

また|(パイプ)を使用することで、インラインを改行して記述することができます。

Pug
p Hello
  | #[span(style="color: red") World]!

エスケープ

="を使用することで特定の文字をエスケープすることができます。

Pug
p= "<script>"
HTML
<p>&lt;script&gt;</p>

コメント

コメントは//になります。

Pug
//コメント
HTML
<!-- コメント -->

複数行のコメントは、以下のようにインデントを用います。

Pug
//
  複数行の
  コメント

//では HTML 反映されるコメントになりますが。//-とすれば HTML には反映されなくなります。

Pug
//- これは反映されないコメント

その他の機能について

Pug には、ifforといった制御構文など紹介していない機能があります。 これらを使えば HTML を効率よく記述することができるでしょう。

ただし、ここでは Vue.js(NuxtJS)で使うことが前提のため、制御構文などは当然 Vue.js のものを使用します。 Vue.js における Pug の役割は、Markup Language の表記からインデントベースの表記に変えるだけです。 あくまで記述のしやすさやコードの見た目の問題だけなので、無理に導入することはありません。