コメント (コンピュータ)
コメント(comment)とは、コンピュータ言語(プログラミング言語やデータ記述言語)によって書かれたソースコードのうち、人間のために覚え書きとして挿入された注釈のことである。この部分はコンピュータが処理を行うときには存在しないものとして無視されるため、自由に文を挿入することができる言語構文によっては一定の制約があり、例えばC言語における/* - */のように、開始トークンと終了トークンを持つコメント構文の場合は、コメントの本文中には終了トークンを記述できない。また、一般的には同一の開始トークンと終了トークンを入れ子にすることもできない(後述するD言語における/+ - +/のような例外もある)。。
どのような言語を用いてソースコードを書いたとしても、記述者とは別の人が読んだり、当人であっても時間をおいてから読んだりする場合には、ソースコードからその意図を正しく読み取ることが困難な場合がある。そのために、ソースコードの意図をコメントとしてソースコード中に挿入することが役立つ。
注釈ではなく有効なコードのうち、一時的にコンピュータに処理させたくない部分を削除するかわりにコメントとすることもしばしば行われる。これをコメントアウト (comment-out) という。このとき、コメントアウトさせたい部分中にコメントが記述されている場合もあるため、構文的にコメントの入れ子が可能かどうかは大きな意味を持つ。なお、対義語、すなわちコメントを解除し処理を有効にすることはアンコメント (uncomment) などと呼ぶ。
特殊な用途としては、ある言語を拡張した際、古いバージョンではその部分を解釈させたくないときにコメントアウトすることがある。HTMLの中にJavaScriptを組み込む場合、Internet Explorerの独自拡張である条件付きコメントなどが該当する。
コメントは、特定の記号などの文字あるいは文字列(トークン)から行末までをコメントとして扱う行コメントと、2つのトークンで前後を括りその内部をコメントとして扱うブロックコメントに大別される。行コメントは、言語により行のどこからでもコメントを開始できるものと、行頭にのみコメント開始記号を記述できるものがある。いずれにしても行コメントは行の途中でコメントを終了することができない、コメントが数行に渡る場合にも行ごとにコメントの開始を指示しなければならないといったデメリットがあるテキストエディタや統合開発環境の中には、選択中の複数行に対してコマンドを実行すると、各行に対し行コメントのトークンを追加し、まとめてコメント化できるものもある。かわり、コメントの終了を指示しなくてもよいというメリットがある。
代表的な行コメントには以下のようなものがある。基本的に半角(ASCII)の英数字や記号が開始トークンとして使用される。
C(C99以降行コメントが標準化されたのはC99規格以降だが、C99よりも前に拡張機能としてサポートしていた処理系もあった。)、C++、Java、C#、JavaScriptなどでは、2連のスラッシュ // 以降がコメントと見なされる。
BASICでは、REM、あるいはシングルクォーテーションASCIIのシングルクォーテーションはアポストロフィの代用として使われることもあるため、便宜上アポストロフィと呼ばれたり、混同されたりすることもあるが、文字コードとしては別物である。 ' より後がコメントと見なされる。ただし、REM は命令のひとつであるから、これを用いて行の途中からコメントとする場合には、その前にコロン : を置いてマルチステートメント(1行に複数の命令を書くこと)の形にしなければならない。一方、' は :REM の省略形と見なされるため、その前に : を置く必要はない。
各種シェルスクリプト、およびそれらの概念を継承しているPerlやPython、Rubyでは、ナンバーサインASCIIのナンバーサインはシャープの代用として使われることもあるため、便宜上シャープと呼ばれたり、混同されたりすることもあるが、文字コードとしては別物である。 # 以降がコメントと見なされる。また、の先頭にある #! から開始するコメントは、慣例的にそのスクリプトを実行するプログラムを指定するものとして扱われる(シバン)。
AdaやSQL、Luaでは、2連のハイフンマイナス -- 以降がコメントと見なされる。
Common LispやScheme、x86アセンブリ言語ではセミコロン ; 以降がコメントと見なされる。
マイクロソフト仕様のINIファイルでは、行頭にセミコロン ; があると行末まで無視される。
MS-DOSのバッチファイルでは、REM、2連のコロン::、あるいはコロン+スペース: で始まる行がコメントと見なされる。コロンで始まる行は本来ラベルの宣言を行うものだが、。
代表的なブロックコメントには以下のようなものがある。
HTML、Wikiでは、原則として、<!--と-->で括る。また、HTMLではバージョンによって <comment> と </comment> で括ることもできる。タグ(< と >で括られた部分)の内部でコメントを作るには、-- と -- で括るが、HTML 4.0以前のバージョンでなければならない。
C、C++、Java、C#、JavaScript、CSSなどでは、/* と */ で括る。また、Javaでは /** と */ で括られたコメントをドキュメントとして扱う。これは、Javadocというツールを用いてこのコメントのみを抽出し、ドキュメントを生成する仕組みに使用されている。
Dでは、/+と+/で囲むコメントがある。このコメント形式を使用することで、コメントを入れ子にすることができる。
Pascalでは、{ と } で括る。なお、{ や } が文字コードとして定義されていない(主に初期の)コンピュータのために、(* と *) で括る代替記法もある。
Perl(version 5 以降)の正規表現では (?# と ) で括る。
Mathematicaでは、(* と *) で括る。
C/C++およびC#では、プリプロセッサディレクティブの#if - #endifが、ブロックコメントの代用として使われることもある。ディレクティブは入れ子にすることができ、また簡単にコードの有効化/無効化を切り替えることができるというメリットがある一方、多用すると「どのコードが有効であるか」が一見して判別しにくくなるというデメリットもある。
コンピュータ言語のソースコード以外のデータを扱うアプリケーションソフトウェアでも、コメント同様の機能が利用できる場合がある。ワードプロセッサソフトや表計算ソフトにおける「コメント」あるいは「付箋」などの機能が該当する。
オープンソース/クローズドソースを問わず、コメントはプログラムの共同開発やソースコードの保守管理に欠かせないものである。特にプログラム内にコメントによるドキュメントを含ませることで、チームを組んで共同作業したり保守したりするうえで役立つ。また、担当者が変わった後でも保守・改良、またはバグ修正に大きな力を発揮する。ただし、それは「正しいコメントが記述されている」という前提の話である。間違ったコメントが書かれている場合、解読を妨げたり誤解を生んだりする原因にもなる。
コメントの良し悪しは、読者の前提知識や主観もかかわってくるので、どのようなコメントが適切であるかは一概には述べることができない。プログラムコードの各ステップ行で何を実行しているかを自然言語によって逐一説明するようなコメントは、「冗長である」「記憶領域を無駄に浪費する」「読みづらくなる」などの短所をはらむ可能性もあるが、初心者や入門者向けのサンプルコードとしては役に立つこともある。
プログラムコードの本文を読めば、「何を実行しているか」自体は分かるため、コメントには「何を実行しているか」を記述するよりも、「なぜそのようなコードを書いたのか」という設計理由を記述するべきである、という方法論もある。