Doxygenは、ソースコードに書いたコメントを読み取ってAPIリファレンスを自動生成するツールです。読み方は「ドキシジェン」。C++の世界では事実上の標準で、ヘッダファイルにコメントを添えるだけでHTMLのリファレンスサイトやクラスの継承図が出来上がります。ここでは読み方と対応範囲、Doxyfileの最小設定、日本語コメントの文字化け対策、VS Code拡張による雛形自動生成、そして最新版1.17.0で加わったMermaid対応までを、導入する順序どおりに解説します。
まとめ
Doxygen(ドキシジェン)は、Dimitri van Heesch氏が開発したGPLv2のドキュメント生成ツールです。C、C++、C#、Java、Python、PHP、Fortran、VHDLなどのソースコードから、HTML・LaTeX・PDF・XML・manページ形式のリファレンスを出力します。導入はdoxygen -gで設定ファイルDoxyfileを生成し、INPUTとRECURSIVEとEXTRACT_ALLの3項目を書き換えてdoxygenを実行するだけで、最初のHTMLが出ます。日本語で出力したいならOUTPUT_LANGUAGE = Japanese、クラス図や呼び出しグラフが欲しいならGraphvizを入れてHAVE_DOT = YES。最新版は1.17.0(2026年4月30日リリース)で、@mermaidコマンドによるMermaid図の埋め込みが追加された一方、jQueryへの依存が削除されたためカスタムJavaScriptを使っている環境は更新前に確認が必要です。TypeScriptやKotlin、Rustは対応言語に含まれないため、その場合は別のツールを選ぶことになります。
Doxygenとは?コメント付きソースからAPIリファレンスを自動生成するツール
Doxygenがやることは単純です。関数やクラスの直前に決まった書式のコメントを置いておくと、それを解析して「どの関数がどの引数を取り、何を返し、どのクラスを継承しているか」を一覧化したドキュメントを吐き出します。手書きの仕様書と違い、コードを直せばドキュメントも同じコミットで直るため、実装とドキュメントの乖離が起きにくいのが採用理由の中心です。
読み方は「ドキシジェン」、作者はDimitri van Heesch、ライセンスはGPLv2
英語の発音は /ˈdɒksidʒən/ で、カタカナでは「ドキシジェン」と書くのが実態に最も近い表記です。日本語の技術記事では「ドキシゲン」と書かれることもありますが、指しているものは同じです。開発者はオランダのDimitri van Heesch氏で、ライセンスはGPLv2。ツール自体をそのまま使ってドキュメントを生成する分には、商用の社内プロジェクトでも費用はかかりません(GPLv2が定める義務が生じるのはDoxygen本体を改変して再配布する場合であり、Doxygenに読ませた自社ソースコードのライセンスがGPLになるわけではありません)。
対応言語12種の線引きと、HTML・PDF・XMLの出力形式
公式が対応言語として挙げているのは、C、C++、C#、D、Fortran、IDL、Java、Objective-C、Perl、PHP、Python、VHDLの12種です。ここにTypeScript・Kotlin・Rust・Goは含まれません。名前が挙がっている言語でも事情はさまざまで、たとえばJavaは対応言語ですが、標準のJavadocが行き渡っているため実務でDoxygenを持ち込む場面はC/C++と混在するプロジェクトに限られます。出力形式はHTML、LaTeX、PDF(LaTeX経由)、RTF、XML、DocBook、manページ、Windows用ヘルプ形式のCHMに対応します。
| 用途 | 設定項目 | 備考 |
|---|---|---|
| HTMLリファレンス | GENERATE_HTML = YES | 既定で有効・html/index.html |
| GENERATE_LATEX = YES | LaTeX環境が別途必要 | |
| 他ツール連携 | GENERATE_XML = YES | SphinxのBreathe等が読む |
| UNIX man | GENERATE_MAN = YES | CLIツール向け |
迷ったらHTMLだけで十分です。PDFはLaTeXの導入コストが高く、社内共有ならHTMLをGitHub Pagesで配信するほうが手間が少なく済みます。
最新版1.17.0の変更点(Mermaid対応とjQuery依存の削除)
2026年4月30日にリリースされた1.17.0では、@mermaid/@endmermaid/@mermaidfileコマンドが追加され、コメント内にMermaid記法の図をそのまま書けるようになりました(MERMAID_PATH、MERMAID_RENDER_MODE、MERMAID_JS_URLなどの設定項目が新設)。あわせてjQueryへの依存が削除されている点は要注意で、Doxygenが読み込むjQueryに乗せる形で独自JavaScriptを動かしていたプロジェクトは、1.17.0に上げると動かなくなります。自前でjQueryを読み込むよう修正してから更新してください。バージョンの並びは1.15.0が2025年10月22日、1.16.0が2026年1月5日、1.16.1が2026年1月11日、1.17.0が2026年4月30日です。
インストールから最初のHTML生成まで(Windows/macOS/Linux)
Windows・macOS・LinuxのインストールとGraphvizの同時導入
WindowsはWinGet、macOSはHomebrew、Debian/Ubuntu系はaptで入ります。クラス図や呼び出しグラフを出すつもりなら、この時点でGraphvizも一緒に入れておくと後戻りしません(公式のインストール手順でもGraphvizの併用が推奨されています)。
# Windows
winget install DimitriVanHeesch.Doxygen
# macOS
brew install doxygen graphviz
# Debian / Ubuntu
sudo apt install doxygen graphviz
# 確認
doxygen --version
doxygen -g で作るDoxyfileと、最初に触る5項目
Doxygenの設定はすべてDoxyfileというテキストファイルに書きます。プロジェクトのルートでdoxygen -gを実行すると、約300項目のコメント付きテンプレートが生成されますが、最初に触るのは次の5項目だけで動きます。
doxygen -g # Doxyfile を生成
| 項目 | 推奨値 | 意味 |
|---|---|---|
| PROJECT_NAME | “MyProject” | 生成物の見出しに出る名前 |
| INPUT | src include | 解析対象のディレクトリ |
| RECURSIVE | YES | サブディレクトリも辿る |
| EXTRACT_ALL | YES | 未コメントの要素も一覧に載せる |
| OUTPUT_DIRECTORY | docs | 出力先(既定はカレント) |
書き換えたらdoxygenを実行します。出力先のhtml/index.htmlをブラウザで開けば、その時点のクラス一覧・ファイル一覧・関数一覧が並んだリファレンスが表示されます。EXTRACT_ALL = YESは導入初期に効きます。コメントがまだ書かれていない関数も一覧に現れるため、「どこにコメントが足りていないか」がそのまま可視化されるからです。運用が軌道に乗ったらNOへ戻し、コメント付きの要素だけを載せる形に締めていきます。
日本語コメントを文字化けさせない設定
日本語で書いたコメントが生成物で文字化けする場合、原因はほぼ入力エンコーディングの不一致です。INPUT_ENCODINGの既定値はUTF-8なので、ソースがShift_JIS(CP932)なら明示的に指定します。指定できる値はDoxygenが内部で使うlibiconvの名前で、日本語のソースではSJISではなくCP932を選んでください。libiconvのSJISはJIS X 0208の範囲しか扱えず、丸数字や「㈱」といったCP932拡張文字で変換エラーになります。加えてOUTPUT_LANGUAGEを日本語にすると、「Public Member Functions」といった見出しラベル自体が日本語になります。
OUTPUT_LANGUAGE = Japanese
INPUT_ENCODING = UTF-8 # ソースがShift_JIS(CP932)なら CP932 を指定
DOXYFILE_ENCODING = UTF-8 # Doxyfile 自体の文字コード
Doxygenコメントの書き方と主要コマンド
関数コメントの最小形は @brief と @param と @return
Doxygenが拾うのは/**で始まる特別なコメントブロックです(///や/*!も同じ扱い)。関数の直前に置き、要約・引数・戻り値の3つを書けば、それだけでリファレンスとして成立します。
/**
* @brief 2つの整数を加算する
* @param a 加算される値
* @param b 加算する値
* @return a と b の和
* @throws std::overflow_error 結果が int の範囲を超えた場合
*/
int add(int a, int b);
よく使う8コマンド(@brief・@param・@throws・@deprecated)
| コマンド | 用途 |
|---|---|
| @brief | 一覧に出る1行要約 |
| @details | 詳細説明 |
| @param[in] / @param[out] | 引数と入出力方向 |
| @return / @retval | 戻り値 / 戻り値ごとの意味 |
| @throws | 送出する例外 |
| @file / @class | ファイル・クラスの説明 |
| @note / @warning | 補足 / 警告(枠付きで目立つ) |
| @deprecated | 非推奨の明示 |
接頭辞は@brief形式と\brief形式のどちらでも動作します。プロジェクト内で混在させると差分が読みにくくなるため、どちらかに統一してレビュー時のルールにしておくのが現実的です。
VS Codeでコメント雛形を自動生成する(Doxygen Documentation Generator)
@paramを引数の数だけ手で書くのは続きません。VS Codeを使っているなら、拡張機能「Doxygen Documentation Generator」(識別子cschlosser.doxdocgen、MITライセンス)を入れます。関数定義の直上で/**と入力してEnterを押すと、シグネチャを解析して@briefと引数分の@param、戻り値の@returnを含む雛形が展開されます。人間が書くのは要約文だけになります。
雛形の中身はsettings.jsonで変えられます。たとえばdoxdocgen.generic.paramTemplateで@param行の書式を、doxdocgen.generic.orderで各タグの並び順を指定できるため、チームのコメント規約に合わせてから配布すると表記ゆれが出ません。対応は主にC/C++で、シグネチャ解析の精度もこの2言語が前提である点は把握しておいてください。
クラス図・呼び出しグラフの生成(GraphvizのdotとMermaid)
Doxygenの図には2系統あります。ひとつはGraphvizのdotに描かせる自動生成の図で、クラスの継承関係、コラボレーション図、ヘッダの依存関係、関数の呼び出しグラフ(関数ツリー)がコードから機械的に描かれます。HAVE_DOT = YESにしたうえで、必要なグラフを個別に有効化します。
HAVE_DOT = YES
CALL_GRAPH = YES # その関数が呼び出している関数のツリー
CALLER_GRAPH = YES # その関数を呼び出している関数のツリー
DOT_BATCH_SIZE = 32 # 1.17.0で追加。dotをまとめて実行し起動オーバーヘッドを削減
呼び出しグラフは既存コードの解読に効く一方、大規模プロジェクトで全関数に対して有効にすると生成時間が跳ね上がります。まずは対象を絞って有効化し、CIで毎回回すなら生成時間を計測してから広げるのが安全です。1.17.0で追加されたDOT_BATCH_SIZEは、この生成コストを下げるための設定です。
もうひとつは、自分で描く図です。1.17.0以降は@mermaidコマンドでコメント内にMermaid記法のフローチャートやシーケンス図を直接書けます。記法そのものはMermaid記法の使い方とVSCodeでMermaidを使う方法が使えますし、UML寄りの図を別ツールで管理したい場合はPlantUMLの成果物を画像として貼る運用もとれます。設計意図のような「コードから機械的に導けない情報」は、この手描きの図で補うのが本来の使い分けです。
Doxygenを選ぶべき場面と、選ぶべきでない場面
Doxygenが強いのは、C/C++のヘッダファイルという「宣言の集約点」がある言語です。ヘッダにコメントを書けばAPI一覧がそのまま出来上がり、継承図と呼び出しグラフまで無料で付いてくる。組み込み、ゲームエンジン、ミドルウェアといった長寿命のC/C++資産では、いまでも第一候補です。
逆に、次の場合は選ぶべきではありません。Pythonが主体のプロジェクトでは、Doxygenは動くもののエコシステムがSphinx(docstringとreStructuredText)に寄っており、生成物の見た目も配布先(Read the Docs)も後者のほうが整っています。DoxygenのXML出力をBreatheでSphinxに取り込む構成もありますが、C++とPythonが混在するプロジェクトでの折衷案であって、Pythonだけなら回り道です。TypeScript・Kotlin・Rust・Goに至っては対応言語ですらないため、TypeDoc・Dokka・rustdoc・godocを使ってください。「ドキュメント自動生成といえばDoxygen」という選び方は、C/C++以外では失敗します。
もうひとつ、DoxygenはAPIリファレンスの生成器であって、チュートリアルやアーキテクチャ解説の置き場ではありません。関数一覧が完璧に揃っていても、新規参画者が最初に知りたい「どこから読むべきか」は書かれません。そこは@mainpageを使った手書きのトップページか、リポジトリのREADMEで補う前提で導入してください。
よくある質問
Doxygenの読み方は何ですか
「ドキシジェン」です。英語の発音記号は /ˈdɒksidʒən/ で、最初の音節にアクセントがあります。日本語の記事では「ドキシゲン」と表記されることもありますが、いずれも同じツールを指します。開発者はDimitri van Heesch氏です。
PythonやTypeScriptでもDoxygenは使えますか
Pythonは公式の対応言語に含まれるため使えますが、実務ではdocstringとSphinxを使う構成が主流で、生成物の質・配布のしやすさともにSphinxに分があります。TypeScript・Kotlin・Rust・Goは対応言語に含まれていないため、それぞれTypeDoc・Dokka・rustdoc・godocを選んでください。
DoxygenでPDFを出力するにはどうすればよいですか
DoxyfileでGENERATE_LATEX = YESにしてdoxygenを実行し、生成されたlatexディレクトリでmakeを実行するとrefman.pdfが作られます。この工程にはLaTeX環境(TeX Liveなど)が別途必要です。社内共有が目的なら、HTML出力をそのまま配信するほうが導入コストは低く済みます。
Doxygenの出力を日本語にするにはどうすればよいですか
OUTPUT_LANGUAGE = Japaneseを指定すると、生成物の見出しラベルが日本語になります。日本語コメントが文字化けする場合はINPUT_ENCODINGを確認してください。既定はUTF-8なので、ソースがShift_JIS(CP932)ならINPUT_ENCODING = CP932と明示します。SJISを指定するとCP932の拡張文字が変換できず、化けが残ります。
DoxygenとSphinxはどう使い分けますか
C/C++のAPIリファレンスならDoxygen、Pythonのドキュメントやチュートリアルを含む読み物ならSphinxです。C++の関数一覧とPythonのドキュメントを1つのサイトにまとめたい場合は、DoxygenのGENERATE_XML = YESで出力したXMLをBreathe経由でSphinxに取り込む構成が使えます。