# 効率的にHTMLを生成できるPugの特徴や記述方法 URL: https://webrandum.net/pug/ 公開日: 2019-04-04 更新日: 2019-04-04 カテゴリー: コーディング タグ: Pug 出典: Webrandum(著者: サイトウ マサカズ) Pug(パグ)はHTMLを生成するためのテンプレートエンジンで、ものすごくざっくり言うとSassのHTML版です。好き嫌いが別れたり、使い所も考える必要がありますが、今回はPugの特徴や記述方法についてまとめておきます。 ## Pugの特徴 [Pug](https://pugjs.org/api/getting-started.html)の特徴をまとめると下記のようになります。 - 閉じタグが不要 - 山括弧<>も不要 - インデントで構造を管理 - ファイルの分割ができる - 変数が使える - if文やfor文が使える 閉じタグが無い変わりにインデントがかなり重要になってきます。 そのため、普段からインデントを付けながら書いている人であれば、単純に書く文字数が減ります(その辺りの設定が甘い人が触ろうとすると、インデント調整の時間が長くなってしまいます)。 ## Pugの使い方 ### 基本的な書き方 基本的な書き方は下記の通りです。 - 階層ごとにインデントを付けて書いていく - 要素名はそのまま書く divの場合は要素名の省略が可能 - classには「.(ピリオド)」、idは「#(ハッシュ記号)」の後に記述する 特定要素にclassを付けたい場合は、要素の後にclass名を記述する - テキストは要素の後に半角スペースを空けてから入力する 最後に「.(ピリオド)」だけを入力しておくと、次のインデントは文字列として出力される - 属性名は丸括弧の後に入力する ``` コンパイル前doctype html html(lang="ja") head meta(charset="utf-8") title Pugのサンプル style(src="css/style.css") body header h1 Pugのサンプル ul.nav li サンプル li サンプル main section p テキストテキストテキスト a.btn(href="#") ボタン ``` コンパイルすると下記のようになります。 ``` コンパイル後 Pugのサンプル

Pugのサンプル

テキストテキストテキスト

ボタン
``` ### ファイルの分割管理 複数ページのHTMLを作る時に、ヘッダーやフッターなどの共通部分を分割しておけます。 そうしておくことで、後で修正があった時に1つのファイルを修正するだけで、修正が反映されます。 分割して作成したPugファイルを、includeを使って読み込みます。 ``` include 分割したファイル名.pug ``` 実際の使用例は下記のようになります。 ``` index.puginclude common/_header.pug main .wrap p サンプル include common/_footer.pug ``` ### 変数を使う 変数を使うことで、後から一括で修正ができます。宣言の仕方は1つですが、使う時に色んな書き方があるので注意が必要です。 ``` // 変数の宣言 - var 変数名 = 値; //変数の使用 p #{変数名} //通常の使用方法 a(href=変数名) //属性内で使用する場合 a(href=`${変数名}`) //バッククォートを使用する場合 ``` 実際の使用例は下記のようになります。 ``` コンパイル前- var btnLabel = "詳しくはこちら"; section.about p. テキスト a(href="#") #{btnLable} section.feature p. テキスト a(href="#") #{btnLabel} ``` また、ブラケットで囲むと配列を作成できます。for文やeach文を使う時にはこの配列を使用します。 ``` - var list = ['text1', 'text2', text3]; ``` ### if文を使う 例えば「トップページには特定のclassを付けるけど、下層ページには付けない」のような条件分岐が可能です。 ``` - var page = 'top'; if page == 'top' p トップページです else if page == 'about' p アバウトページです else p #{page}ページです ``` ちなみにifの代わりに`unless`を使うと、否定(if !条件と同じ)の意味になります。 ### for文を使う 同じようなHTMLのタグを繰り返す時は、for文を使うことで、コードをすっきり書けます。 ``` コンパイル前- for (var x = 0; x < 5; x++) li item-#{x} ``` ``` コンパイル後
  • item-0
  • item-1
  • item-2
  • item-3
  • item-4
  • ``` ### each文を使う 配列要素ごとに繰り返しをしたい時はeach文を使用します。 文法は`each 変数 in 配列`の形です。 ``` コンパイル前- var list = ['text1', 'text2', 'text3']; ul each item in list li #{item} ``` ``` コンパイル後 ``` ### コメントの書き方 コメントの書き方は2通りあって、HTMLにコンパイルした時に表示されるものと、表示されないPugだけのコメントの2通りです。 スラッシュ2つでコメントは記述しますが、その後にハイフンを付けるとPugだけのコメントになります。 ``` コンパイル前// HTMLにも表示されるコメント //- Pugだけのコメント ``` ``` コンパイル後 ``` ## Pugをプロジェクトで使う時の注意点 ここまでPugを見てきてわかると思いますが、Pugは最終的に大量の静的HTMLを書き出す時に有効です。 逆に言えば、CMSなどへの組み込みを前提とする場合は使いにくい印象です。 また、書き方が独特のため、複数人で作業をする場合はメンバー全員にPugについての書き方や、ファイル分割する時のルールについて共有しておく必要があります。 「使おう」と意識しなければあまり触れる機会はなさそうですが、最近はVue.jsのテンプレートをPugで記述もできるようになりましたし、書けるようになっていて損はないと思います。