これは エーピーコミュニケーションズ Advent Calendar 2021 の3日目の記事です。
はじめに
Ansible などで利用されるテンプレートエンジン Jinja2には、コメントのシンタックスが用意されています。
コメントのシンタックス
{# ここにコメントを入れる #}
{#
ここに
コメントを入れる
#}
複数行まとめてコメントアウトする、というときにも便利そうですね。
おためし
Ansible で試してみます。(環境: Ansible 2.9.19、Jinja2 3.0.1)
Playbook
Playbook は以下の通り。template モジュールでファイルを書き出すだけです。
--- - hosts: localhost gather_facts: false connection: local tasks: - name: jinja2 test template: src: test.j2 dest: test.txt
パターン1: 1行コメント
Jinja2 テンプレート test.j2 側はいくつかのパターンで試します。
まずは、テキスト内にコメントをいれるパターンです。
111
222
{# ここにコメントを書く #}
333
Playbook を実行して出力されるファイル test.txt は以下のようになります。
111 222 333
コメントを書いた行は、空行にならず無視された形です。
パターン2: インラインコメント
111
222
aa{# bb #}cc
333
はこうなります。
111 222 aacc 333
パターン3: 複数行コメント
テンプレートはこちら。
111
222
{#
いろんな
ことを
ここにコメントに書く
#}
333
出力先ファイルはこちら。1行のときと同じですね。
111 222 333
パターン4 制御文を複数行コメントアウト
まずコメントアウトしない場合
111
222
{% for i in ["a", "b", "c"] %}
{{ i }}
{% endfor %}
333
では、for文によって、以下のようになります。
111 222 a b c 333
これを、for文をまるごとコメントアウト
111
222
{#
{% for i in ["a", "b", "c"] %}
{{ i }}
{% endfor %}
#}
333
すると、以下のようになります。
111 222 333
for文が有効でないことがわかります。
パターン5: Whitespace Control との組み合わせ
- による Whitespace Control との組み合わせもできることを知りました。
いくつか試したものを掲載します。
5-1
111
222
{#- ここにコメントを書く #}
333
は以下の通り。
111 222 333
5-2
111
222
{# ここにコメントを書く -#}
333
は
111 222 333
5-3
111
222
{#- ここにコメントを書く -#}
333
は
111 222333
5-4
111
222{#- ここにコメントを書く -#}
333
は
111 222333
おわりに
テンプレート内で for 文などのロジックにちょっとした説明を書いたり、デバッグ時に一時的に処理を無効化しておきたいときに便利そうですね。