
テンプレートプロセッサ(テンプレートエンジンまたはテンプレートパーサーとも呼ばれる)は、テンプレートとデータ(データモデルで定義される)を組み合わせて、結果のドキュメントまたはプログラムを生成するように設計されたソフトウェアです。[ 1 ] [ 2 ] [ 3 ]テンプレートが記述されている言語は、テンプレート言語またはテンプレート言語として知られています。この記事では、結果ドキュメントとは、ドキュメント、Web ページ、ソース コード(ソース コード生成の場合)など、全体または断片を含む、あらゆる種類のフォーマットされた出力を指します。テンプレートエンジンは通常、 Web テンプレート システムまたはアプリケーション フレームワークの一部として含まれており、プリプロセッサまたはフィルタとしても使用できます。
テンプレートエンジンは通常、ほとんどの高級プログラミング言語に共通する機能を備えており、特にプレーンテキストを処理するための機能に重点が置かれています。
そのような機能には以下が含まれます。
テンプレートプロセッサは通常、システムやフレームワークの一部として使用される独立したソフトウェアですが、シンプルなテンプレート言語は、汎用プログラミング言語の文字列処理機能や、テキスト処理プログラム(特にテキストエディタやワードプロセッサ)によく含まれています。テンプレート言語は、本格的なテンプレートプロセッサの高度な機能とは対照的に、一般的に単純な置換のみを行う言語ですが、多少のロジックを含む場合もあります。
簡単な例としては、多くのプログラミング言語に見られる「printf」の出力書式文字列や、多くのテキストエディタやソースコードエディタに見られるスニペットなどが挙げられます。ワープロソフトではテンプレートが一般的な機能であり、テンプレートへの自動入力はしばしば差し込み印刷と呼ばれます。
構文解析とテンプレート化の相補的な性質を示す例として、sedsテキストプロセッサの (置換) コマンドがあります。これは、 edテキストエディタの検索と置換に由来します。置換コマンドは の形式で、は入力を解析するための正規表現、 は出力用の単純なテンプレートです。出力は、リテラルテキスト、または「完全一致」の文字、あるいはn番目の部分式に対するから までの特殊エスケープシーケンスを含むフォーマット文字列のいずれかです。たとえば、 は、既存の「s」を重複させることなく、「cat」または「dog」のすべての出現箇所を「cats」または「dogs」に置換します。は正規表現の最初の (そして唯一の) 部分式であり、フォーマット文字列 では、これを出力に置換します。s/regexp/replacement/regexpreplacement&\1\9s/(cat|dog)s?/\1s/g(cat|dog)\1
すべてのテンプレート処理システムは、少なくとも以下の主要要素で構成されています。
これは、リレーショナルデータベース、 XMLなどのソースファイル、フラットファイルデータベースの代替フォーマット、スプレッドシート、またはその他の様々なフォーマット済みデータソースのいずれかである可能性があります。テンプレート処理システムの中には、使用できるデータの種類が制限されているものもあります。一方、最大限の柔軟性を追求し、多様なデータタイプに対応できるように設計されたシステムもあります。
ソーステンプレートは従来、以下のように指定されます。
テンプレートエンジンの役割は以下のとおりです。
さらに、一部のテンプレートエンジンでは、追加の設定オプションが利用可能です。
テンプレートエンジンは、データベースとルールに基づいてフォーマットされた出力(通常はWebアプリケーションで使用されるHTML)をレンダリングするために使用されるエンジンであるため、ドキュメントの表示とビジネスロジックを分離し、開発者とデザイナーが別々に作業できるようにするのに役立ちます。ほとんどのテンプレートエンジンには、サポートされている特定の標準[ 4 ]があります。これらは、ほとんどのテンプレートエンジンでサポートされている標準機能です。
通常、これは解析するテンプレートを定義し、それをレンダリングして指定されたコンテキスト(データモデル)を与えることを意味します[ 5 ]。しかし、パフォーマンスのためにテンプレートをコンパイルするように設計されたエンジンもあれば、実行時に解釈するエンジンもあります。
テンプレートエンジンの主な利点は、システムのセキュリティ機能(自動エスケープ)を強化することです。また、キャッシュによるデータ処理で、高トラフィックとマシンパフォーマンスの最適化を保証します[ 6 ]。一方、欠点としては、構文の複雑さが多少増すことが挙げられます。また、ロジックがテンプレートにエスケープされ、ウォークとアクセスが分離されるリスクも生じ、テンプレートによるロジックフィルタリングの脅威につながります[ 7 ]。
もう1つの問題は、バックアップシステムが弱いテンプレートエンジンでは任意のコード実行が発生する可能性があることです。このため、テンプレートエンジンは、AI支援開発のコンテキストで構造化された保守可能な出力を生成するために依然として重要ですが、一部のワークフローでは、テンプレートエンジンをAIコード生成ツールと統合し始めたり、コンポーネントベースのフレームワークのように従来のテンプレートエンジンへの依存度が低い別の角度からアプローチするようになっています[ 8 ]。
これらは文書全体、または文書の一部で構成される場合があります。
テンプレート処理は、さまざまな目的で多様な場面で利用されています。具体的な用途は通常、使用するソフトウェアアプリケーションやテンプレートエンジンによって異なります。しかし、テンプレート処理システムの柔軟性により、設計者が当初意図していなかった用途にも、型破りな使い方が可能になる場合が少なくありません。
テンプレートエンジンとは、現代のプログラミング言語の主要な機能をすべて備えた、特定の種類のテンプレート処理モジュールです。テンプレートエンジンという用語は、テンプレートとデータを処理してテキストを出力することを主な、あるいは唯一の目的とするプログラミング言語を一般化した説明として発展しました。この用語は、Webテンプレートシステムを使用したWeb開発に最も顕著に適用されていますが、他のコンテキストにも適用されています。[ 9 ]
文書生成フレームワークは通常、文書生成の中心的なモデルとしてテンプレート処理を使用する。
ソースコード生成ツールは、特定のアプリケーションドメイン、特定の組織向け、またはコンピュータプログラマーの生産プロセスを簡素化するために、抽象データモデル(UML、リレーショナルデータ、ドメイン固有のエンタープライズデータストアなど)からソースコード(結果ドキュメントとして)を生成することをサポートします。
ウェブテンプレートエンジンは、ウェブテンプレートとソースデータ(通常はリレーショナルデータベースから取得)を処理して、1つ以上の出力ウェブページまたはページフラグメントを生成します。通常、ウェブテンプレートシステムまたはアプリケーションフレームワークの一部として組み込まれています。現在、テンプレート処理ソフトウェアは、ウェブ開発の分野で最も頻繁に使用されています。
XSLTは、 W3Cによって設計されたテンプレート処理モデルです。主にXMLデータの変換(Webドキュメントやその他の出力への変換)を目的として設計されています。
Perl、Python、PHP、Ruby、C#、Java、Goなどのプログラミング言語は、ネイティブに、またはアドオンライブラリやモジュールを介してテンプレート処理をサポートしています。JavaServer Pages、[ 10 ] Active Server Pages、[ 11 ] Genshi(Python用)、eRubyは、Webアプリケーション開発専用に設計されたテンプレートエンジンの例です。
さらに、テンプレート処理は、テキストエディタ、IDE、リレーショナルデータベース管理システムなどのソフトウェアパッケージのサブ機能として含まれている場合もあります。