Hugo のテンプレートの中でコメントを記述したかったので調べました

Hugo のテーマを作成していたのですが、テンプレートの中でコメントを記述したかったので調べました。

問題

Hugo のテンプレートで、 <body>...</body> の中で HTML のコメント <!-- a comment --> を記述して、 HTML を生成すると、このコメントは出力されませんでした。

が、次のようにテンプレートを作成して、 HTML を生成すると、このコメントが文字列として出力されてしまいました。

<title>
  {{ block "title" }}
    <!-- a comment -->
    my title
  {{ end }}
</title>

出力された HTML は半分エスケープされて、 &lt;!-- a comment --> のようになっていました。

これをブラウザーで開くと、タイトルバーには “<!– a comment –> my title” のように表示されてしまいます。

HTML の仕様?

気になって、 Hugo で生成した HTML じゃなくて、普通に HTML のファイルにコメントを記述した場合はどうなるのか確認してみました。

次のファイルを作成しました。

<!DOCTYPE html>
<html>
  <head>
    <title>
      <!-- a comment -->
      my title
    </title>
  </head>
  <body>
    <h1>comment</h1>
  </body>
</html>

ブラウザーでこのファイルを開きます。

すると、タイトルバーに “<!– a comment –> my title” のように表示されてしまいました。

<title>...</title> の中では <!-- ... --> のコメントはコメントとして使えないのか。

Hugo のテンプレートのコメント

じゃあ、 HTML として出力される前に、コメントアウトされるような仕組みが Hugo にないかな。

You want

{{/* comments here */}}

also works multiline.

Most of the template rules are here: http://golang.org/pkg/text/template/

How to add comments in a template? - support - Hugo Discussion

Hugo の Discussion でコメントについてのやり取りがありました。

{{/* a comment */}}

A comment; discarded. May contain newlines. Comments do not nest and must start and end at the delimiters, as shown here.

template - The Go Programming Language

{{/* ... */}} とすることで、テンプレートのコメントになるようです。

次のファイルを作成して確認してみました。

<title>
  {{ block "title" }}
    {{/* <!-- a comment --> */}}
    my title
  {{ end }}
</title>

すると、 HTML を生成した際に、 {{/* ... */}} が出力されることがなくなりました。

ブラウザーのタイトルバーにも “my title” とだけ、表示されました。

終わり

HTML の公式の仕様をちゃんと調べたことがないので、ちゃんと勉強しなきゃかな。

16 April 2018 追記

Hugo の Docs に記載がありました。

Go templates comments

Go templates support {{/* and */}} to open and close a comment block. Nothing within that block will be rendered.

For example:

Bonsoir, {{/* {{ add 0 + 2 }} */}}Eliott.

Will render Bonsoir, Eliott., and not care about the syntax error (add 0 + 2) in the comment block.

Introduction to Hugo Templating | Hugo