概要

編集

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
  • コミュニティフォーラム