この章では、2つのトピックを扱います。
特殊なコメントブロックは、CまたはC++スタイルのコメントブロックにいくつかの追加マークが付けられたもので、Doxygenがそれが生成されたドキュメントに含める必要がある構造化されたテキストの一部であることを認識できるようにします。次のセクションでは、Doxygenがサポートするさまざまなスタイルについて説明します。
Python、VHDL、およびFortranコードには、異なるコメント規約があり、それぞれセクションPythonのコメントブロック、VHDLのコメントブロック、およびFortranのコメントブロックで見つけることができます。
コード内の各エンティティには、そのエンティティのドキュメントを構成する2種類(場合によっては3種類)の説明があります。それは、簡潔な説明と詳細な説明で、どちらもオプションです。メソッドと関数には、3番目のタイプの説明である、いわゆるインボディ説明もあり、これはメソッドまたは関数の本体内にあるすべてのコメントブロックを連結したものです。
複数の簡潔な説明または詳細な説明を持つことも許可されています(ただし、説明が表示される順序は指定されていないため、推奨されません)。
その名前が示すように、簡潔な説明は短い1行の記述であり、詳細な説明はより長く、より詳細なドキュメントを提供します。「インボディ」説明も詳細な説明として機能したり、実装の詳細の集合を記述したりできます。HTML出力の場合、簡潔な説明は、アイテムが参照される場所でツールチップを提供するためにも使用されます。
コメントブロックを詳細な説明としてマークするには、いくつかの方法があります。
Javadocスタイルを使用できます。これは、次のように2つのアスタリスクで始まるCスタイルのコメントブロックで構成されます。
/** * ... text ... */
または、Qtスタイルを使用して、Cスタイルのコメントブロックの開始後に感嘆符 (!) を追加することもできます。次の例に示すとおりです。
/*! * ... text ... */
どちらの場合も、途中のアスタリスクはオプションなので、
/*! ... text ... */
も有効です。
3つ目の方法は、少なくとも2つのC++コメント行のブロックを使用することです。各行は追加のスラッシュまたは感嘆符で始まります。2つのケースの例を以下に示します。
/// /// ... text ... ///
または
//! //!... text ... //!
この場合、空行はドキュメントブロックを終了させることに注意してください。
コメントブロックをドキュメント内でより目立つようにしたい人もいます。この目的のために、以下を使用できます。
/*******************************************//** * ... text ***********************************************/
注: 通常のコメントブロックを終了し、特殊なコメントブロックを開始するための2つのスラッシュ。
注意:clang-formatのようなリフォーマッターを使用する際には注意が必要です。この種類のコメントを2つの別々のコメントとして認識し、それらの間に空白を挿入する可能性があるためです。
または
///////////////////////////////////////////////// /// ... text ... /////////////////////////////////////////////////
または
/*********************************************** * ... text ***********************************************/
JAVADOC_BANNER が YES に設定されている限り。
Doxygenが生成する対応するHTMLドキュメントはこちらをクリックしてください。
簡潔な説明には、いくつかの可能性があります。
上記のコメントブロックのいずれかと一緒に\briefコマンドを使用できます。このコマンドは段落の終わりで終了するため、詳細な説明は空行の後に続きます。
例を次に示します
/*! \brief Brief description. * Brief description continued. * * Detailed description starts here. */
設定ファイルでJAVADOC_AUTOBRIEFがYESに設定されている場合、Javadocスタイルのコメントブロックを使用すると、最初のドット、疑問符、または感嘆符の後にスペースまたは改行が続くまで続く簡潔な説明が自動的に開始されます。例を次に示します。
/** Brief description which ends at this dot. Details follow * here. */
このオプションは、複数行の特別なC++コメントに対しても同じ効果を持ちます。
/// Brief description which ends at this dot. Details follow /// here.
3番目のオプションは、1行を超えない特殊なC++スタイルコメントを使用することです。2つの例を次に示します。
/// Brief description. /** Detailed description. */
または
//! Brief description. //! Detailed description //! starts here.
最後の例の空白行に注意してください。これは、簡潔な説明と詳細な説明を含むブロックを区切るために必要です。この場合、JAVADOC_AUTOBRIEFもNOに設定する必要があります。
ご覧のとおり、Doxygenは非常に柔軟です。次の例のように、複数の詳細な説明がある場合、
//! Brief description, which is //! really a detailed description since it spans multiple lines. /*! Another detailed description! */
それらは結合されます。これは、説明がコードの異なる場所にある場合も同様であることに注意してください!この場合、順序はDoxygenがコードを解析する順序に依存します。
他のほとんどのドキュメントシステムとは異なり、Doxygenでは、メンバー(グローバル関数を含む)のドキュメントを定義の前に置くこともできます。このようにして、ドキュメントはヘッダーファイルの代わりにソースファイルに配置できます。これにより、ヘッダーファイルがコンパクトに保たれ、メンバーの実装者がドキュメントに直接アクセスできるようになります。妥協策として、簡潔な説明は宣言の前に、詳細な説明はメンバー定義の前に配置できます。
ファイル、構造体、共用体、クラス、または列挙型のメンバーをドキュメント化したい場合、ドキュメントブロックをメンバーの前にではなく、メンバーの後に配置したい場合があります。この目的のために、コメントブロックに追加の < マーカーを配置する必要があります。これは、関数のパラメーターにも機能することに注意してください。
いくつかの例を以下に示します。
int var; /*!< Detailed description after the member */
このブロックは、Qtスタイルの詳細なドキュメントブロックをメンバーの後に配置するために使用できます。同じことを行う他の方法は次のとおりです。
int var; /**< Detailed description after the member */
または
int var; //!< Detailed description after the member
//!<
または
int var; ///< Detailed description after the member
///<
ほとんどの場合、メンバーの後に簡単な説明だけを置きたいと考えるでしょう。これは次のように行います。
int var; //!< Brief description after the member
または
int var; ///< Brief description after the member
関数については、@paramコマンドを使用してパラメータを文書化し、[in]、[out]、[in,out]を使用して方向を文書化できます。インラインドキュメントの場合も、方向属性で開始することで可能です(例:)。
void foo(int v /**< [in] docs for input parameter v. */);
これらのブロックは、前のセクションの特殊なコメントブロックと同じ構造と意味を持ちますが、< は、メンバーがブロックの後ではなく、ブロックの前に配置されていることを示します。
これらのコメントブロックの使用例を以下に示します。
Doxygenが生成する対応するHTMLドキュメントはこちらをクリックしてください。
\classなど)は、これらのコメントブロック内では許可されていません。以下に、Qtスタイルを使用したC++コードのドキュメント化された例を示します。
Doxygenが生成する対応するHTMLドキュメントはこちらをクリックしてください。
簡潔な説明は、クラス、名前空間、またはファイルのメンバー概要に含まれ、小さなイタリック体フォントで表示されます(この説明は、設定ファイルでBRIEF_MEMBER_DESCをNOに設定することで非表示にできます)。デフォルトでは、簡潔な説明は詳細な説明の最初の文になります(ただし、REPEAT_BRIEFタグをNOに設定することで変更できます)。Qtスタイルでは、簡潔な説明と詳細な説明の両方がオプションです。
デフォルトでは、JavadocスタイルのドキュメントブロックはQtスタイルのドキュメントブロックと同じように動作します。しかし、Javadocの仕様では、ドキュメントブロックの最初の文が自動的に簡潔な説明として扱われます。この動作を有効にするには、設定ファイルでJAVADOC_AUTOBRIEFをYESに設定する必要があります。このオプションを有効にして、文の途中で文を終了せずにドットを置きたい場合は、ドットの後にバックスラッシュとスペースを置く必要があります。例を次に示します。
/** Brief description (e.g.\ using only a few words). Details follow. */
以下に、上記と同じコードをJavadocスタイルで、JAVADOC_AUTOBRIEFをYESに設定してドキュメント化したものを示します。
Doxygenが生成する対応するHTMLドキュメントはこちらをクリックしてください。
同様に、Qtスタイルのドキュメントブロックの最初の文を自動的に簡潔な説明として扱いたい場合は、設定ファイルでQT_AUTOBRIEFをYESに設定することができます。
前のセクションの例では、コメントブロックは常にファイル、クラス、または名前空間の宣言または定義の前、またはそのメンバーの前または後に配置されていました。これはしばしば都合が良いですが、ドキュメントを別の場所に配置する理由がある場合もあります。ファイルをドキュメント化する場合、これは「ファイルの前に」というものがないため必須です。
Doxygenでは、ドキュメントブロックをほとんどどこにでも配置できます(関数の本体内または通常のCスタイルのコメントブロック内は例外です)。
ドキュメントブロックを項目の直前(または直後)に配置しない場合に生じる代償は、ドキュメントブロック内に構造コマンドを配置する必要があることで、情報が重複する可能性があります。したがって、実際には、他の要件によって強制されない限り、構造コマンドの使用は避けるべきです。
構造コマンド(他のすべてのコマンドと同様に)は、バックスラッシュ(\)またはアットマーク(@)(Javadocスタイルを好む場合)で始まり、その後にコマンド名と1つ以上のパラメータが続きます。たとえば、上記の例でクラスTestをドキュメント化したい場合、Doxygenによって読み込まれる入力のどこかに次のドキュメントブロックを配置することもできます。
/*! \class Test
\brief A test class.
A more detailed class description.
*/
ここでは、特殊コマンド\classが、コメントブロックがクラスTestのドキュメントであることを示すために使用されます。その他の構造コマンドは次のとおりです。
\struct C構造体をドキュメント化する。\union 共用体をドキュメント化する。\enum 列挙型をドキュメント化する。\fn 関数をドキュメント化する。\var 変数、typedef、またはenum値をドキュメント化する。\def #defineをドキュメント化する。\typedef 型定義をドキュメント化する。\file ファイルをドキュメント化する。\namespace 名前空間をドキュメント化する。\package Javaパッケージをドキュメント化する。\interface IDLインターフェースをドキュメント化する。これらおよびその他の多くのコマンドの詳細については、セクション特殊コマンドを参照してください。
C++クラスのメンバーを文書化するには、クラス自体も文書化する必要があります。名前空間についても同様です。グローバルなC関数、typedef、enum、またはプリプロセッサ定義を文書化するには、それらを含むファイルを最初に文書化する必要があります(通常、このファイルは他のソースファイルにエクスポートされる情報を含むため、ヘッダファイルになります)。
/*! \file */または
/** @file */行が存在しなければなりません。
以下に、構造コマンドを使用してドキュメント化されたstructcmd.hというCヘッダーの例を示します。
Doxygenが生成する対応するHTMLドキュメントはこちらをクリックしてください。
上記の例の各コメントブロックには構造コマンドが含まれているため、すべてのコメントブロックは生成されるドキュメントに影響を与えることなく、別の場所や入力ファイル(たとえばソースファイル)に移動できます。このアプローチの欠点は、プロトタイプが重複するため、すべての変更を2回行う必要があることです!このため、本当にこれが必要かどうかを最初に検討し、可能であれば構造コマンドを避けるべきです。私は関数名の前に配置されたコメントブロックに\fnコマンドが含まれている例をよく受け取ります。これは明らかに\fnコマンドが冗長であり、問題を引き起こすだけの場合です。
拡張子.dox、.txt、.doc、.md、または.markdownのいずれかのファイルにコメントブロックを配置した場合、またはEXTENSION_MAPPINGによって拡張子がmdにマップされる場合、Doxygenはこのファイルをファイルリストから非表示にします。
Doxygenが解析できないファイルでもドキュメント化したい場合は、\verbincludeを使用してそのまま表示できます。例:
/*! \file myscript.sh * Look at this nice script: * \verbinclude myscript.sh */
スクリプトがINPUTに明示的にリストされているか、FILE_PATTERNSに.sh拡張子が含まれており、スクリプトがEXAMPLE_PATHで設定されたパスで見つかることを確認してください。
Pythonには、いわゆるドキュメンテーション文字列(""")を使用してコードをドキュメンテーション化する標準的な方法があります。これらの文字列は__doc__に保存され、実行時に取得できます。Doxygenはこれらのコメントを抽出し、事前フォーマットされた方法で表現される必要があると仮定します。
Doxygenが生成する対応するHTMLドキュメントはこちらをクリックしてください。
NOに設定してください。Pythonコードをドキュメント化する別の方法として、「##」または「##<」で始まるコメントを使用する方法もあります。これらの種類のコメントブロックは、Doxygenがサポートする他の言語のドキュメントブロックの動作とより一致しており、特殊コマンドの使用も可能です。
以下に、Doxygenスタイルのコメントを使用した同じ例をもう一度示します。
Doxygenが生成する対応するHTMLドキュメントはこちらをクリックしてください。
PythonはCやC++よりもJavaに似ているため、設定ファイルでOPTIMIZE_OUTPUT_JAVAをYESに設定する必要があります。
VHDLでは、コメントは通常「--」で始まります。Doxygenは「--!」で始まるコメントを抽出します。VHDLにはコメントブロックが2種類しかありません。それは、短い説明を表す1行の「--!」コメントと、詳細な説明を表す複数行の「--!」コメント(各行に「--!」プレフィックスが繰り返される)です。
コメントは、ドキュメント化されている項目の前に常に配置されますが、1つの例外があります。ポートの場合、コメントは項目の後にも配置でき、その場合、ポートの短い説明として扱われます。
Doxygenコメントを含むVHDLファイルの例を以下に示します。
Doxygenが生成する対応するHTMLドキュメントはこちらをクリックしてください。
VHDL 2008以降、/``*スタイルのコメントも使用できます。
Doxygenは/``* ... *``/を通常のコメントとして扱い、/``*! ... *``/スタイルのコメントをDoxygenによって解析される特殊コメントとして扱います。
適切な出力を得るには、設定ファイルでOPTIMIZE_OUTPUT_VHDLをYESに設定する必要があります。これにより、他のいくつかの設定にも影響があります。もしそれらが正しく設定されていなかった場合、Doxygenはどの設定が上書きされたかを示す警告を生成します。
FortranコードにDoxygenを使用する場合は、OPTIMIZE_FOR_FORTRANをYESに設定する必要があります。
パーサーは、ソースコードが固定形式Fortranコードか自由形式Fortranコードかを推測しようとします。これは常に正しいとは限りません。正しくない場合は、EXTENSION_MAPPINGを使用してこれを修正する必要があります。EXTENSION_MAPPING = f=FortranFixed f90=FortranFreeと設定することで、拡張子fのファイルは固定形式Fortranコードとして解釈され、拡張子f90のファイルは自由形式Fortranコードとして解釈されます。
Fortranでは、「!>」または「!<」でコメントが開始され、「!!」または「!>」で1行コメントを複数行コメントに続けることができます。
以下に、ドキュメント化されたFortranサブルーチンの例を示します。
代替案として、固定形式コードでコメントを使用することもできます。
前のセクションでは、コード内のコメントをDoxygenに認識させる方法に焦点を当て、簡潔な説明と詳細な説明の違い、および構造コマンドの使用について説明しました。
このセクションでは、コメントブロック自体の内容について見ていきます。
Doxygenは、コメントをフォーマットするさまざまなスタイルをサポートしています。
最も単純な形式はプレーンテキストを使用することです。これは出力にそのまま表示され、短い説明に最適です。
より長い説明の場合、逐語的なテキストのブロック、リスト、単純なテーブルなど、もう少し構造が必要になることがよくあります。この目的のために、DoxygenはMarkdown構文と、Markdown Extra拡張の一部をサポートしています。
Markdownは、読み書きが非常に簡単になるように設計されています。その書式設定は、プレーンテキストメールにインスパイアされています。Markdownは、プロジェクトの紹介ページのような、単純で汎用的な書式設定に最適です。DoxygenはMarkdownファイルの直接読み込みもサポートしています。詳細については、章Markdownのサポートを参照してください。
プログラミング言語固有のフォーマットの場合、DoxygenはMarkdownフォーマットの上に2種類の追加マークアップを提供しています。