Zigで型安全なHTMLテンプレートを実現する「zt」
Type-safe HTML templating in Zig
Zigで型安全なHTMLテンプレートを実現するライブラリ「zt」を紹介。テンプレートはビルド時にZigコードへ変換され、コンパイル時に型チェックが行われる。動的な値はデフォルトでHTMLエスケープされ、XSS対策も万全。アロケーションなしでstd.Io.Writerに直接書き込む高速設計。htmxやDatastarと組み合わせれば、JavaScriptなしでSPAも構築可能。
テンプレートのエラーが単なるZigコンパイラのエラーになるのが一番気に入っています。
HNでの議論
79- solatic
この設計が大好きだ。特にZigのビルドチェーンを活用している点が素晴らしい。再ビルドは十分速くなるはずで、開発サイクルにおいて実質的にJSスタイルのホットリロードが得られるだろう。あとはZig用の https://github.com/air-verse/air が必要だ(ZiexにはCLIに組み込まれているが、それはZiex専用だ)…
ベンチマークが見られるのを楽しみにしている!
- pjmlp
> 2年前、私はZigを始めた。まさかこんな低レベル言語でWeb開発を検討するとは思わなかった。
これはちょっと面白い発言だ。著者は2000年にWeb開発を始め、PHP 3.0を使っていたのだから。
私は1997年に始めた。分散システムの授業でPerlとCでCGIを書く課題があった。
1999年から2001年にかけて、私の雇用主でのWeb開発はほとんどTclとCだった。ASPは当然VBとC++ COMコンポーネントの混合で、Apacheのmod_something拡張やIIS ISAPIモジュールをCやC++で書くのも楽しかった。
ああ、MicrosoftはATLServerも出していた。Web開発にATLを使いたくない人がいるだろうか?一方Borland/InpriseはDelphiとC++ Builder向けに同様のものを出していた。
PHP 3.0自体、まだ組み込み機能がほとんどない時代だったので、Cで拡張モジュールを書くのはごく普通だった。
だから、2010年代に遅いスクリプト言語が取って代わる前の状態に戻ることを誰も考えなかった、というのを読むのは皮肉な感じがする。
- stefs
私も自分で設計した「型安全」テンプレートエンジン(Kotlin用、Gradleプラグインとして)を使っているが、逆のアプローチだ。モデルクラスをテンプレートに埋め込むのではなく、すべての値をパラメータとして受け取るテンプレートクラスを生成する。
つまり、MyTemplate.tpl.html
{if $foo}hello world, {$myname}!{else}goodbye, world.{/if}
これは次のように使えるKotlinクラスを生成する:
MyTemplate(
foo = true,
myname = "bar"
).toString()
私にとって最大の利点は、完全で自由なIDEサポートが得られることだ。マッピングが1対1でない場合でも追加のビューモデルを書く必要がない。そしてパフォーマンスもかなり良い。結局のところ、ベースラインのJDKのものを除いてランタイムのパース/コンパイル/インタープリトが一切ないからだ(もっと速いエンジンもあるが)。
https://codeberg.org/h34tnet/tempolin
警告:今のところユーザーは私だけなので、本番環境では使わないでほしい。それに、今いくつかの改善に取り組んでいるが、まだプッシュしていない。
- fergie
W3C:なぜ単に <includes src="./header.html"> を用意して終わりにできないのか?
- weitzj
記事ありがとう。10年ほど前にGoogle Soyテンプレートを使っていたのを覚えている。これは例えばHelmテンプレートやGo Templatesを作るときに今使われているものと似ていると思う。
HTMLエスケープやJavaScriptエスケープなどが組み込まれている。
Google SoyのZigラッパーはどこかにないだろうか?