コンテンツにスキップ

Handlebars

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

概要

[編集]

Handlebarsは、HTMLテンプレートを効率的に作成するためのテンプレートエンジンです。シンプルな構文と強力な機能を組み合わせることで、動的なWebコンテンツの生成を容易にします。

基本構文

[編集]

変数の表示

[編集]

基本的な変数の表示には二重中括弧({{}})を使用します:

{{firstName}}
{{lastName}}

HTMLエスケープ

[編集]

デフォルトでは、Handlebarsは変数の値をHTMLエスケープします。三重中括弧({{{}}})を使用することで、エスケープを無効化できます:

{{{rawHtml}}}

制御構文

[編集]

if文

[編集]

条件分岐には#ifヘルパーを使用します:

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

each文

[編集]

配列やオブジェクトの繰り返し処理には#eachヘルパーを使用します:

{{#each users}}
  <div class="user">
    <h2>{{name}}</h2>
    <p>{{email}}</p>
  </div>
{{/each}}

カスタムヘルパー

[編集]

ヘルパーの定義

[編集]

JavaScriptでカスタムヘルパーを定義できます:

Handlebars.registerHelper('formatDate', function(date) {
    return new Date(date).toLocaleDateString();
});
使用例:
{{formatDate user.joinDate}}

パーシャル

[編集]

パーシャルの定義と使用

[編集]

再利用可能なテンプレート部品をパーシャルとして定義できます:

{{> userProfile}}

ブロックヘルパー

[編集]

カスタムブロックヘルパー

[編集]

より複雑な処理を行うブロックヘルパーを作成できます:

Handlebars.registerHelper('list', function(items, options) {
    const itemsAsHtml = items.map(item =>
        <code><li>${options.fn(item)}</li></code>
    ).join('');
    return <code><ul>${itemsAsHtml}</ul></code>;
});
使用例:
{{#list users}}
  {{name}} ({{email}})
{{/list}}

データの受け渡し

[編集]

コンテキスト

[編集]

テンプレートにデータを渡す基本的な方法:

const template = Handlebars.compile(source);
const html = template({
    user: {
        name: "山田太郎",
        email: "yamada@example.com"
    }
});

ベストプラクティス

[編集]

パフォーマンス最適化

[編集]
  • テンプレートのプリコンパイル
  • 複雑なヘルパーの使用を最小限に
  • 適切なキャッシング戦略の実装

セキュリティ考慮事項

[編集]
  • ユーザー入力のエスケープ
  • XSS攻撃の防止
  • 信頼できないデータのサニタイズ

よくある問題とその解決方法

[編集]

スコープの問題

[編集]

ネストされたブロック内で親スコープにアクセスする方法:

{{#each users}}
  {{../globalValue}}
  {{this.name}}
{{/each}}

デバッグ方法

[編集]
  • console.logヘルパーの使用
  • デバッグツールの活用
  • エラーハンドリング

高度な機能

[編集]

カスタムブロックパラメータ

[編集]
{{#each users as |user|}}
  {{user.name}}
{{/each}}

インラインパーシャル

[編集]
{{#*inline "userTemplate"}}
  <div class="user">{{name}}</div>
{{/inline}}

{{> userTemplate}}

APIリファレンス

[編集]

組み込みヘルパー

[編集]
  • if
  • unless
  • each
  • with
  • lookup
  • log

テンプレートオプション

[編集]
  • data
  • compat
  • strict
  • preventIndent

拡張機能とプラグイン

[編集]

主要な拡張機能

[編集]
  • handlebars-layouts
  • handlebars-helpers
  • handlebars-intl

デプロイメント

[編集]

ブラウザ環境

[編集]
<script src="handlebars.min.js"></script>

Node.js環境

[編集]
const Handlebars = require('handlebars');

バージョン互換性

[編集]

破壊的変更

[編集]

主要なバージョン間の重要な変更点と移行ガイド

コミュニティリソース

[編集]

参考文献

[編集]
  • 公式ドキュメント
  • チュートリアル
  • コミュニティフォーラム