ゴリラとパグ
Pocket

このブログは閉鎖して、新しく作ったブログへ移行中です。このブログと同じく写真やwebのことを話題にしていきます。

Jadeが商標うんたらで、Pugに名前が変わるそうなので使ってみました。
Jade 2.0.0からPugになるそうです。

Jadeの記事はこちら

【Jade】ゴリラでもわかるJade入門 〜Jadeを使ってみる〜

ゴリラのイラストは素材工場さんから

素材工場

パグのイラストはイラストACさんから

イラストAC

目次
  1. Pugとは
  2. Pugのいいところ
  3. インストール
  4. Pugファイルを作成してみる
  5. Pugの書き方いろいろ
  6. Pugの便利機能
  7. gulpでPugをコンパイルする

Pugとは

PugはHTMLを書くためのテンプレートエンジンです。

Pug

CSSにおけるSassやStylusのようなもので、ざっくり言うとHTMLの作成を簡単にしてくれます。HTMLのようにタグで囲むことがない代わりに、改行やインデントなどで全体を構成していきます。

Pugのいいところ

Pugを使うと、いろいろと楽になります。

  • 記述を省略できる(タグで囲む必要なし、class,idを書かなくていい)
  • ファイル分割できる(一部をincludeで読み込んだり、見た目や管理がスッキリ)
  • 変数やループとかがあって便利

インストール

Pugを使うためには準備が必要ですが、簡単です。

Node.jsのインストール

Pugの公式サイトに「NODE TEMPLATE ENGINE」と書かれているように、PugはNode.jsで動いています。

Node.jsをインストールしていない人は公式サイトからダウンロードし、PCにインストールしてください。

Node.js

Pugのインストール

Node.jsをインストールできたら、Pugをインストールします。

以下コマンドをターミナルでたたくとPugがインストールされます。

npm i pug-cli -g

以下コマンドでバージョンが表示されたら、インストール完了です。

pug --version

Pugファイルを作成してみる

まず、index.pugを作成します。作る場所はどこでも大丈夫です。

index.pugに以下を書きます。

doctype html
html(lang="ja")
  head
    meta(charset="utf-8")
    style(src="css/style.css")
    title Pugテスト
  body
    h1.sitettl Pugテストサイトタイトル
    main.main
      h2.content_ttl メインタイトル

冒頭で書いた通り、Pugはタグで囲んでないですね。

Pugの基本記法

Pugは基本的に以下ように書きます。

  • doctype htmlで宣言文
  • 改行+インデントで要素の入れ子を作る
  • タグ名+半角スペースでタグ内のテキスト

PugをHTMLにコンパイル

先ほど作ったPugファイルをターミナルを使って、HTMLファイルに書き出してみます。

ターミナルを開き、Pugファイルがあるディレクトリへ移動しておきます。

[例]

cd pugtest

Pugファイルがあるディレクトリへ移動した上で、以下コンパイルのコマンドをターミナルに入力します。

pug index.pug

すると同じディレクトリ内にindex.htmlが生成されます。

index.html
<!DOCTYPE html><html lang="ja"><head><meta charset="utf-8"><style src="css/style.css"></style><title>Pugテスト</title></head><body><h1 class="sitettl">Pugテストサイトタイトル</h1><main class="main"><h2 class="content_ttl">メインタイトル</h2></main></body></html>

横一直線で見づらいので、以下コマンドでコンパイルします。

pug index.pug --pretty

すると、見やすいHTMLを書き出してくれます。

index.html
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <style src="css/style.css"></style>
    <title>Pugテスト</title>
  </head>
  <body>
    <h1 class="sitettl">Pugテストサイトタイトル</h1>
    <main class="main">
      <h2 class="content_ttl">メインタイトル</h2>
    </main>
  </body>
</html>

Pugの書き方いろいろ

gorilla2

タグが不要なこと以外にもPug特有の書き方はいろいろとあります。

改行せずに要素の入れ子をつくる

Pugは「: + 半角スペース」で横並びに書いても、要素の入れ子を作ることができます。

例えばメニューで「nav > ul > li > a > span」という感じの構成の場合、
改行+インデントを使うと縦に長くなって、逆に見づらくなる場合があります。

そんな時にこの書き方が使えます。

nav
  ul
    li: a(href="#") Top
    li: a(href="#") About
    li: a(href="#") Works
    li: a(href="#") Contact
    li: a(href="#"): span Links
コンパイル結果
<nav>
    <ul>
        <li><a href="#">Top</a></li>
        <li><a href="#">About</a></li>
        <li><a href="#">Works</a></li>
        <li><a href="#"><span>Contacts</span></a></li>
    </ul>
</nav>

idとclassの書き方

idは#、classは.でつなげて書きます。

いちいちclassやクォーテーションを書かなくていいですね。

section#top
  .content.inner
コンパイル結果
<section id="top">
    <div class="content inner"></div>
</section>

属性の書き方

hrefやsrcなどの属性はかっこ内に書きます。

// CSS
link(link="css/style.css")

// js
script(src="js/main.js")

// リンク
a(href="#") Top

// inputタグ
input(type="text" checked)

input(
  type="radio"
  name="hoge"
  checked
)

複数ある場合は、スペース横並びでも、改行でも大丈夫です。

改行

文章の改行をしたいとき、brタグを使うには以下のように書きます。

p
  |トップページのコンテンツ
  br
  |トップページのコンテンツ
コンパイル結果
<p>トップページのコンテンツ<br>トップページのコンテンツ</p>

コメント

Pugのコメントの書き方は2種類あります。
書き出したHTML内にコメントを残す方法と残さない方法です。

// HTMLで書き出されるコメント

//- HTMLで書き出されないコメント

Pugの便利機能

Pugを使うと記述を省略できる以外にも、便利な書き方があります。

include

記述の一部をパーツ化し、includeで必要な箇所に読み込むことができます。

ページ間の共通部分をパーツ化しておくことで、管理や修正がやりやすくなります。

例えば、以下のようなPugファイルがあったとします。

doctype
html(lang="ja")
  head
    meta(charset="utf-8")
    style(src="css/style.css")
    title Pugテスト
  body
    header.header
      h1.sitettl Pugテストサイトタイトル
      nav
        ul
          li
            a(href="#") Top
          li
            a(href="#") About
          li
            a(href="#") Works
          li
            a(href="#") Contact

    main.main
      h2.content_ttl トップページタイトル

      p トップページのコンテンツ

    footer.footer
      small copyright

includeを使って書くとこのようになります。

index.pug

doctype
html(lang="ja")
  head
    meta(charset="utf-8")
    style(src="css/style.css")
    title Pugテスト
  body
    include include/header.pug

    main.main
      h2.content_ttl トップページタイトル

      p
        |トップページのコンテンツ
        br
        |トップページのコンテンツ

      section#top
        .content.top

  footer.footer
      small copyright

トップページや下層ページでも同じ構成になりそうな、ヘッダーをincludeで読み込んでみました。

ヘッダーのPugファイルはincludeディレクトリ以下に置いています。

[header.pug]

header.header
  h1.sitettl Pugテストサイトタイトル
  nav
    ul
      li
        a(href="#") Top
      li
        a(href="#") About
      li
        a(href="#") Works
      li
        a(href="#") Contact

includeで読み込んでおくと、後にメニューの表記などが変更になった場合、
header.pugを修正すれば全てのページで変更されます。

変数が使える

「- var 変数名 = 変数の中身」で定義します。

- var title = "ゴリラでもわかるPug入門";

変数を使う場合は「#{変数名}」で使います。

header.header
  h1.sitettl #{title}

使いまわしそうなものは変数定義しておくと、後に変更があった場合に楽です。

ループ

同じ要素が続くときはループで繰り返すことができます。

for文を使う場合

section#top
  .content.top
  - for (var i = 0; i < 3; i++)
    .block
      h2(class="#{i}") 見出し
      p テキストテキスト
      a(href="#") ボタン
コンパイル結果
<div class="block">
    <h2 class="0">見出し</h2>
    <p>テキストテキスト</p><a href="#">ボタン</a>
</div>
<div class="block">
    <h2 class="1">見出し</h2>
    <p>テキストテキスト</p><a href="#">ボタン</a>
</div>
<div class="block">
    <h2 class="2">見出し</h2>
    <p>テキストテキスト</p><a href="#">ボタン</a>
</div>

単純な要素の繰り返しにはfor文が良さそうです。

#{i}と書けば連番をふることができます。

eachを使う場合

ul
  each val in ["Top", "About", "Works", "Contact"]
    li: a(href="#")= val

each文を使う繰り返しもあります。

コンパイル結果
<ul>
    <li><a href="#">Top</a></li>
    <li><a href="#">About</a></li>
    <li><a href="#">Works</a></li>
    <li><a href="#">Contact</a></li>
</ul>

gulpでPugをコンパイルする

gulpでPugをコンパイルする記事を書きました。

【Jade/Pug】gulpでJade / Pugをコンパイルする

さいごに

Pugは他にも条件文や、mixin、extendsなど便利な機能がまだまだあります。

ぜひお試しください!

Pocket

Tag :