AMPと相性良い.NET向けテンプレートエンジンを探す→ひとまずDotLiquidに決める

お読み頂いているこのblogはAMP版のみで構成されており、いわゆる通常版のページが存在しません*1

blogの元データはRe:VIEWで作成しているため、出力までの間になにかしらのテンプレートエンジンが必要です。大層な置換作業をやるわけじゃないし、そんなのなんでもいいじゃないかと思わないでもないのですが、やはり不便な箇所が色々と出てくるためそうもいきません。

テンプレートエンジンを雑に選ぶと後で苦労する(経験上)ので、ざっと選定条件を決めて選んでみました。

条件

[*1] つまり、ヘッダ内のcanonical URI指定がAMP版のページ自体を指しています

書式はliquidあたりがまあ無難→DotLiquid

RazorEngineはなんというかT4系の用途に振りまくっている上にnetcoreappで扱えないので無しとしました。もう2-3探したんですが、きっちり評価する前に心が折れてきたので適当にDotLiquidを使ってみることにしました。

DotLiquidは、その名のとおり.NETで使えるliquid系のテンプレートエンジンです。liquidはそれなりに組み込み演算子などが充実しており、そこそこ仕様をカバーして実装するのが面倒そうなのですが、DotLiquidは割と頑張ってほとんどのケースを実装しているようです。issuesを眺めてみるとそれなりに非対応のエッジケースがありそうですが、きっと自分が踏むことはないので安心しておきます(フラグ)。

DotLiquidのよいところ

DotLiquidのイマイチなところ

メンテナが心折れている

もう1年弱ぐらいメンテナ求むとREADMEに書かれています。メンテナが悪いというわけでは全くないのですが、やはりPRは放置気味です。

{{{ }}}による謎のリテラル表記拡張がおこなわれている

本題を思い出すと、私がDotLiquidを適用したい相手はAMP用のテンプレートです。そしてAMPというか、その中でamp-listに適用できるmustacheによるテンプレート処理では、{{{ }}}が意味を持っています。

ここで大変微妙なことに、DotLiquidは「Shorthand記法」をいくつか持っています。このなかに「指定範囲の記述をliquid処理エンジンで無視する」ための記述である「{literal} ~ {/literal}」に展開される、「{{{ ... }}}」があります。この構文はhttps://github.com/dotliquid/dotliquid/blob/master/src/DotLiquid/Tags/Literal.cs#L26-L33で展開されており、しかも展開をオフにするオプションがありません。

これは少々問題ですが、差し当たり自分で使う範囲ではamp-listの中で{{{ }}}を使わないつもりなのでこのまま進めることにします。もうしばらく使ってみて不便そうならDotLiquidへパッチを投げるか考える方針でいきます(前述のメンテナ心折れ状態により、パッチを投げるハードルが若干上がっている)。

最終更新: 2017/07/14 21:59(UTC)

Copyright © Kei Nakazawa 2017, Licensed under CC-4.0-BY unless otherwise noted.