やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

tera-cli 0.1.3 テンプレートエンジンがinlucdeでエラー

 Rust製なので高速。だがincludeするとエラーになって使えなかった。

成果物

情報源

概要

 tera-cliteraのコマンドツール版。teraRust製のテンプレートエンジンで、jinja, Django template languageと類似した形式である。

 tera-clijson, toml, yamlファイルを入力として受け取れる。

インストール

cargo install --git https://github.com/chevdor/tera-cli

ログ(10m 02s)

    Updating git repository `https://github.com/chevdor/tera-cli`
  Installing tera-cli v0.1.3 (https://github.com/chevdor/tera-cli#5bf7c96d)
    Updating crates.io index
  Downloaded humansize v1.1.1
  Downloaded bstr v0.2.16
  Downloaded textwrap v0.12.1
  Downloaded typenum v1.13.0
  Downloaded globset v0.4.8
  Downloaded proc-macro-error-attr v1.0.4
  Downloaded proc-macro-error v1.0.4
  Downloaded dtoa v0.4.8
  Downloaded generic-array v0.12.4
  Downloaded env_logger v0.8.4
  Downloaded tera v1.12.1
  Downloaded strsim v0.10.0
  Downloaded ignore v0.4.18
  Downloaded serde_yaml v0.8.17
  Downloaded os_str_bytes v2.4.0
  Downloaded clap_derive v3.0.0-beta.2
  Downloaded clap v3.0.0-beta.2
  Downloaded humantime v2.1.0
  Downloaded 18 crates (924.0 KB) in 2.19s
   Compiling memchr v2.4.0
   Compiling autocfg v1.0.1
   Compiling libc v0.2.98
   Compiling cfg-if v1.0.0
   Compiling proc-macro2 v1.0.27
   Compiling unicode-xid v0.2.2
   Compiling syn v1.0.73
   Compiling version_check v0.9.3
   Compiling log v0.4.14
   Compiling serde v1.0.126
   Compiling regex-syntax v0.6.25
   Compiling bitflags v1.2.1
   Compiling ucd-trie v0.1.3
   Compiling lazy_static v1.4.0
   Compiling crossbeam-utils v0.8.5
   Compiling maplit v1.0.2
   Compiling same-file v1.0.6
   Compiling unic-common v0.9.0
   Compiling fnv v1.0.7
   Compiling once_cell v1.8.0
   Compiling ryu v1.0.5
   Compiling unic-char-range v0.9.0
   Compiling serde_json v1.0.64
   Compiling unicode-segmentation v1.8.0
   Compiling ppv-lite86 v0.2.10
   Compiling termcolor v1.1.2
   Compiling linked-hash-map v0.5.4
   Compiling deunicode v0.4.3
   Compiling itoa v0.4.7
   Compiling unicode-width v0.1.8
   Compiling hashbrown v0.11.2
   Compiling vec_map v0.8.2
   Compiling humansize v1.1.1
   Compiling dtoa v0.4.8
   Compiling strsim v0.10.0
   Compiling humantime v2.1.0
   Compiling percent-encoding v2.1.0
   Compiling os_str_bytes v2.4.0
   Compiling num-traits v0.2.14
   Compiling num-integer v0.1.44
   Compiling indexmap v1.7.0
   Compiling proc-macro-error-attr v1.0.4
   Compiling proc-macro-error v1.0.4
   Compiling pest v2.1.3
   Compiling walkdir v2.3.2
   Compiling unic-ucd-version v0.9.0
   Compiling thread_local v1.1.3
   Compiling unic-char-property v0.9.0
   Compiling heck v0.3.3
   Compiling yaml-rust v0.4.5
   Compiling slug v0.1.4
   Compiling textwrap v0.12.1
   Compiling unic-ucd-segment v0.9.0
   Compiling pest_meta v2.1.3
   Compiling aho-corasick v0.7.18
   Compiling bstr v0.2.16
   Compiling getrandom v0.2.3
   Compiling atty v0.2.14
   Compiling quote v1.0.9
   Compiling unic-segment v0.9.0
   Compiling regex v1.5.4
   Compiling rand_core v0.6.3
   Compiling toml v0.5.8
   Compiling serde_yaml v0.8.17
   Compiling rand_chacha v0.3.1
   Compiling globset v0.4.8
   Compiling env_logger v0.8.4
   Compiling parse-zoneinfo v0.3.0
   Compiling pest_generator v2.1.3
   Compiling rand v0.8.4
   Compiling chrono v0.4.19
   Compiling ignore v0.4.18
   Compiling chrono-tz v0.5.3
   Compiling pest_derive v2.1.0
   Compiling clap_derive v3.0.0-beta.2
   Compiling globwalk v0.8.1
   Compiling clap v3.0.0-beta.2
   Compiling tera v1.12.1
   Compiling tera-cli v0.1.3 (/home/pi/.cargo/git/checkouts/tera-cli-5f553edc1c5f46c3/5bf7c96)
    Finished release [optimized] target(s) in 10m 02s
  Installing /home/pi/.cargo/bin/tera
   Installed package `tera-cli v0.1.3 (https://github.com/chevdor/tera-cli#5bf7c96d)` (executable `tera`)

ヘルプ

tera --help

ヘルプ

tera-cli 0.1.3
chevdor <chevdor@gmail.com>
Command line utility for the tera templating engine. You need to provide a template using the tera
syntax as well as some data (various format are supported)

USAGE:
    tera [FLAGS] [OPTIONS] --template <template> [context]

ARGS:
    <context>    Location of the context data. This file can be of the following type: json |
                 toml | yaml. If you prefer to pass the data as stdin, use `--stdin`

FLAGS:
    -a, --escape               Auto-escape rendered content. This is useful for HTML output
    -e, --env                  If true, the current ENV will be appended to the data under the
                               --env-key key
        --env-first            By default, the context is made of the data you pass and the ENV is
                               applied afterwards. Setting this option will apply the ENV first.
                               This is interesting if you prefer your data to override the ENV
        --env-only             If you want to solely use the ENV as context, you may pass this
                               option. This will prevent an error about no context being passed to
                               be raised
        --fail-on-collision    if you prefer your data to override the ENV
    -h, --help                 Prints help information
    -s, --stdin                The context data can be passed using stdin
    -V, --version              Prints version information

OPTIONS:
        --env-key <env-key>      By default, if --env is set, the environment variables will be
                                 attached at the root of the context. This is convenient but may end
                                 up conflicting with your data. To prevent collisions, you can
                                 provide a custom key with this option
    -o, --out <out>              Optional output file. If not passed, using stdout
    -t, --template <template>    Location of the template

使ってみる

0

 テンプレートファイルを用意する。

README.tpl

# {{ title }}

{{ summary }}

 データファイルを用意する。

README.tpl.toml

title = 'タイトルだよ'
summary = '要約ですわ。'

 テキストを出力する。

tera -o README.md -t README.tpl README.tpl.toml

README.md

# タイトルだよ

要約ですわ。

 OK!

1 include

 エラーになった。

README.tpl

# {{ title }}

{{ summary }}

{% include 'README_feature.tpl' %}

README_feature.tpl

# feature

* 特徴

 あとは先述と同じ。

 テキストを出力する。

tera -o README.md -t README.tpl README.tpl.toml

 エラーになった。なぜかテンプレートファイルが見つからないと怒られる。

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Error { kind: Msg("Failed to render '__tera_one_off'"), source: Some(Error { kind: TemplateNotFound("[README_feature.tpl]"), source: None }) }', src/main.rs:32:67

 エラーメッセージをみると"[README_feature.tpl]"とある。まさかファイル名に[]がついていないとダメ? と思ってその名前のファイルも用意してみたがやはり同様のエラーだった。これ以上はソースコードを読まねばわからないだろう。さようなら。

所感

 includeでエラーになるのはバグだと思う。ほかのツールを探そう。

対象環境

$ uname -a
Linux raspberrypi 5.4.83-v7l+ #1379 SMP Mon Dec 14 13:11:54 GMT 2020 armv7l GNU/Linux