JSテンプレートエンジン「Nunjucks」とgulpで快適HTMLコーディング

JSテンプレートエンジン「Nunjucks」とgulpで快適HTMLコーディング

もうすぐハロウィン。アラフォーにもなって今週末にはじめて仮装してみることにしました ishida です。
はじめてのことで、何に仮装すれば迷いまくっています。

さて、今回は、テンプレートエンジン「Nunjucks」についてご紹介です。

Nunjucks とは

FireFoxブラウザでおなじみmozilla謹製のJavaScriptテンプレートエンジンです。
Pythonテンプレートエンジン Jinja2 に影響を受けて、誕生しました。

githubでのstar数は、4660(2017/10/26現在)です。

特徴

  • node.js で動作
  • マクロ定義
  • オートエスケープ
  • リッチブロックの継承
    • extends によるテンプレート継承
    • block によるエリアの継承
  • include による外部ファイル読み込み

などです。

記述サンプル

以下が、Nunjucksのコードサンプルです。

{% extends "_layout.html" %}

{% block header %}
<h1>{{ title }}</h1>
{% endblock %}

{% block content %}
<ul>
  {% for name, item in items %}
  <li>{{ name }}: {{ item }}</li>
  {% endfor %}
</ul>
{% endblock %}}

gulp を使って静的HTMLを生成する

動的生成以外にも 静的にHTMLを出力することができます。gulpならね。
まずは、準備です。

gulp-nunjucks-render

npmモジュール、gulp-nunjucks-render をインストールします。
※ gulp 等のインストールはすでに出来ている前提で進めます。

$ npm install --save-dev gulp-nunjucks-render

gulpfile.js

gulp-nunjucks-render を読み込み、'nunjucks' タスクで
HTMLが出力されるようにします。

var gulp = require('gulp');
var nunjucksRender = require('gulp-nunjucks-render');

gulp.task('nunjucks', function () {
  return gulp.src([
    'src/nunjucks/**/*.html',
    '!src/nunjucks/**/_*.html'
  ])
    .pipe(nunjucksRender({
      path: ['src/nunjucks/']
    }))
    .pipe(gulp.dest('dist'));
});

ファイル/ディレクトリ構成

src/nunjucksディレクトリ配下に、
継承元のテンプレート(_layout_default.html)と 出力用テンプレート(index.html)を用意しました。

gulpfile.js
src
└── nunjucks
      ├── _layout_default.html  
      └── index.html

継承元のテンプレート(_layout_default.html)のコード

<!DOCTYPE html>
<html lang="ja" dir="ltr">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta charset="utf-8">
<title>{{ pageTitle }}</title>
</head>
<body>

<main>
{% block content_main %}
{% endblock %}
</main>

</body>
</html>

出力用テンプレート(index.htmlのコード)

{% extends "_layout/_layout_default.html" %}
{% set pageTitle = "ページタイトル" %}

{% block content_main %}
<h1>Nunjucks サンプル</h1>
{% endblock %}

gulp で タスク実行

gulpfile.js に 'nunjucks' タスクを作成したので、実行します。

$gulp nunjucks

出力結果

dist/index.html としてファイルが出力されます。
継承元のテンプレートをもとに、ページが生成されていることが分かりますね。

<!DOCTYPE html>
<html lang="ja" dir="ltr">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta charset="utf-8">
<title>ページタイトル</title>
</head>
<body>

<main>

<h1>Nunjucks サンプル</h1>

</main>

</body>
</html>

まとめ

いかがでしたか?

記述方法も難しくありませんので、導入しやすいかと思います。

テンプレートエンジンにもいろいろ種類がありますが、
乗り換えの候補に検討してみてはどうでしょうか?

自分は、Nunjucks + gulp を使ってそろそろ1年ぐらいになります。
gulpと一緒使うことによって静的にHTMLを出力することもできたので、 社内フレームワークに組み込んでいます。かなり便利ですー。

細かいテンプレートの記述などは次回紹介します!

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

この記事を読んだ人にオススメ