memo

2022-07-31

rust で jinja2 っぽいテンプレートエンジンいくつか触ってみた感想

  • minijinja

    • mitsuhiko (jinja2 の作者だったような) 製

    • 実行時にテンプレートを読み込んで処理する

    • テンプレートに渡す値は serde を通して受け渡しする

      • なので serde で serialize/deserialize 可能な値しか渡せない

      • 型によっては、渡せはするけど文字列になっちゃってたりする

  • tera

    • (触ってない。ドキュメントを軽く見た感想)

    • minijinja と同じような感じっぽい?

      • 実行時にテンプレートを読み込む

      • serde で値を受け渡し

  • askama

    • macro でコンパイル時にテンプレートを読み込む系

      • rust のコードに変換される

      • コンパイルされて実行ファイルに組み込まれるので、実行時にはテンプレートファイルは不要

        • 逆に言うと、実行時にテンプレートを差し替えたりなどはできない

      • テンプレートを書き換えるたびにコンパイルし直す必要がある

    • rust のコードになるので、任意の型の値を普通にテンプレートに渡せる

      • 渡した値のメソッドなんかもテンプレート中で普通に呼べる

      • 型チェックもされる

    • エラーが分かりづらい

      • テンプレートのどこでエラーになったのかが分からない。

      • 「nightly の機能使えばもっと情報出せるよ」みたいなメッセージが出てるので、そのうちなんとかなるのかもしれない。