正しいコメントを書こう

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.

つまり、

  1. コメント宣言<! で始める
  2. コメントは -- で始まり、次に -- が現れるまでの 全ての 文字がコメントとなる
  3. コメントは0個以上、複数あっても、複数行にわたっても構わない
  4. > で閉じる
  5. コメントの後にはスペースを入れても良いが、最初のコメントの前(<!の直後)にはスペースを入れてはいけない

ということで、この定義では <!-- ここに -- -- コメントあり --> といった具合のものもコメントとして認められていました(コメントの例として挙げられていた)。(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 - '-')))* '-->'

と極めて明解です。すなわち、

  1. 「<!--」で始まって
  2. 「ハイフン以外の文字」もしくは「ハイフン+ハイフン以外の文字」が任意の数繰り返され
  3. 「-->」で終わる

というものがコメントであり、コメント内部でハイフンを2つ以上続けることは文法的にできません。本文でも「文字列 "--"(二連ハイフン)は,コメント内で現れてはならない」と明示されています。

HTMLソースの中でセクションを区切る自分用の目印が欲しいときには、DTDなどでも使われているように

(例) <!--===========================================-->

のような、「=」を連ねたコメントにしておくのが良さそうです。

補足

コメントについて、もう少しだけ補足しておきます。古い話もありますが、ご参考まで。