コンテンツにスキップ

Nunjucks

出典: フリー教科書『ウィキブックス(Wikibooks)』

概要

[編集]

Nunjucksは、Mozilla が開発した強力なJavaScriptテンプレートエンジンです。Jinja2に触発された構文を持ち、豊富な機能と柔軟性を提供します。

インストールと設定

[編集]

Node.jsでのインストール

[編集]
npm install nunjucks

基本的なセットアップ

[編集]
const nunjucks = require('nunjucks');
nunjucks.configure('views', {
    autoescape: true,
    noCache: false,
    watch: true
});

基本構文

[編集]

変数の表示

[編集]

変数を表示するには二重中括弧({{}})を使用します:

<h1>{{ title }}</h1>
<p>{{ description }}</p>

フィルタ

[編集]

フィルタを使用して値を変換できます:

{{ name | title }}
{{ date | date('YYYY-MM-DD') }}
{{ text | truncate(100) }}

制御構文

[編集]

条件分岐

[編集]

if文による条件分岐:

{% if user %}
  <h1>{{ user.name }}さん、こんにちは!</h1>
{% elif guest %}
  <h1>ゲストさん、こんにちは!</h1>
{% else %}
  <h1>こんにちは!</h1>
{% endif %}

ループ処理

[編集]

for文によるループ処理:

{% for item in items %}
  <div class="item">
    <h2>{{ item.title }}</h2>
    <p>{{ item.description }}</p>
  </div>
{% endfor %}

テンプレート継承

[編集]

基本レイアウト

[編集]

layout.njkファイル:

layout.njk
<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}{% endblock %}</title>
</head>
<body>
    {% block content %}{% endblock %}
</body>
</html>

子テンプレート

[編集]

page.njkファイル:

{% extends "layout.njk" %}

{% block title %}ページタイトル{% endblock %}

{% block content %}
<h1>ページ内容</h1>
{% endblock %}

マクロ

[編集]

マクロの定義と使用

[編集]
{% macro input(name, value='', type='text') %}
    <input type="{{ type }}" name="{{ name }}" value="{{ value }}">
{% endmacro %}

{{ input('username') }}
{{ input('password', '', 'password') }}

インクルード

[編集]

パーシャルの使用

[編集]
{% include "header.njk" %}
{% include "sidebar.njk" ignore missing %}

カスタムフィルタとエクステンション

[編集]

カスタムフィルタの作成

[編集]
env.addFilter('shorten', function(str, count) {
    return str.slice(0, count || 5);
});

カスタムタグの作成

[編集]
env.addExtension('CustomTag', new function() {
    this.tags = ['customtag'];
    this.parse = function(parser, nodes, lexer) {
        // パース処理
    };
});

非同期処理

[編集]

非同期フィルタ

[編集]
env.addFilter('async', function(str) {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve(str.toUpperCase());
        }, 1000);
    });
}, true);

セキュリティ

[編集]

エスケープ処理

[編集]
  • autoescapeオプション
  • safe フィルタの使用
  • XSS対策

パフォーマンス最適化

[編集]

キャッシュ設定

[編集]
  • テンプレートのキャッシュ
  • プリコンパイル
  • 最適化オプション

デバッグとトラブルシューティング

[編集]

デバッグ方法

[編集]
  • debugステートメント
  • エラー処理
  • トレース情報

環境設定

[編集]

プロダクション設定

[編集]
nunjucks.configure('views', {
    autoescape: true,
    noCache: false,
    watch: false,
    throwOnUndefined: false
});

ベストプラクティス

[編集]

コード整理

[編集]
  • ファイル構成
  • 命名規則
  • モジュール化

エラー処理

[編集]
  • try/catchブロック
  • エラーページ
  • ログ記録

統合とツール

[編集]

フレームワーク統合

[編集]
  • Express.js
  • Next.js
  • その他のフレームワーク

ビルドツール

[編集]
  • Webpack
  • Gulp
  • Grunt

テスト

[編集]

テンプレートのテスト

[編集]
  • ユニットテスト
  • 統合テスト
  • スナップショットテスト

APIリファレンス

[編集]

主要なAPI

[編集]
  • configure()
  • render()
  • renderString()
  • compile()

コミュニティリソース

[編集]

ドキュメント

[編集]
  • 公式ガイド
  • チュートリアル
  • サンプルプロジェクト

サポート

[編集]
  • GitHubイシュー
  • Stack Overflow
  • コミュニティフォーラム