コメント (コンピュータ)

**コメント**（）とは、コンピュータ言語（プログラミング言語やデータ記述言語）によって書かれたソースコードのうち、人間のために覚え書きとして挿入された注釈のことである。この部分はコンピュータが処理を行うときには存在しないものとして無視されるため、自由に文を挿入することができる。

## 用途
### プログラムの意図の明示
どのような言語を用いてソースコードを書いたとしても、記述者とは別の人が読んだり、当人であっても時間をおいてから読んだりする場合には、ソースコードからその意図を正しく読み取ることが困難な場合がある。そのために、ソースコードの意図をコメントとしてソースコード中に挿入することが役立つ。

### コメントアウト
注釈ではなく有効なコードのうち、一時的にコンピュータに処理させたくない部分を削除するかわりにコメントとすることもしばしば行われる。これをコメントアウト (comment-out) という。このとき、コメントアウトさせたい部分中にコメントが記述されている場合もあるため、構文的にコメントの入れ子が可能かどうかは大きな意味を持つ。なお、対義語、すなわちコメントを解除し処理を有効にすることはアンコメント (uncomment) などと呼ぶ。

### バージョンの相違への対応
特殊な用途としては、ある言語を拡張した際、古いバージョンではその部分を解釈させたくないときにコメントアウトすることがある。HTMLの中にJavaScriptを組み込む場合、Internet Explorerの独自拡張である条件付きコメントなどが該当する。

## 種類
コメントは、特定の記号などの文字あるいは文字列（トークン）から行末までをコメントとして扱う**行コメント**と、2つのトークンで前後を括りその内部をコメントとして扱う**ブロックコメント**に大別される。行コメントは、言語により行のどこからでもコメントを開始できるものと、行頭にのみコメント開始記号を記述できるものがある。いずれにしても行コメントは行の途中でコメントを終了することができない、コメントが数行に渡る場合にも行ごとにコメントの開始を指示しなければならないといったデメリットがあるかわり、コメントの終了を指示しなくてもよいというメリットがある。

### 行コメント
代表的な行コメントには以下のようなものがある。基本的に半角（ASCII）の英数字や記号が開始トークンとして使用される。

* C（C99以降）、C++、Java、C#、JavaScriptなどでは、2連のスラッシュ **<code>//</code>** 以降がコメントと見なされる。
* BASICでは、**<code>REM</code>**、あるいはシングルクォーテーション **<code>'</code>** より後がコメントと見なされる。ただし、**<code>REM</code>** は命令のひとつであるから、これを用いて行の途中からコメントとする場合には、その前にコロン **<code>:</code>** を置いてマルチステートメント（1行に複数の命令を書くこと）の形にしなければならない。一方、**<code>'</code>** は **<code>:REM</code>** の省略形と見なされるため、その前に **<code>:</code>** を置く必要はない。
* 各種シェルスクリプト、およびそれらの概念を継承しているPerlやPython、Rubyでは、ナンバーサイン **<code>#</code>** 以降がコメントと見なされる。また、ファイルの先頭にある **<code>#!</code>** から開始するコメントは、慣例的にそのスクリプトを実行するプログラムを指定するものとして扱われる（シバン）。
* AdaやSQL、Luaでは、2連のハイフンマイナス **<code>--</code>** 以降がコメントと見なされる。
* Common LispやScheme、x86アセンブリ言語ではセミコロン **<code>;</code>** 以降がコメントと見なされる。
* マイクロソフト仕様のINIファイルでは、行頭にセミコロン **<code>;</code>** があると行末まで無視される。
* DOSのバッチファイルでは、**<code>REM</code>**、2連のコロン**<code>::</code>**、あるいはコロン+スペース**<code>: </code>**で始まる行がコメントと見なされる。コロンで始まる行は本来ラベルの宣言を行うものだが、。

### ブロックコメント
代表的なブロックコメントには以下のようなものがある。

* HTML、Wikiでは、原則として、**<code>&lt;!--</code>**と**<code>--&gt;</code>**で括る。また、HTMLではバージョンによって `<comment>` と `</comment>` で括ることもできる。タグ（**<code>&lt;</code>** と **<code>&gt;</code>**で括られた部分）の内部でコメントを作るには、**<code>--</code>** と **<code>--</code>** で括るが、HTML 4.0以前のバージョンでなければならない。
* C、C++、Java、C#、JavaScript、CSSなどでは、**<code>/*</code>** と **<code>*/</code>** で括る。また、Javaでは **<code>/**</code>** と **<code>*/</code>** で括られたコメントをドキュメントとして扱う。これは、Javadocというツールを用いてこのコメントのみを抽出し、ドキュメントを生成する仕組みに使用されている。
* Dでは、**<code>/+</code>**と**<code>+/</code>**で囲むコメントがある。このコメント形式を使用することで、コメントを入れ子にすることができる。
* Pascalでは、**<code>{</code>** と **<code>}</code>** で括る。なお、`{` や `}` が文字コードとして定義されていない（主に初期の）コンピュータのために、**<code>(*</code>** と **<code>*)</code>** で括る代替記法もある。
* Perl（version 5 以降）の正規表現では **<code>(?#</code>** と **<code>)</code>** で括る。
* Mathematicaでは、**<code>(*</code>** と **<code>*)</code>** で括る。

C/C++およびC#では、プリプロセッサディレクティブの`#if` - `#endif`が、ブロックコメントの代用として使われることもある。ディレクティブは入れ子にすることができ、また簡単にコードの有効化／無効化を切り替えることができるというメリットがある一方、多用すると「どのコードが有効であるか」が一見して判別しにくくなるというデメリットもある。

## コメントに類似のもの
コンピュータ言語のソースコード以外のデータを扱うアプリケーションソフトウェアでも、コメント同様の機能が利用できる場合がある。ワードプロセッサソフトや表計算ソフトにおける「コメント」あるいは「付箋」などの機能が該当する。

## 備考
オープンソース／クローズドソースを問わず、コメントはプログラムの共同開発やソースコードの保守管理に欠かせないものである。特にプログラム内にコメントによるドキュメントを含ませることで、チームを組んで共同作業したり保守したりするうえで役立つ。また、担当者が変わった後でも保守・改良、またはバグ修正に大きな力を発揮する。ただし、それは「正しいコメントが記述されている」という前提の話である。間違ったコメントが書かれている場合、解読を妨げたり誤解を生んだりする原因にもなる。

コメントの良し悪しは、読者の前提知識や主観もかかわってくるので、どのようなコメントが適切であるかは一概には述べることができない。プログラムコードの各ステップ行で何を実行しているかを自然言語によって逐一説明するようなコメントは、「冗長である」「記憶領域を無駄に浪費する」「読みづらくなる」などの短所をはらむ可能性もあるが、初心者や入門者向けのサンプルコードとしては役に立つこともある。

プログラムコードの本文を読めば、「何を実行しているか」自体は分かるため、コメントには「何を実行しているか」を記述するよりも、「なぜそのようなコードを書いたのか」という設計理由を記述するべきである、という方法論もある。

## 脚注

### 注釈

### 出典

## 関連項目
* 文芸的プログラミング
* プログラミング用語一覧