正しいコメントを書こう
HTML文書の中で、ソースを読みやすくするため、コメントをセクションの区切りとして用いている人は少なくないでしょう。しかし、コメントの書式は正しく理解されていないことが多く、誤った用法を頻繁に見かけます。実際に支障が出ることは少ないのですが、厳密なブラウザでは内容が読めなくなってしまうこともあり、注意が必要です。
コメントのきちんとした定義はHTMLのバージョンによって微妙に異なりますが、基本的には コメントは <!-- 注釈の文 --> という形式で、これ以上余計なハイフンを使っちゃだめ と理解しておくのがよいでしょう。(2016現在ではHTMLなら少し緩和されることになりそうです)
HTML 2.0で定義されていたコメント
HTML 2.0の場合、RFC 1866の"3.2.5. Comments"において次のように定義されていました:
To include comments in an HTML document, use a comment declaration. A comment declaration consists of `<!' followed by zero or more comments followed by `>'. Each comment starts with `--' and includes all text up to and including the next occurrence of `--'. In a comment declaration, white space is allowed after each comment, but not before the first comment. The entire comment declaration is ignored.
つまり、
- コメント宣言
<!
で始める - コメントは
--
で始まり、次に--
が現れるまでの 全ての 文字がコメントとなる - コメントは0個以上、複数あっても、複数行にわたっても構わない
>
で閉じる- コメントの後にはスペースを入れても良いが、最初のコメントの前(<!の直後)にはスペースを入れてはいけない
ということで、この定義では <!-- ここに -- -- コメントあり --> といった具合のものもコメントとして認められていました(コメントの例として挙げられていた)。(2)の「次に -- が現れるまでの全ての文字」というところに注意して下さい。このコメント終了を示す -- が現れるまでは、 >
も含めて全ての文字がコメントの一部とみなされることになります。 -- がきちんとペアになっていないと、「閉じられていないコメント」となって、トラブルを起こす危険があるわけです。
〔補足〕
このページの以前のバージョンでは、上記の定義にもとづいて
<!------------>はコメントとして完結していて文法上の問題はありませんが、
<!----------->は閉じていないコメントで、場合によってはこれ以降のテキストがまったく読めなくなる危険があります。
などといったトリッキーなことを説明していました。新しいHTMLでは、これらはいずれも不適切なコメントとされますから、あれこれまわりくどい解説は削除しました。
〔以上補足〕
HTML 4.0でのコメント定義
HTML 4.0においては、コメントの定義は次のようになりました。
HTML comments have the following syntax:
<!-- this is a comment --> <!-- and so is this one, which occupies more than one line -->White space is not permitted between the markup declaration open delimiter("<!") and the comment open delimiter ("--"), but is permitted between the comment close delimiter ("--") and the markup declaration close delimiter (">"). A common error is to include a string of hyphens ("---") within a comment. Authors should avoid putting two or more adjacent hyphens inside comments.
Information that appears between comments has no special meaning (e.g., character references are not interpreted as such).
HTML 4.0 Specification 3.2.4
(強調は引用者)
要するに、コメントは<!-- this is a comment -->
のスタイルだけで、改行してもいいけど、その中に複数のハイフンを続けて記述しちゃだめよ、ということです。明確に構文規定はされていませんが、HTML 2.0では許されていた「<!-- ここに -- -- コメントあり -->」というスタイルは、却下されています。
XHTMLでのコメント
XHTMLの仕様書にコメントについての記述はありませんが、これはXMLですから、XMLのコメントの定義を見ればよいことになります。XMLにおいては、
(例)
Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'
と極めて明解です。すなわち、
- 「<!--」で始まって
- 「ハイフン以外の文字」もしくは「ハイフン+ハイフン以外の文字」が任意の数繰り返され
- 「-->」で終わる
というものがコメントであり、コメント内部でハイフンを2つ以上続けることは文法的にできません。本文でも「文字列 "--"(二連ハイフン)は,コメント内で現れてはならない」と明示されています。
HTMLソースの中でセクションを区切る自分用の目印が欲しいときには、DTDなどでも使われているように
(例)
<!--===========================================-->
のような、「=」を連ねたコメントにしておくのが良さそうです。
補足
コメントについて、もう少しだけ補足しておきます。古い話もありますが、ご参考まで。
<!- comment -> や <! comment > は、いうまでもなく正しいコメントではありません。また、最後を --!> としてコメントを閉じたつもりになっていると、寛容なブラウザでもそれ以降の内容を全てコメント扱いにしてしまうことがあります。今どきこんなコメントを書く人はいないと思いますが、以前はよく見かけたものです。
いずれのコメントの定義に従っても、コメント内に「タグ」を書き込むことは誤りではありません。たとえば確認のとれていないリンクなどを一時的に
(例)
<!-- <a href="http://www.kanzaki.com/">The Web KANZAKI</a> -->
として隠すことはいちおう可能です。ただし、これはブラウザによっては正しく解釈されず、(タグを閉じる>をコメント終了サインと勘違いするのがいる)途中から表示されてしまうこともあるので、使わない方が無難でしょう。
なお、コメントは「タグ」ではありません。SGMLでいうところの「宣言」の一種です。
2016-09-03追記:WHATWGのHTMLでは、コメント内に
--
を入れることを認めるようになったとのこと。2016-06-21付けの更新コミット* A comment that ends with a dash is now allowed: <!-- ---> * A comment that contains -- is also allowed: <!-- -- --> * A comment that contains --! is also allowed: <!-- --! --> * The following are still parse errors: <!-->, <!--->, <!-- --!>
XMLの仕様が変わったわけではないので、Validator.nuではHTMLとしてはOKだけれど
The document is not mappable to XML 1.0
と警告してくれます。