出来事の日付:2026年10月12日
Ztという新しい実験的なテンプレートライブラリが、Zigアプリケーションに型を利用したコンパイル時のHTML生成をもたらそうとしている。開発者のピーター・ラリクは、このプロジェクトをGoのTemplの手法を応用したものと説明した。テンプレートは`zig build`の実行中に解析され、Zigのソースコードへ変換されて、アプリケーションから直接インポートされる。この設計により、テンプレートとアプリケーションコードは、実行時に緩い構造の値を受け渡す代わりに、型を共有できる。
生成されたレンダラーは、Zigの標準入出力のwriter抽象化を通じて書き込む。アプリケーションは出力をソケットへストリーム送信することも、バッファーに蓄積することもできる。描画処理は、追加のメモリー割り当てを伴わない一連の書き込みとして設計されている。ラリクは、APIバックエンドやウェブアプリケーションを対象とするzioとDustyのライブラリを開発するなかで、ztを作った。
この提案の中心にあるのは型検査だ。テンプレートのパラメーターにはアプリケーションが定義した型を使えるため、フィールド名の誤記や互換性のない引数はコンパイラーのエラーとなる。生成されたソースには元のテンプレート内の位置を示すコメントが含まれ、開発者がZigの診断メッセージと、その原因となったマークアップを結び付ける助けとなる。コンポーネントは値として渡すことができ、`@children`の仕組みは別のテンプレートを包み込むレイアウトを支える。
このライブラリは、動的コンテンツについて防御的な初期設定も用意している。テキストや属性に挿入する値は、自動的にHTMLエスケープされる。`href`や`src`などのURL属性に入る値については危険なスキームがないか検査し、生のHTMLには明示的な構文を要求する。要素は正しく閉じる必要があり、これにより不正な出力のよくある一類型を防ぐ。これらの対策ですべてのウェブ上のセキュリティリスクがなくなるわけではないが、危険になり得る操作をソースコード上で見えるようにする。
制御フローには`if`、`for`、`switch`といったZigの構文を使い、テンプレート内ではペイロードキャプチャも利用できる。現行の構文には、開発者も認める曖昧さがある。これらのキーワードで始まる行はコードと解釈されるため、同じ語で始まる通常の文章は、囲みを加えたり別の表現にしたりしないと構文解析エラーを起こし得る。ラリクは、この問題を解消するため、`@if`、`@for`、`@switch`のように接頭記号を付ける形式を検討している。
より広い目標は、JavaScriptを多用するフロントエンドを必須とせずに、サーバー側の描画で双方向性を実現することだ。ラリクは、アプリケーションのロジックの大部分をサーバーに置いたまま動的なアプリケーションを作る方法として、htmxやDatastarなどのツールを挙げている。Dustyのデモアプリケーションでは、ztのテンプレートを周辺のウェブ技術と組み合わせている。
Ztは成熟したソフトウェアとして提示されているわけではない。ラリクはすでに複数の人が利用していると述べた一方、特に制御フローの構文について、問題の報告や設計への意見を求めている。したがって、その意義は本番運用への準備が整ったという主張ではなく、アーキテクチャーにある。Zigのコンパイル時の機能を活用すれば、出力の明示性、型安全性、低水準の制御を保ちながら、より高水準のHTML記述を支援できるということだ。



