お読み頂いているこのblogはAMP版のみで構成されており、いわゆる通常版のページが存在しません*1。
blogの元データはRe:VIEWで作成しているため、出力までの間になにかしらのテンプレートエンジンが必要です。大層な置換作業をやるわけじゃないし、そんなのなんでもいいじゃないかと思わないでもないのですが、やはり不便な箇所が色々と出てくるためそうもいきません。
テンプレートエンジンを雑に選ぶと後で苦労する(経験上)ので、ざっと選定条件を決めて選んでみました。
[*1] つまり、ヘッダ内のcanonical URI指定がAMP版のページ自体を指しています
RazorEngineはなんというかT4系の用途に振りまくっている上にnetcoreappで扱えないので無しとしました。もう2-3探したんですが、きっちり評価する前に心が折れてきたので適当にDotLiquidを使ってみることにしました。
DotLiquidは、その名のとおり.NETで使えるliquid系のテンプレートエンジンです。liquidはそれなりに組み込み演算子などが充実しており、そこそこ仕様をカバーして実装するのが面倒そうなのですが、DotLiquidは割と頑張ってほとんどのケースを実装しているようです。issuesを眺めてみるとそれなりに非対応のエッジケースがありそうですが、きっと自分が踏むことはないので安心しておきます(フラグ)。
もう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.