designsupply.llc
  • aboutabout
  • servicesservices
  • worksworks
  • mediamedia
  • contactcontact
  • homeサイトトップ
  • about会社概要
  • services業務内容
  • works実績紹介
  • mediaメディア
  • contactお問い合わせ
ja/

media

メディア

  1. サイトトップ
  2. メディア
  3. プログラミングの記事
  4. Pugのincludeとmixinの違いと使いわけについてまとめ

Pugのincludeとmixinの違いと使いわけについてまとめ

  • 2020.09.08
  • プログラミング
  • Pug
Updated: 2020.09.08
Pugにはいろんな便利機能がありますが、今回はその中でも比較的よく使う「include」とそれによく似た「mixin」について詳しい違いや使い分けについてまとめていきたいと思います。過去記事「Pugでページテンプレートの作成にextendsとblockを活用する」では、extendsを使ってページの大枠となるレイアウトを流用するケースについてまとめていますが、includeとmixinも併用することでより効率よくページコーディングを行うことができます。   また、今回はサンプルとしてこのようなファイル構成を想定しています。
index.pug
components
  ┣ _header.pug
  ┗ _footer.pug
 
include:外部ファイルを読み込む
includeを使うと外部のPugファイルをインクルードして読み込むことができます。なのでファイルを分割して管理できるようになります。分割したファイルは先頭にアンダースコア(_)をつけることで、コンパイルされないようにしておくのを忘れないようにしましょう。ここではページテンプレートとなるPugファイルで、外部ファイルとして切り出した、ヘッダー用とフッター用のPugファイルをインクルードさせています。 【index.pug】
include components/_header.pug
    main.
      ページのメインコンテンツです
include components/_footer.pug
  このようにヘッダー部分とフッター部分を切り出しています。ファイルが長くなる場合や共通テンプレートが多くなる場合にはこのような設計がとても効果的です。 【_header.pug】
doctype html
html(lang="ja")
  head
    meta(charset="utf-8")
  body
    header.
      ヘッダーコンテンツです
  【_footer.pug】
    footer.
      フッターコンテンツです
  コンパイルすると1つのHTMLにインクルードされた外部ファイルが読み込まれて合わさっているのが確認できます。 【index.html】
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
  </head>
  <body>
    <header>ヘッダーコンテンツです</header>
    <main>ページのメインコンテンツです</main>
    <footer>フッターコンテンツです</footer>
  </body>
</html>
  また、includeではPugファイルの他にもCSSファイルやプレーンテキストファイルなども読み込むことができます。下記ではstyleタグの中に、外部CSSファイルに記述されたCSSをそのまま読み込んでいる形になります。 【_header.pug】
doctype html
html(lang="ja")
  head
    meta(charset="utf-8")
    style
      include css/style.css
  body
    header.
      ヘッダーコンテンツです
  もちろんCSSは通常通りに記述できます。これがそのままHTML内に出力されるようになります。 【style.css】
h1 {
  color: red;
}
  コンパイルしたものを実際に確認してみると読み込んだCSSが出力されているのが確認できます。 【index.html】※一部抜粋
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <style>
      h1 {
        color: red;
      }
    </style>
  </head>
  <body>
    <header>ヘッダーコンテンツです</header>
............
  これがincludeの機能になります。比較的、仕組みが理解しやすいのでよく使われているのではないでしょうか。PHPでも似たようなものがあり、ページテンプレートのフレームワークなどでも同じような使い方をするケースも多いですね。  
mixin:関数を定義することができる
includeによく似ていますが、mixinは関数を定義して、それをPugファイル内で実行することができます。具体的にはこのようにファイル内でmixinとして関数を定義します。今回はグローバルナビのリストを出力する関数をサンプルとして作成してみました。 【index.pug】
include components/_header.pug

mixin globalNavi(items, current)
  ul
    each item in items
      if current === item
        li.current= item
      else
        li= item

  main
    +globalNavi(['home', 'about', 'info', 'contact'], 'home')

include components/_footer.pug
  mixinで関数を定義したら、改行とインデントを入れて出力する内容を記述していきます。ここではリスト形式で、引数で受けた値の分だけ繰り返すような形になっています。その際に引数で現在表示されているページを表す値も指定できるようにしておき、条件分岐で現在ページの場合には特定のclass名が振られるようにしています。   定義したmixinはPugファイル内で「+」を入れることで呼び出すことができます。関数名を続けて記述し、受け渡す引数を入れていきます。これでコンパイルしてみると下記のように指定した値が出力されているのがわかります。 【index.html】※一部抜粋
............
  <main>ページのメインコンテンツです
    <ul>
      <li class="current">home</li>
      <li>about</li>
      <li>info</li>
      <li>contact</li>
    </ul>
  </main>
............
  また、mixinですが上記のようにPugファイル内で定義する方法以外にも、外部ファイルに定義したものをincludeで読み込むこともできます。読み込んだmixinは同じように、+のあとに関数名を記述することで呼び出すことができます。 【index.pug】
include _mixin.pug
include components/_header.pug
    main
      +globalNavi(['home', 'about', 'info', 'contact'], 'home')
include components/_footer.pug
  mixinの数が多くなってきたり、複数ページで使い回す場合などはこのように別ファイルにまとめてしまった方がいいかもしれませんね。 【_mixin.pug】
mixin globalNavi(items, current)
  ul
    each item in items
      if current === item
        li.current= item
      else
        li= item
   
includeとmixinの使い分け
このようにincludeとmixinは似ているようですが詳しく見てみると異なる機能を持っています。どちらかというと基本的にはincludeの方がよく使う場面も多く、開発規模に関わらず、どんなプロジェクトでも相性がいいのではないでしょうか。その逆にmixinは少し複雑な構造や機能が求められる場合に効果を発揮しそうですね。   個人的な意見になりますが、具体的にまとめますと次のような使い分けがいいかと思います。
include 外部のファイルをインクルードさせる、ファイル内容をそのまま出力する場合など
mixin 特定の処理をまとめた関数を呼び出す、ファイル単位で動的に処理を切り分けたい場合など
  includeは静的な内容を、mixinは関数として処理を変えれるので動的な内容を出力するというのが大きな違いですね。何れにしてもPugの便利な機能の恩恵を受けるには両方理解した上で使いこなせるのがベストではないでしょうか。  
  今回はPugのincludeとmixinについて違いを詳しく見ていき、使い分ける方法についてまとめてみました。普段HTMLで書くことに慣れているとあまり意識しないですが、Pugを使うことでよりプログラミング的にHTMLコーディングを行うことになりますので、効率のよい書き方や、便利な処理などもより鮮明に見えてきます。そんな時にはPugの便利な機能を使いこなしてコーディングすることをお勧めします。ぜひ試してみてはいかがでしょうか。

この記事を書いた人オガワ シンヤ

合同会社デザインサプライ代表兼CEO / ディレクター・ウェブデザイナー・フロントエンドエンジニアをやっています。「ウェブとデザインでヒト・モノ・サービスを繋げ新しい価値を生み出す」をコンセプトに日々奮闘中!制作中はダイエットコーラとチョコレートが欠かせないアラフォーWebクリエイター。

Sponsored Link

categories

  • WordPress(61)
  • JavaScript(49)
  • Vue.js(48)
  • CSS(46)
  • jQuery(34)
  • Nuxt.js(22)
  • Sass(21)
  • Gulp(17)
  • webpack(16)
  • PHP(14)
  • HTML(14)
  • GSAP(11)
  • React(10)
  • Vite(9)
  • Pug(9)
  • Laravel(8)
  • Cordova(8)
  • Linux(7)
  • Next.js(6)
  • Apache(5)
  • Shopify(4)
  • REST API(4)
  • Node.js(4)
  • Smarty(3)
  • Git(3)
  • JSON(3)
  • その他プログラミング(3)
  • Google Apps API(3)
  • Bootstrap(3)
  • 環境構築・システム(3)
  • TypeScript(2)
  • EJS(2)
  • RMS(2)
  • Docker(2)
  • Instagram API(2)
  • Excel VBA(2)
  • SVG(1)
  • Dart(1)
  • ECカートASP(1)
  • Markdown(1)
  • AMP(1)
  • Nginx(1)
  • XML(1)
  • shellscript(1)
  • Ruby(1)
  • MySQL(1)
  • 次の記事
  • 一覧に戻る
  • 前の記事

まだ依頼内容が決まっていなくても、ご相談ください。

課題の整理や小さな検証、UI/UX・フロントエンドの部分的な支援から始められます。

お問い合わせやご相談はこちらから

Webサイト・プロダクトの企画設計/UI・UXデザイン/フロントエンド開発合同会社デザインサプライ(DesignSupply. LLC)

Office:大阪府大阪市天王寺区清水谷町3-22
Email:info@designsupply-web.com
home
  • サイトトップ
about
  • 3つのポリシー
  • 経営理念
  • 代表・クリエイター紹介
  • 会社概要
services
  • ビジネス・プロダクト支援
  • UI/UX・フロントエンド開発支援
  • プロジェクトの進め方・支援体制
  • エデュケーション事業
works
  • 開発プロジェクト
  • クリエイティブ支援
  • 自社プロダクト
media
  • デザイン
  • プログラミング
  • マーケティング
  • Web開発
  • 写真・動画制作
contact
  • お問い合わせ
news
  • インフォメーション
privacy
  • プライバシーポリシー

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

© 2013 - 2026 DesignSupply.LLC
サイトトップへ
contact