Doxygen(ドキシジェン)は、ソースコードに書いたコメントを読み取ってAPIリファレンスを自動生成するツールです。C++の世界では事実上の標準で、ヘッダファイルにコメントを添えるだけでHTMLのリファレンスサイトやクラスの継承図ができあがります。ここでは読み方と名前の由来、対応言語、Doxyfileの最小設定、日本語コメントの文字化け対策、VS Codeでの雛形生成、最新版1.18.0の変更点までを、導入する順序どおりに解説します。設定の挙動は、macOSのIntel環境にHomebrewで導入したDoxygen 1.18.0で確認しています。文字コード変換の結果は、この環境での検証結果です。
まとめ
Doxygenは、Dimitri van Heesch氏が開発したGPLv2のドキュメント生成ツールです。読み方は「ドキシジェン」で、作者自身は「Docs-ee-gen」と発音すると説明しています。既定で対応する言語はC、C++、C#、Java、Python、PHP、Objective-C、Fortranなど11言語とハードウェア記述言語のVHDLで、HTML・LaTeX(PDF)・XML・manページなどを出力します。
使い始めはdoxygen -gでDoxyfileを作り、INPUT・RECURSIVE・EXTRACT_ALLを書き換えてdoxygenを実行するだけです。GUIで設定したいならDoxywizardを使います。最新版の1.18.0(2026年8月13日)でDoxywizardの画面と設定項目の説明が日本語化されました。
日本語のソースでは、文字コードの指定違いによって文字化けや生成エラーが起きます。Shift_JISのソースにはINPUT_ENCODING = CP932を指定します。SJISを指定すると、丸数字などのCP932拡張文字を含むファイルが1つあるだけで生成全体が止まります。TypeScriptは関数を抽出できず、Rust・Goも対象外なので、それらの言語では各言語の標準ツールを選んでください。
Doxygenとは?コメント付きソースからAPIリファレンスを自動生成するツール
Doxygenがやることは単純です。関数やクラスの直前に決まった書式のコメントを置いておくと、それを解析して「どの関数がどの引数を取り、何を返し、どのクラスを継承しているか」を一覧化したドキュメントを出力します。コードと説明コメントを同じコミットで更新し、Doxygenを再実行する運用にすると、実装とドキュメントを一緒に管理できます。ただし、実装だけを変更しても説明コメントの内容は自動では修正されません。
読み方は「ドキシジェン」、名前の由来はdocsとgenerator
日本語では「ドキシジェン」と書くのが一般的で、日本語版Wikipediaは「ドキシジェンまたはドクシジェン」と併記しています。作者による説明は公式FAQにあり、名前はdocumentation(docs→dox)とgenerator(gen)の組み合わせです。間の「y」は、当時作者が調べていたlexとyaccの関数名がyyで始まることから入り込んだもので、発音は「Docs-ee-gen」(eを長く伸ばす)とされています。カタカナに寄せるなら「ドクスィージェン」が原音に近い表記です。
最初の版は、1997年10月26日にQtのメーリングリストで告知された0.1です。当時は「C++向けのドキュメントシステム」として、HTMLのクラスブラウザを生成するツールでした。ライセンスはGPLv2ですが、公式サイトは「Doxygenが生成したドキュメントは入力から派生したものであり、このライセンスの影響を受けない」と明記しています。商用の社内プロジェクトで使っても、Doxygenに読ませた自社ソースや生成されたHTMLがGPLになることはありません。
対応言語は11言語とVHDL、出力はHTML・PDF・XMLなど
公式マニュアルの導入手順が既定の対応言語として挙げるのは、C、C++、Lex、C#、Objective-C、IDL、Java、PHP、Python、Fortran、Dの11言語と、ハードウェア記述言語のVHDLです。TypeScript・Kotlin・Rust・Goは含まれません。JavaScriptは既定のファイルパターンに入っていないものの、拡張子の割り当てで読ませることはできます(実際の挙動は後述の選定の章で示します)。Java単独のプロジェクトではJavadocを第一候補にします。C/C++との混在や既存の文書生成基盤への統一など、Doxygenを採用する理由がある場合に比較してください。
| 用途 | 設定項目 | 1.18.0の既定値 |
|---|---|---|
| HTMLリファレンス | GENERATE_HTML | YES(html/index.html) |
| PDF(LaTeX経由) | GENERATE_LATEX | YES |
| 他ツール連携 | GENERATE_XML | NO |
| UNIXのmanページ | GENERATE_MAN | NO |
GENERATE_LATEXは既定でYESなので、何も変えずに実行するとHTMLと一緒にlatexディレクトリも出力されます。PDFが不要ならNOにしておくと、LaTeX用ファイルの生成を省けます。社内共有ならHTMLをGitHub Pagesで配信できます。ただし、社内限定の公開には閲覧制限が必要です。GitHub Enterprise Cloudの非公開公開機能を利用できない場合は、認証付きの社内Webサーバーなどを選んでください。
最新版1.18.0の変更点と、1.17.0で入ったMermaid対応
2026年8月13日リリースの1.18.0では、GUIの設定ツールDoxywizardの画面と設定項目の説明が、英語に加えて日本語・ドイツ語・フランス語・スペイン語・ロシア語・韓国語・中国語(簡体・繁体)の8言語に翻訳されました。メニューから表示言語を切り替えられ、ウィザードから日本語のコメント付きDoxyfileを生成することもできます。エキスパート画面には設定項目の検索欄が付きました。互換性に関わる変更はSOURCE_TOOLTIPSがHTML_DYNAMIC_SECTIONSから独立した1点です(公式の変更履歴)。
その前の1.17.0(2026年4月30日)では@mermaid/@endmermaid/@mermaidfileコマンドが追加され、コメント内にMermaid記法の図を書けるようになりました。同じ版でjQueryへの依存が削除されています。Doxygenが読み込むjQueryに乗せて独自JavaScriptを動かしていたプロジェクトは、1.17.0以降に上げると動かなくなるため、自前でjQueryを読み込むよう直してから更新してください。
| 版 | リリース日 | 主な変更 |
|---|---|---|
| 1.18.0 | 2026年8月13日 | Doxywizardの日本語化・設定検索 |
| 1.17.0 | 2026年4月30日 | Mermaid対応・jQuery依存の削除 |
| 1.16.1 | 2026年1月11日 | 1.16.0の不具合修正 |
| 1.16.0 | 2026年1月5日 | 機能追加 |
| 1.15.0 | 2025年10月22日 | 機能追加 |
1.18.0では、1.17.0で入ったMermaidまわりの不具合(オフライン環境でのCDN読み込み、\mermaidコマンドのブロック保護)も修正されています。Mermaidを使うなら1.18.0から始めるのが無難です。
インストールから最初のHTML生成まで(Windows/macOS/Linux)
Windows・macOS・Linuxのインストール
WindowsはWinGet、macOSはHomebrew、Debian/Ubuntu系はaptで入ります。クラス図や呼び出しグラフを出すつもりなら、Graphvizも一緒に入れておくと後戻りしません。WinGetの公式マニフェストとHomebrewには、1.18.0が登録済みです(2026年10月14日確認)。Ubuntuなどのaptは配布元の更新が遅れるため、入る版が古いことがあります。
# Windows
winget install DimitriVanHeesch.Doxygen
winget install graphviz
# macOS(Homebrew版はコマンドラインのdoxygenのみ)
brew install doxygen graphviz
# Debian / Ubuntu(GUIのDoxywizardはdoxygen-guiパッケージ)
sudo apt install doxygen doxygen-gui graphviz
# 確認
doxygen --version
HomebrewのdoxygenにはGUIのDoxywizardが含まれていません。macOSでDoxywizardを使いたい場合は、公式のダウンロードページからディスクイメージ(Intel版とApple Silicon版がある)を入れます。WindowsのインストーラーにはDoxywizardが同梱されています。
doxygen -g で作るDoxyfileと、最初に触る5項目
Doxygenの設定はすべてDoxyfileというテキストファイルに書きます。プロジェクトのルートでdoxygen -gを実行すると、コメント付きのテンプレートが生成されます。1.18.0で生成すると設定項目は311個、ファイルは3,052行ありますが、最初に触るのは次の5項目だけで動きます。
doxygen -g # Doxyfile を生成(既存があれば Doxyfile.bak に退避)
| 項目 | 推奨値 | 既定値 |
|---|---|---|
| PROJECT_NAME | プロジェクト名 | My Project |
| INPUT | src include | 空(カレントのみ) |
| RECURSIVE | YES | NO |
| EXTRACT_ALL | YES(導入初期) | NO |
| OUTPUT_DIRECTORY | docs | 空(カレント) |
書き換えたらdoxygenを実行します。出力先のhtml/index.htmlをブラウザで開けば、クラス一覧・ファイル一覧・関数一覧が並んだリファレンスが表示されます。RECURSIVEが既定でNOなのは見落としやすく、INPUTにディレクトリを書いてもサブディレクトリの中は読まれません。EXTRACT_ALL = YESは導入初期に効きます。コメントがまだ無い関数も一覧に出るため、どこにコメントが足りないかが見えるからです。運用が軌道に乗ったらNOへ戻し、コメント付きの要素だけを載せる形に締めていきます。
GUIで設定するならDoxywizard(1.18.0で日本語化)
300を超える設定項目をテキストで探すのがつらいなら、GUIのDoxywizardを使います。公式の説明どおり、主要な設定だけをまとめた「Wizard」タブ、全項目を触れる「Expert」タブ、Doxygenを実行する「Run」タブの3つで構成されます。作業ディレクトリを選び、Wizardタブでプロジェクト名・入力ディレクトリ・出力形式を選んでRunタブから実行すれば、Doxyfileを手で書かずに最初のHTMLまで出せます。
1.18.0からは画面と各設定項目の説明を日本語で表示でき、Expertタブに検索欄も付きました。設定を保存するとDoxyfileとして書き出されるので、GUIで作ったファイルをリポジトリに入れ、CIではコマンドラインのdoxygenで同じ設定を使う運用ができます。
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);
主要コマンドの用途別一覧(@brief・@param・@throws・@deprecated)
| コマンド | 用途 |
|---|---|
| @brief | 一覧に出る1行要約 |
| @details | 詳細説明 |
| @param[in] / @param[out] | 引数と入出力方向 |
| @return / @retval | 戻り値 / 戻り値ごとの意味 |
| @throws | 送出する例外 |
| @file / @class | ファイル・クラスの説明 |
| @note / @warning | 補足 / 警告(枠付きで目立つ) |
| @deprecated | 非推奨の明示 |
接頭辞は@brief形式と\brief形式のどちらでも動作します。混在させると差分が読みにくくなるため、どちらかに統一してレビュー時のルールにしておきます。なお、EXTRACT_ALL = NOでグローバル関数を掲載するには、原則として@fileでファイル自体も文書化します。EXTRACT_ALL = YESの場合や、文書化したグループに関数を含める場合は例外です。C言語のように関数をヘッダに並べるプロジェクトでは、各ヘッダの先頭に@fileを置いてください。
Doxygenの警告設定とCIの失敗判定
Doxygenは生成時にコメントの不備を警告します。ただしEXTRACT_ALL = YESの間は、コメントの無いメンバーについての警告が出ません。書き漏れの検出に使うのは、導入初期を過ぎてEXTRACT_ALLをNOへ戻してからです。NOの状態で、@file付きのヘッダに引数名をyからcに書き間違えた関数とコメントの無い関数を置くと、1.18.0では次のように出ます(WARN_IF_UNDOCUMENTEDは既定でYES)。
calc.h:22: warning: Member mul(int a, int b) (function) of file calc.h is not documented.
calc.h:16: warning: argument 'c' of command @param is not found in the argument list of sub(int x, int y)
calc.h:16: warning: The following parameter of sub(int x, int y) is not documented:
parameter 'y'
ただし警告が出てもdoxygenの終了コードは0のままで、CIは成功扱いになります。コメントの書き漏れをプルリクエストで止めたいなら、DoxyfileにWARN_AS_ERROR = FAIL_ON_WARNINGSを書きます。この設定では生成を最後まで続けたうえで終了コード1を返すため、HTMLは出力しつつジョブを失敗にできます。YESにすると最初の警告で生成を止めるので、既存コードに後から導入するときはFAIL_ON_WARNINGSのほうが扱いやすくなります。
日本語コメントを文字化けさせない設定(1.18.0で検証)
日本語で書いたコメントが化ける原因は、ほぼ入力エンコーディングの不一致です。INPUT_ENCODINGの既定値はUTF-8で、Shift_JISで保存された古いヘッダを読ませるには文字コードを指定します。ここでSJISとCP932のどちらを書くかで結果が大きく変わります。丸数字「①」と「㈱」を含むコメントをShift_JIS(CP932)で保存したヘッダを用意し、1.18.0で3通りに読ませた結果が次の表です。
| 指定 | 警告・エラー | 終了コード | 出力 |
|---|---|---|---|
| 指定なし(UTF-8) | なし | 0 | コメントが全て文字化け |
| SJIS | failed to translate characters | 1 | 生成全体が中止 |
| CP932 | なし | 0 | 正しく表示 |
危ないのは1行目です。何も指定しないと警告すら出ないまま、Shift_JISのコメントが文字化けしたHTMLが出力されます。CIで生成している場合、誰かがページを開くまで気づけません。2行目のSJISは、DoxygenがlibiconvのSJISとして扱うためJIS X 0208の範囲外の文字(丸数字や「㈱」などCP932の拡張文字)を変換できず、そのファイル1つのために生成全体が止まります。Windowsで書かれたShift_JISのソースにはCP932を指定してください。
UTF-8とShift_JISのファイルが混在するリポジトリでは、ファイル名のパターンごとに文字コードを変えられるINPUT_FILE_ENCODINGを使います。見出しのラベルを日本語にするのはOUTPUT_LANGUAGEで、Japaneseにすると「Public Member Functions」が「公開メンバ関数」、「Parameters」が「引数」、「Detailed Description」が「詳解」に変わります。
OUTPUT_LANGUAGE = Japanese
INPUT_ENCODING = UTF-8
INPUT_FILE_ENCODING = *legacy/*.h=CP932 # Shift_JISのヘッダだけCP932で読む
DOXYFILE_ENCODING = UTF-8 # Doxyfile自体の文字コード
VS CodeでのDoxygenコメント雛形の自動生成
@paramを引数の数だけ手で書くのは続きません。VS Codeでは、拡張機能で関数のシグネチャから雛形を展開させます。選択肢は2つあり、C/C++の開発でMicrosoftのC/C++拡張を入れているなら、まずそちらの標準機能を試すのが手軽です。
Doxygen Documentation Generator(cschlosser.doxdocgen)
「Doxygen Documentation Generator」(識別子cschlosser.doxdocgen、MITライセンス)は、関数定義の直上で/**と入力してEnterを押すと、@briefと引数分の@param、戻り値の@returnを含む雛形を展開します。Visual Studio Marketplaceでのインストール数は約1,242万件です(2026年10月14日にMarketplaceのAPIで確認)。
雛形の中身はsettings.jsonで変えられます。doxdocgen.generic.paramTemplate(既定は@param {param})で@param行の書式を、doxdocgen.generic.orderで各タグの並び順を、doxdocgen.file.fileOrderでファイル先頭のコメントの並びを指定できます。チームのコメント規約に合わせてから配布すると表記ゆれが出ません。ただしMarketplaceでの最終公開版は1.4.0(2022年2月25日公開)で、2026年10月14日時点でそれ以降の版は出ていません。
Microsoft C/C++拡張の標準機能との使い分け
MicrosoftのC/C++拡張(ms-vscode.cpptools)にも、Doxygen形式のコメントを生成する機能があります。2026年9月9日公開の1.34.4の設定では、C_Cpp.doxygen.generateOnTypeが既定で有効で、コメントの開始文字はC_Cpp.doxygen.generatedStyleで選びます。既定は///で、/**・/*!・//!にも変えられます。
使い分けの目安は単純です。C/C++拡張を入れているなら、追加の拡張なしで///から雛形が出ます。ファイル先頭のコメントに作成者や日付を自動で入れたいといった細かい書式の指定が要るなら、doxdocgenを足します。両方を入れて開始文字を/**にそろえると、同じ入力に2つの拡張が反応しうるので、開始文字は分けておきます。
クラス図・呼び出しグラフの生成(GraphvizのdotとMermaid)
Doxygenの図には2系統あります。ひとつはGraphvizのdotに描かせる自動生成の図で、クラスの継承関係、コラボレーション図、ヘッダの依存関係、関数の呼び出しグラフがコードから機械的に描かれます。HAVE_DOTは既定でNOなので、YESにしたうえで必要なグラフを個別に有効化します。
HAVE_DOT = YES
CALL_GRAPH = YES # その関数が呼び出している関数のツリー(既定NO)
CALLER_GRAPH = YES # その関数を呼び出している関数のツリー(既定NO)
DOT_BATCH_SIZE = 50 # 1.17.0で追加。dotにまとめて渡すグラフ数(既定50・1〜1000)
呼び出しグラフは既存コードの解読に効く一方、大規模プロジェクトで全関数に有効にすると生成時間が跳ね上がります。まずは対象を絞って有効化し、CIで毎回回すなら生成時間を測ってから広げます。
もうひとつは自分で描く図で、1.17.0以降は@mermaidコマンドでコメント内にMermaid記法のフローチャートやシーケンス図を書けます。MERMAID_RENDER_MODEの既定はAUTOで、HTMLではブラウザ側で描画し、そのためのmermaid.jsをCDN(jsDelivr)から読み込みます。社内ネットワークなど外部に出られない環境では、MERMAID_JS_URLを社内に置いたファイルへ向けるか、mermaid-cli(mmdc)で画像を事前生成するCLIモードに切り替えます。PDFなどHTML以外の出力にもmmdcが必要です。記法そのものはMermaid記法の使い方、UML寄りの図を別ツールで管理したい場合はPlantUMLが参考になります。
Doxygenを選ぶべき場面と、選ぶべきでない場面
C/C++の長寿命資産では第一候補
Doxygenが強いのは、C/C++のヘッダファイルという「宣言の集約点」がある言語です。ヘッダにコメントを書けばAPI一覧ができあがり、継承図と呼び出しグラフまで無料で付いてきます。組み込み、ゲームエンジン、ミドルウェアといった長寿命のC/C++資産では、いまでも第一候補です。Shift_JISの古いヘッダが残っていても、前述のINPUT_FILE_ENCODINGで一緒に扱えます。社内APIの仕様整備まで含めて開発を外に出すなら、API開発・システム連携の支援も使えます。
JavaScript・TypeScriptの抽出制限(1.18.0で検証)
JavaScriptとTypeScriptは、既定のFILE_PATTERNSに含まれていません。入力がJavaScriptとTypeScriptのファイルだけなら、「No files to be processed」と警告が出て、関数のリファレンスは生成されません。ただし、空のHTMLトップページなどは出力されます。FILE_PATTERNS = *.ts *.jsとEXTENSION_MAPPING = ts=JavaScript js=JavaScriptを足して読ませた結果は次のとおりです。
- TypeScript:ファイルの一覧には載るものの、
export function reverse(s: string): stringのような型注釈付きの関数は抽出されず、ページは空のまま - JavaScript:関数は抽出されるが、JSDoc形式の
@param {number[]} xsの{number[]}を引数名と解釈し、「argument ‘number’ of command @param is not found」と警告する
JSDocの型表記を使っている時点で、Doxygenとは書式が合いません。JavaScriptはJSDoc、TypeScriptはTypeDocを使ってください。
Python・Java・Rust・Go・Kotlinの文書生成ツール選定
Pythonが主体のプロジェクトでは、Doxygenも動きますが、docstringとreStructuredTextを読むSphinxが標準的な選択肢です。既存のSphinx設定やRead the Docsでの公開手順があるなら、それを使い続けたほうが文書生成の仕組みを増やさずに済みます。DoxygenのXML出力をBreatheでSphinxに取り込む構成は、C++とPythonが混在するプロジェクトでの折衷案であり、Pythonだけなら回り道です。Markdownで書く手順書やチュートリアル主体のサイトならMkDocsも候補になります。JavaはJavadoc、Rustはrustdoc、Goはgo docが標準で、Kotlinは公式のDokkaを使います。C/C++以外では、対応する構文と既存のコメント形式を確認し、各言語向けのツールを第一候補にしてください。
もうひとつ、DoxygenはAPIリファレンスに加え、手書きのチュートリアルや設計解説も掲載できますが、それらの説明文までコードから自動生成するわけではありません。関数一覧が揃っていても、新しく参加した人が最初に知りたい「どこから読むべきか」は書かれません。そこは@mainpageを使った手書きのトップページか、リポジトリのREADMEで補う前提で導入してください。
よくある質問
Doxygenの読み方は何ですか?
日本語では「ドキシジェン」と読むのが一般的で、「ドクシジェン」と書かれることもあります。作者のDimitri van Heesch氏は公式FAQで、発音を「Docs-ee-gen」(eを長く伸ばす)と説明しています。名前はdocumentationとgeneratorを組み合わせた造語です。
PythonやTypeScriptでもDoxygenは使えますか?
Pythonは既定の対応言語なので使えますが、実務ではdocstringとSphinxの構成が主流です。TypeScriptは対応言語に含まれず、拡張子の割り当てで読ませても型注釈付きの関数は抽出されません。TypeScriptはTypeDoc、Rustはrustdoc、Goはgo docを選んでください。
DoxygenでPDFを出力するにはどうすればよいですか?
GENERATE_LATEX = YES(既定値)のままdoxygenを実行し、生成されたlatexディレクトリでmakeを実行するとrefman.pdfができます。この工程にはTeX LiveなどのLaTeX環境が別途必要です。社内共有が目的なら、HTMLをそのまま配信するほうが導入の手間は少なく済みます。
Doxygenの出力を日本語にするにはどうすればよいですか?
OUTPUT_LANGUAGE = Japaneseを指定すると、「Parameters」が「引数」になるなど見出しのラベルが日本語になります。日本語のコメントが化ける場合はINPUT_ENCODINGを確認してください。Shift_JISのソースならCP932を指定します。SJISでは丸数字などを含むファイルで生成全体が止まります。GUIのDoxywizardは1.18.0から画面を日本語で表示できます。
DoxygenとSphinxはどう使い分けますか?
C/C++のAPIリファレンスならDoxygen、Pythonのドキュメントやチュートリアルを含む読み物ならSphinxです。C++の関数一覧とPythonのドキュメントを1つのサイトにまとめたい場合は、DoxygenのGENERATE_XML = YESで出力したXMLを、Breathe経由でSphinxに取り込む構成が使えます。