• ブログTOP
  • AI・ディープラーニング
  • AR
  • VR
  • WEBサイト
  • WEBマーケティング
  • SEO
  • SNS
  • その他
  • お問い合わせ

ALAKI株式会社

COZIKEEいつまでも使えるTech情報発信ブログ

リクルートサイトはこちら >

Pugで始める快適コーディングライフ

2017年7月21日

  • このエントリーをはてなブックマークに追加

こんにちは!
デザイナーの伊東です。

つい最近コーディング業務にPugを取り入れたので、今回はそのご紹介をしようと思います。
もともとJadeと呼ばれていたものが、商標登録の関係でPugという名前に変わったそうです。
Jadeよりも親しみやすい名前で、とっつきやすくなったのではないでしょうか。

この記事の目次

  • 1 Pugって何ができるの?
  • 2 インストール
  • 3 Pugの書き方
  • 4 応用的な書き方
  • 5 Pugで困ったこと

Pugって何ができるの?

そもそもPugがどういうものなのか、初歩的なところからお話ししていきます。
以前ejsを使用したことがあるのですが、ejsもPugも「テンプレートエンジン」と呼ばれるものです。
一つのページを構成するパーツを分割して管理するという、大枠の考え方やメリットはどちらも似ています。
また変数や条件分岐、ループを扱うこともできます。

インストール

Pugのインストールには、Node.jsのインストールが必要ですがここでは割愛させていただきます。
Node.jsがインストールされた上で、下記のコードをターミナルで実行します。

1
npm i pug-cli -g

バージョンを確認して、正しく表示されたらインストールは成功です。

1
pug --version

 

Pugの書き方

それではPugの基本的な書き方をみていきます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
doctype html
html(lang="ja")
  head
    meta(charset="utf-8")
    title Pugで始める快適コーディングライフ
    style(src="css/style.css")
    script(src="js/common.js")
  body
    div#wrap
      header
        h1.logo
          img(
            src="img/logo.jpg",
            alt="ロゴ"
          )
        nav.gnav
      article.main
        section メインコンテンツ
      footer

このように、閉じタグなしで記述していきます。
普段emmetを使ってコーディングされている方はすんなりコードを理解していただけるのではないでしょうか。

特徴は以下の通りです。
・閉じタグが不要で、要素の親子関係はインデントで表す。
・”div#wrap”のように、idやclassは要素名のすぐ後に”#”や”.”で指定
・属性は()内に”,”で区切って指定
・テキストは要素名の後にスペースを入れて入力

それではPugファイルをコンパイルして、htmlファイルを生成してみます。
先ほどのコードを”index.pug”として任意の場所に保存します。

ターミナルで”index.pug”があるディレクトリまで移動して、以下のコードを実行します。

1
pug index.pug --pretty

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>Pugで始める快適コーディングライフ</title>
    <style src="css/style.css"></style>
    <script src="js/common.js"></script>
  </head>
  <body>
    <div id="wrap">
      <header>
        <h1 class="logo"><img src="img/logo.jpg" alt="ロゴ"></h1>
        <nav class="gnav"></nav>
      </header>
      <article class="main">
        <section>メインコンテンツ</section>
      </article>
      <footer></footer>
    </div>
  </body>
</html>

ちなみに、コンパイルする際に”–pretty”を省略すると、

1
<!DOCTYPE html><html lang="ja"><head><meta charset="utf-8"><title>Pugで始める快適コーディングライフ</title><style src="css/style.css"></style><script src="js/common.js"></script></head><body><div id="wrap"><header><h1 class="logo"><img src="img/logo.jpg" alt="ロゴ"></h1><nav class="gnav"></nav></header><article class="main"><section>メインコンテンツ</section></article><footer></footer></div></body></html>

このように改行やインデントが省略されたhtmlファイルが生成されます。

gulpを使用されている方は、gulp-pugをインストールしてwatchさせておけば、pugファイルを更新すると自動的にコンパイルさせることができます。

応用的な書き方

改行(インデント)なしで記述して、可読性UP!

先ほどの章では「要素の親子関係はインデントで表す」と説明しましたが、インデントせずに記述する方法もあります。
ナビゲーションのマークアップなどに便利です。

1
2
3
4
5
6
ul
  li: a(href="#"): span リンク1
  li: a(href="#"): span リンク2
  li: a(href="#"): span リンク3
  li: a(href="#"): span リンク4
  li: a(href="#"): span リンク5

1
2
3
4
5
6
7
<ul>
  <li><a href="#"><span>リンク1</span></a></li>
  <li><a href="#"><span>リンク2</span></a></li>
  <li><a href="#"><span>リンク3</span></a></li>
  <li><a href="#"><span>リンク4</span></a></li>
  <li><a href="#"><span>リンク5</span></a></li>
</ul>

インクルードを利用して、管理しやすい構成に!

ヘッダーやナビゲーションなど各ページで共通化できるところは、別ファイルにしてインクルードすると便利です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
doctype html
html(lang="ja")
  head
    meta(charset="utf-8")
    title Pugで始める快適コーディングライフ
    style(src="css/style.css")
    script(src="js/common.js")
  body
    header
      ul
        li: a(href="#"): span リンク1
        li: a(href="#"): span リンク2
        li: a(href="#"): span リンク3
        li: a(href="#"): span リンク4
        li: a(href="#"): span リンク5
    article
    footer

このコードから、ナビゲーション部分を別ファイルに記述してインクルードしてみましょう。

index.pug
1
2
3
4
5
6
7
8
9
10
11
12
doctype html
html(lang="ja")
  head
    meta(charset="utf-8")
    title Pugで始める快適コーディングライフ
    style(src="css/style.css")
    script(src="js/common.js")
  body
    header
      include nav.pug
    article
    footer

nav.pug
1
2
3
4
5
6
ul
  li: a(href="#"): span リンク1
  li: a(href="#"): span リンク2
  li: a(href="#"): span リンク3
  li: a(href="#"): span リンク4
  li: a(href="#"): span リンク5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>Pugで始める快適コーディングライフ</title>
    <style src="css/style.css"></style>
    <script src="js/common.js"></script>
  </head>
  <body>
    <header>
      <ul>
        <li><a href="#"><span>リンク1</span></a></li>
        <li><a href="#"><span>リンク2</span></a></li>
        <li><a href="#"><span>リンク3</span></a></li>
        <li><a href="#"><span>リンク4</span></a></li>
        <li><a href="#"><span>リンク5</span></a></li>
      </ul>
    </header>
    <article></article>
    <footer></footer>
  </body>
</html>

共通部分は別ファイルで記述することで、メンテナンス性が向上します。

変数を使って、さらに効率的に!

1ページの中で何回も出てくる語句は、変数として定義しておくと便利です。
「- var 変数名 = ●●●●●」で定義して、「#{変数名}」で呼び出します。

1
2
3
4
5
- var title = "ALAKI株式会社";
header
  h1 #{title}
article
  p #{title}は会社と共に、仲間と共に、成長する人材を求めています。

1
2
3
4
5
6
<header>
  <h1>ALAKI株式会社</h1>
</header>
<article>
  <p>ALAKI株式会社は会社と共に、仲間と共に、成長する人材を求めています。</p>
</article>

繰り返す処理は、ループを使ってスマートに!

Pugではループを使用して処理を繰り返すことが可能です。
ここではfor文を使ったループをご紹介します。

1
2
3
4
ul
  - for (var i = 0; i < 5; i++) {
    li: a(href="#"): span リンク#{i+1}
  - }

1
2
3
4
5
6
7
<ul>
  <li><a href="#"><span>リンク1</span></a></li>
  <li><a href="#"><span>リンク2</span></a></li>
  <li><a href="#"><span>リンク3</span></a></li>
  <li><a href="#"><span>リンク4</span></a></li>
  <li><a href="#"><span>リンク5</span></a></li>
</ul>

Pugで困ったこと

これは先日実際に業務中に体験したことなのですが、Pugで書くとかえって可読性が悪くなる場合があります。

漢字(かんじ)に読(よ)み仮名(がな)をふる

htmlではこんなソースですが、

1
<p><ruby>漢字<rt>かんじ</ruby>に<ruby>読<rt>よ</ruby>み<ruby>仮名<rt>がな</ruby>をたくさんふる</p>

Pugだと、

1
2
3
4
5
6
7
8
9
10
11
12
13
p
  ruby
    | 漢字
    rt かんじ
  | に
  ruby
    | 読
    rt よ
  | み
  ruby
    | 仮名
    rt がな
  | をたくさんふる

何がなんだかさっぱりですよね。
これをPugで書くのは頭が混乱してきそうなので、htmlで記述してPugのコードに変換するという方法で対応しました。

そんな時に便利なのがjade converterです。
左側の入力欄にhtmlのコードを入力することで、右側にPugのコードが表示されます。

Pugを導入したが、どうしてもこの部分はhtmlで書いた方が早い!
なんて場合には最適かと思います。

 

Pugをうまく使いこなして、快適なコーディングライフをお過ごしください!
それではこの辺で、最後までありがとうございました!

 

  • ツイート
  • このエントリーをはてなブックマークに追加
デザイナー募集
  • Next story プログラマも簡単に実装「sweetalert.js」で作る簡単アラート
  • Previous story BtoB向け受発注システムを作りました!

弊社サービス

MONJI+ MUGHEN ALAKI クラウド型受発注システム さよなら過去のAR。WebARがイベント集客に革命を起こします。

運営会社

ALAKI株式会社 ALAKI株式会社採用サイト

人気の記事

  • alaki1462_A_businessman_who_works_logically_1da80a2e-c297-4911-bdd6-feba0ebf1357

    仕事術

    【書籍要約】数学的な仕事術大全

    4 11月, 2024

  • fv-main-img-min

    空間コンピューティング

    世界初!「空間コンピューティング」を専用端末不要、スマホのWebブラウザのみで実現する『Web XR Site』を公開しました

    22 6月, 2023

  • Virtual reality players isometric vector illustration. VR UI and navigation. Futuristic digital technology. Virtual screen. Mixed reality 3d concept. Person in VR headset. Web banner idea

    AR

    Appleから新世代MRグラス「Vision Pro」の登場 – デジタルと現実世界が融合する新時代へ

    6 6月, 2023

  • AWE

    未分類

    ARアプリ『MUGHEN』が世界最大のAR/VRアワード「AWE」のファイナリストに選出されました!

    26 5月, 2023

  • python-logo-master-v3-TM

    pyhotn / 業務効率化

    「SwinIR」で高画質化した画像を pythonを使用して一括で元のサイズに戻す方法

    2 2月, 2023

カテゴリー

  • AI・ディープラーニング
  • AR
  • BtoB
  • CMS
  • Git
  • Google AdWords
  • gulp
  • Javascript
  • Laravel
  • Photoshop
  • Pug
  • pyhotn
  • Sass
  • SEO
  • SNS
  • Twitter広告
  • VR
  • Web3.0
  • WEBサイト
  • WEBマーケティング
  • YouTube
  • コーディング
  • システム開発
  • スマートフォンサイト
  • セキュリティ
  • セミナー
  • その他
  • ツール
  • デザイン
  • ベトナムレポート
  • 仕事術
  • 未分類
  • 業務効率化
  • 空間コンピューティング
  • 色

アーカイブ

  • 2024年11月
  • 2023年6月
  • 2023年5月
  • 2023年2月
  • 2023年1月
  • 2022年12月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年2月
  • 2021年12月
  • 2021年9月
  • 2021年7月
  • 2021年6月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年6月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年6月
  • 2018年5月
  • 2018年4月
  • 2018年3月
  • 2018年2月
  • 2018年1月
  • 2017年12月
  • 2017年11月
  • 2017年10月
  • 2017年9月
  • 2017年8月
  • 2017年7月
  • 2017年6月
  • 2017年4月
  • 2017年3月
  • 2017年2月
  • 2017年1月
  • 2016年12月
  • 2016年11月
  • 2016年10月
  • 2016年9月
  • 2016年8月
  • 2016年7月
  • 2016年6月
  • 2016年5月
  • 2016年4月
  • 2016年3月
  • 2016年2月
  • 2016年1月
  • 2015年12月
  • 2015年11月
  • 2015年10月
  • 2015年9月
  • 2015年7月
  • 2015年3月
  • 2015年2月
  • 2015年1月
  • 2014年12月
  • 2014年11月
  • 2014年10月
  • 2014年9月
  • 2014年8月
  • 2014年7月
  • 2014年6月
  • 2013年10月
  • 2013年9月

Facebook

お問い合わせ

お問い合わせ

人気の記事

  • 【書籍要約】数学的な仕事術大全
  • 世界初!「空間コンピューティング」を専用端末不要、スマホのWebブラウザのみで実現する『Web XR Site』を公開しました
  • Appleから新世代MRグラス「Vision Pro」の登場 – デジタルと現実世界が融合する新時代へ
  • ARアプリ『MUGHEN』が世界最大のAR/VRアワード「AWE」のファイナリストに選出されました!
  • 「SwinIR」で高画質化した画像を pythonを使用して一括で元のサイズに戻す方法

カテゴリー

  • AI・ディープラーニング
  • AR
  • BtoB
  • CMS
  • Git
  • Google AdWords
  • gulp
  • Javascript
  • Laravel
  • Photoshop
  • Pug
  • pyhotn
  • Sass
  • SEO
  • SNS
  • Twitter広告
  • VR
  • Web3.0
  • WEBサイト
  • WEBマーケティング
  • YouTube
  • コーディング
  • システム開発
  • スマートフォンサイト
  • セキュリティ
  • セミナー
  • その他
  • ツール
  • デザイン
  • ベトナムレポート
  • 仕事術
  • 未分類
  • 業務効率化
  • 空間コンピューティング
  • 色

検索

ALAKI株式会社 © 2025. All Rights Reserved.