FTL ファイル形式とは?
.ftl は FreeMarker Template Language ファイルです。これは Apache FreeMarker Java テンプレートエンジンによって処理されるプレーンテキストのテンプレートです。FreeMarker は JVM 上で動作し、静的な出力コンテンツ(HTML、XML、プレーンテキスト、SQL、ソースコード、メール)と FTL ディレクティブおよび式をマージして、サーバー側で最終的なテキスト出力を生成します。
.ftl ファイルは3種類の構文を混合して使用します。<#if>、<#list>、<#include>、<#macro>、<#assign> などのディレクティブ、${expression} と記述されるインターポレーション(補間)、そして <#-- comment --> 形式の FTL コメントです。これらの構造以外のすべては、変更されずに出力にそのまま渡されます。
ファイルの先頭にあるオプションの <#ftl> ヘッダーディレクティブでは、ファイルのエンコーディング、出力形式、自動エスケープルール、空白の処理を宣言できます。これがない場合、FreeMarker は呼び出し元の Java アプリケーションでグローバルに設定されたエンコーディングと設定を適用します。
.ftl と並んで2つの専門的なバリアントが存在します。.ftlh は HTML 自動エスケープをトリガーし、.ftlx は XML 自動エスケープをトリガーします。これらは共に FreeMarker 2.3.24 で導入されました。これにより、すべてのテンプレートで明示的なエスケープ呼び出しを必要とせずに、クロスサイトスクリプティングのリスクを軽減できます。
FreeMarker は、Spring MVC、Apache Struts、Play Framework などの Java ウェブフレームワークや、コード生成パイプライン、ドキュメントテンプレートシステムで広く使用されています。プロジェクトは2015年に Apache Software Foundation に移行しました。現在のリリースは FreeMarker 2.3.34(2024年)です。VS Code と IntelliJ IDEA はどちらもプラグインを介して FTL の構文ハイライトをサポートしています。
セキュリティと安全性
リスク: LOWFTLテンプレートはプレーンテキストファイルであり、任意のテキストエディタで安全に開くことができます。テンプレートは JVM 上のサーバー側で実行され、クライアント側での実行はありません。テンプレートのレンダリングが安全でない設定で実行されている場合、悪意のあるテンプレートが有害な FreeMarker ディレクティブ(例:<#assign exec="freemarker.template.utility.Execute"?new()>)を実行する可能性がありますが、これはサーバー側の設定ミス(サーバーサイド・テンプレート・インジェクション / SSTI)の問題であり、ファイルを開くエンドユーザーに対するリスクではありません。
形式の詳細
概要FTL ファイルを開くプログラム
.ftl ファイルに対して、構文ハイライト、コード補完、エラー検出などの FreeMarker サポートを組み込みで提供しています。 .ftl ファイルを直接開けます。構文ハイライトを利用するには、Marketplace から «FreeMarker» 拡張機能をインストールしてください。編集のみ可能で、処理(レンダリング)は行えません。 .ftl ファイルを処理するには、Java プロジェクトに freemarker.jar を含め、new Configuration(); Template t = cfg.getTemplate("template.ftl"); t.process(dataModel, writer) を呼び出します。 .ftl ファイルに対して、構文ハイライト、コード補完、エラー検出などの FreeMarker サポートを組み込みで提供しています。 .ftl ファイルを直接開けます。構文ハイライトを利用するには、Marketplace から «FreeMarker» 拡張機能をインストールしてください。編集のみ可能で、処理(レンダリング)は行えません。 .ftl ファイルを直接開けます。構文ハイライトを利用するには、Marketplace から «FreeMarker» 拡張機能をインストールしてください。編集のみ可能で、処理(レンダリング)は行えません。 技術的詳細
詳細仕様| テンプレート構文スタイル | ディレクティブベース:`<#tag>` ディレクティブ + `${expression}` インターポレーションを静的コンテンツに混合 |
| デフォルトエンコーディング | デフォルトは UTF-8。ファイル先頭のオプションの `<#ftl>` ヘッダーディレクティブ内の `encoding` 属性で上書き可能 |
| 実行環境 | Java 仮想マシン (JVM)。FreeMarker ライブラリによってサーバー側で処理 |
| 出力形式 | HTML、XML、プレーンテキスト、SQL、ソースコード、メール本文など、あらゆるテキスト形式 |
| ディレクティブのカテゴリ | フロー制御(`<#if>`、`<#list>`)、代入(`<#assign>`、`<#local>`)、定義(`<#macro>`、`<#function>`)、インクルード(`<#include>`、`<#import>`) |
| インターポレーション構文 | `${expression}`(文字列/数値)。レガシーな数値補間として `#{number}` もサポート |
| コメント構文 | `<#-- comment -->` - レンダリングされた出力からは完全に削除される |
| ヘッダーディレクティブ | ファイル先頭のオプションの `<#ftl>`。encoding、output_format、auto_esc、strip_whitespace、attributes を設定 |
| 自動エスケープバリアント | `.ftlh`(HTML自動エスケープ)および `.ftlx`(XML自動エスケープ) - FreeMarker 2.3.24 で導入 |
| データモデルへのアクセス | 呼び出し元アプリケーションからマップとして渡される Java オブジェクト。テンプレートはモデルを読み取れるが変更は不可 |
| 空白制御 | 設定可能な `strip_whitespace`。行ごとのきめ細かな制御には `<#t>`、`<#lt>`、`<#rt>` ディレクティブを使用 |
| テンプレートの再利用 | リテラルな取り込みには `<#include>`、名前空間スコープのマクロ/関数ライブラリには `<#import>` を使用 |
| 典型的なファイルサイズ | テンプレートファイルあたり 1 KB - 200 KB |
| リリース日 | circa 2002 (FreeMarker first release) |
| 最新バージョン | FreeMarker 2.3.34 (2024); hosted at Apache |
| オープンスタンダード | はい · ロイヤリティフリー |
| 仕様書 | freemarker.apache.org |
FTL の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。FTL ファイルについて最初の質問をしてみましょう。
よくある質問
FTLファイルとは何ですか?
FTLファイルを開いて編集するにはどうすればよいですか?
FTLテンプレートを処理・レンダリングするにはどうすればよいですか?
freemarker.jar を追加し(Maven: org.freemarker:freemarker:2.3.34)、Configuration を作成してテンプレートを読み込み、template.process(dataModel, outputWriter) を呼び出します。FreeMarker は Java ライブラリであり、スタンドアロンのツールではありません。FTLファイルを直接 HTML に変換できますか?
.ftl、.ftlh、.ftlx の違いは何ですか?
.ftl は基本の拡張子(自動エスケープなし)です。.ftlh は HTML 自動エスケープを有効にし(XSSを防止)、.ftlx は XML 自動エスケープを有効にします。すべてのウェブ HTML テンプレートには .ftlh を使用してください(FreeMarker 2.3.24以降)。FreeMarker は Velocity(.vmファイル)と同じですか?
.ftl)は <#directive> 構文を使用し、Velocity(.vm)は #directive 構文を使用します。