概要 overview
Adobe Experience Manager(AEM)でサポートされるHTMLテンプレート言語(HTL)は、セキュリティを強化する高度に生産的なエンタープライズレベルの web フレームワークを提供することを目的としています。 また、Java の知識を持たないHTML開発者でも、AEM プロジェクトに参加できます。
AEM 6.0 で導入されたHTMLテンプレート言語は、AEMでのHTML用にサーバーサイドで優先かつ推奨されるテンプレートシステムです。 堅牢なエンタープライズ Web サイトを構築しなければならない Web 開発者にとって、HTL は安全性と開発効率の向上に役立ちます。
セキュリティの向上 increased-security
HTMLテンプレート言語(HTL)は、すべての出力変数にコンテキスト対応のエスケープを自動的に適用することで、サイトのセキュリティを強化し、他のほとんどのテンプレートシステムよりも安全になります。 HTL がこのアプローチを可能にするのは、HTMLの構文を理解し、マークアップ内の位置に基づいて式に対して必要なエスケープを調整できるからです。 このメソッドを使用すると、href
属性または src
属性に配置された式が、その他の属性に配置された式とは別にエスケープされたりします。
JSP のようなテンプレート言語でもこれと同じ結果が得られますが、開発者は各変数に対してエスケープが適切に適用されたかどうかを手動で確認する必要があります。適用されたエスケープを 1 つだけ省略したり誤ったりすると、クロスサイトスクリプティング(XSS)の脆弱性が十分に生じる可能性があるので、Adobeでは、HTL を使用してこのタスクを自動化することを決定しました。 開発者は必要に応じて表現に対して別のエスケープを指定することもできますが、HTL のデフォルトの動作のほうが目的の動作に対応する可能性が高く、エラーの発生確率を減らすことができます。
開発の簡略化 simplified-development
HTML テンプレート言語は学習が容易であり、機能が意図的に制限されているため、複雑さがなく常にシンプルです。また、マークアップを構成してロジックを呼び出すための強力なメカニズムが用意されている一方で、マークアップとロジックの間で常に関心事の分離が厳密に行われています。HTL は標準HTML5 であり、式とデータ属性を使用して、マークアップに動的な動作の注釈を付けます。 このアプローチでは、マークアップの有効性と読みやすさが維持されます。 式とデータ属性の評価は完全にサーバーサイドで行われ、クライアントサイドでは表示されません。目的のJavaScript フレームワークを使用すれば問題ありません。
これらの機能を使用すると、Java の知識を持たないHTML開発者は HTL テンプレートを編集して開発チームに組み込み、フルスタック Java 開発者との共同作業を効率化できます。 また、Java 開発者がHTMLを気にすることなくバックエンドコードに集中できるようにします。
コストの削減 reduced-costs
セキュリティの向上、開発の簡略化、チームの共同作業の向上により、AEM プロジェクトの負荷軽減、市場投入までの時間(TTM)短縮、総所有コスト(TCO)の削減を実現します。
HTMLテンプレート言語を使用してAdobe.com サイトを再実装すると、プロジェクトのコストと期間が最大で約 25% 削減されることが示されました。
上の図は、HTL によって可能になる可能性のある効率性の次の改善を示しています。
- HTML/CSS/JS: HTMLのデベロッパーは HTL テンプレートを直接編集でき、フロントエンドデザインをAEM コンポーネントに直接実装でき、個別に実装する必要がなくなります。 このアプローチにより、フルスタック Java 開発者による痛みを伴う繰り返しを減らすことができます。
- JSP/HTL: HTL 自体は Java に関する知識を必要とせず、記述も簡単なので、HTMLに関する専門知識を持つデベロッパーであればテンプレートを編集できます。
- Java: HTL が提供するシンプルな Use-API のおかげで、ビジネスロジックが実装されたインターフェイスが明確になり、Java 開発全体としてもメリットがあります。
ビデオの紹介 video
AEM Gems セッションのビデオでは、HTL の目的の概要と実装例を紹介しています。
このビデオでは、HTL を 旧名称の Sightly と呼んでいます。
次の手順 next-steps
HTL の目的と利点を理解できたので、HTL 言語の使用を開始できます。 HTMLテンプレート言語の概要を参照してください。