Nunjucks
概要
編集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
- コミュニティフォーラム