Groovyのテンプレートエンジン

  • link:/category/programming/ [プログラミング]

  • Groovy

1. 概要

この入門チュートリアルでは、https://www.baeldung.com/groovy-language [Groovy]でテンプレートエンジンの概念を探ります。
Groovyでは、__ https://www.baeldung.com/groovy-strings [GString] __https://www.baeldung.com/groovy-strings [s]を使用して動的テキストを簡単に生成できます。 ただし、テンプレートエンジンを使用すると、静的テンプレートを使用して動的テキストをより適切に処理できます。
これらのテンプレートは、SMSや電子メールなどのさまざまな通知用の静的テンプレートを定義するのに便利です。

2. Groovyの_TemplateEngine_とは何ですか?

  • Groovyの_TemplateEngine_は、_createTemplate_メソッドを含む抽象クラスです。 + *

    Groovyで使用可能なすべてのテンプレートフレームワークエンジンは、_TemplateEngine_を拡張し、_createTemplate._を実装します。さらに、すべてのエンジンは_Template_インターフェイスオブジェクトを返します。
  • _Template_インターフェースにはメソッド_make_があり、変数をバインドするためのマップを取得します。*したがって、すべてのテンプレートフレームワークで実装する必要があります。

    Groovyで使用可能なすべてのテンプレートフレームワークの機能と動作について説明しましょう。

3. SimpleTemplateEngine

_SimpleTemplateEngine_は、_String_補間とスクリプトレットを使用して動的テキストを生成します。 このエンジンは、SMSや単純なテキストメールなどの単純な通知に非常に役立ちます。
例えば:
def smsTemplate = 'Dear <% print user %>, Thanks for reading our Article. ${signature}'
def bindMap = [user: "Norman", signature: "Baeldung"]
def smsText = new SimpleTemplateEngine().createTemplate(smsTemplate).make(bindMap)

assert smsText.toString() == "Dear Norman, Thanks for reading our Article. Baeldung"

4. StreamingTemplateEngine

一般的な意味では、_StreamingTemplateEngine_は_SimpleTemplateEngine._と同様に機能しますが、内部的にはhttp://docs.groovy-lang.org/latest/html/api/groovy/lang/Writable.html[_Writable_]クロージャーを使用してテンプレート。
同じ理由で、より大きな文字列(> 64K)を扱う場合にも利点があります。 したがって、_SimpleTemplateEngine._よりも効率的です。
静的なテンプレートを使用して動的な電子メールコンテンツを生成する簡単な例を作成しましょう。
まず、静的な_articleEmail_テンプレートを作成します。
Dear <% out << (user) %>,
Please read the requested article below.
<% out << (articleText) %>
From,
<% out << (signature) %>
ここでは、ダイナミックテキストには_ <%%> _スクリプトレットを使用し、ライターには_out_スクリプトレットを使用しています。
次に、_StreamingTemplateEngine_を使用してメールのコンテンツを生成します。
def articleEmailTemplate = new File('src/main/resources/articleEmail.template')
def bindMap = [user: "Norman", signature: "Baeldung"]

bindMap.articleText = """1. Overview
This is a tutorial article on Template Engines...""" //can be a string larger than 64k

def articleEmailText = new StreamingTemplateEngine().createTemplate(articleEmailTemplate).make(bindMap)

assert articleEmailText.toString() == """Dear Norman,
Please read the requested article below.
1. Overview
This is a tutorial article on Template Engines...
From,
Baeldung"""

5. GStringTemplateEngine

名前が示すように、_GStringTemplateEngine_は_GString_を使用して静的テンプレートから動的テキストを生成します。
まず、_GString_を使用して簡単な_email_テンプレートを作成しましょう。
Dear $user,
Thanks for subscribing our services.
${signature}
次に、_GStringTemplateEngine_を使用して動的コンテンツを作成します。
def emailTemplate = new File('src/main/resources/email.template')
def emailText = new GStringTemplateEngine().createTemplate(emailTemplate).make(bindMap)

6. XmlTemplateEngine

_XmlTemplateEngine_は、動的なXML出力を作成する場合に便利です。 入力としてXMLスキーマが必要であり、2つの特別なタグ、_ <gsp:scriptlet> _でスクリプトを挿入し、_ <gsp:expression> _で式を挿入できます。
たとえば、すでに説明した_email_テンプレートをXMLに変換しましょう。
def emailXmlTemplate = '''
<xs xmlns:gsp='groovy-server-pages'>
    <gsp:scriptlet>def emailContent = "Thanks for subscribing our services."</gsp:scriptlet>
    <email>
        <greet>Dear ${user}</greet>
        <content><gsp:expression>emailContent</gsp:expression></content>
        <signature>${signature}</signature>
    </email>
</xs>'''

def emailXml = new XmlTemplateEngine().createTemplate(emailXmlTemplate).make(bindMap)
したがって、_emailXml_にはXMLがレンダリングされ、コンテンツは次のようになります。
<xs>
  <email>
    <greet>
      Dear Norman
    </greet>
    <content>
      Thanks for subscribing our services.
    </content>
    <signature>
      Baeldung
    </signature>
  </email>
</xs>
XML出力がテンプレートフレームワークによってインデントされ、美化されていることに注目するのは興味深いことです。

7. MarkupTemplateEngine

このテンプレートフレームワークは、HTMLおよびその他のマークアップ言語を生成する完全なパッケージです。
さらに、ドメイン固有言語を使用してテンプレートを処理し、Groovyで利用可能なすべてのテンプレートフレームワークの中で最も最適化されています。

7.1. HTML

すでに説明した_email_テンプレートのHTMLをレンダリングする簡単な例を書いてみましょう。
def emailHtmlTemplate = """
html {
    head {
        title('Service Subscription Email')
    }
    body {
        p('Dear Norman')
        p('Thanks for subscribing our services.')
        p('Baeldung')
    }
}"""
def emailHtml = new MarkupTemplateEngine().createTemplate(emailHtmlTemplate).make()
したがって、_emailHtml_のコンテンツは次のようになります。
<html><head><title>Service Subscription Email</title></head>
<body><p>Dear Norman</p><p>Thanks for subscribing our services.</p><p>Baeldung</p></body></html>

7.2. XML

同様に、XMLをレンダリングできます。
def emailXmlTemplate = """
xmlDeclaration()
    xs{
        email {
            greet('Dear Norman')
            content('Thanks for subscribing our services.')
            signature('Baeldung')
        }
    }"""
def emailXml = new MarkupTemplateEngine().createTemplate(emailXmlTemplate).make()
したがって、_emailXml_のコンテンツは次のようになります。
<?xml version='1.0'?>
<xs><email><greet>Dear Norman</greet><content>Thanks for subscribing our services.</content>
<signature>Baeldung</signature></email></xs>

7.3. TemplateConfiguration

_XmlTemplateEngine_などとは異なり、このフレームワークのテンプレート出力はインデントされず、それ自体で美化されません。
このような構成では、_TemplateConfiguration_クラスを使用します。
TemplateConfiguration config = new TemplateConfiguration()
config.autoIndent = true
config.autoEscape = true
config.autoNewLine = true

def templateEngine = new MarkupTemplateEngine(config)

7.4. 国際化

さらに、_TemplateConfiguration_の_locale_プロパティを使用して、国際化のサポートを有効にすることができます。
最初に、静的テンプレートファイル_email.tpl_を作成し、既に説明した_emailHtmlTemplate_文字列をそのファイルにコピーします。 これはデフォルトのテンプレートとして扱われます。
同様に、日本語の場合は_email_ja_JP.tpl_、フランス語の場合はemail_fr_FR.tplなどのロケールベースのテンプレートファイルを作成します。
最後に、必要なのは、_TemplateConfiguration_オブジェクトに_locale_を設定することだけです。
config.locale = Locale.JAPAN
したがって、対応するロケールベースのテンプレートが選択されます。

8. 結論

この記事では、Groovyで使用可能なさまざまなテンプレートフレームワークを見てきました。
これらの便利なテンプレートエンジンを活用して、静的テンプレートを使用して動的テキストを生成できます。 したがって、さまざまな種類の通知または画面上のメッセージとエラーの動的な生成に役立ちます。
いつものように、このチュートリアルのコード実装は、https://github.com/eugenp/tutorials/tree/master/core-groovy-2 [GitHub]プロジェクトで利用できます。