# Doxygen 着色出力の調査結果

# 1 調査概要

Doxygen の警告・エラーメッセージに対する ANSI カラーコード着色機能の有無について調査を実施しました。

# 2 調査結果

## 2.1 Doxygen 本体の機能

Doxygen には、警告やエラーメッセージを着色する機能は実装されていません。

2022 年 1 月に GitHub Issue #9038 にて機能要望が提出されていますが、2025 年 11 月時点でも未実装の状態です。

## 2.2 代替アプローチ

Doxygen 本体に機能がないため、外部フィルタースクリプトによる着色を実装しました。

# 3 実装方針

## 3.1 検出パターン

誤検知を防ぐため、以下のパターンでマッチングを行います。

- エラー: `error:` (前後にスペースを含む)
- ワーニング: `warning:` (前後にスペースを含む)

スペースを含めることで、コード内の文字列や変数名との誤マッチを防止します。

## 3.2 着色方法

ANSI カラーコードを使用して、ターミナル出力に色を付けます。

- エラー: 赤色 (ANSI コード `\033[0;31m`)
- ワーニング: 黄色 (ANSI コード `\033[0;33m`)
- リセット: `\033[0m`

# 4 Doxygen の警告関連設定

Doxyfile には以下の警告関連設定が存在します。

    WARNINGS               = YES
    WARN_IF_UNDOCUMENTED   = YES
    WARN_IF_DOC_ERROR      = YES
    WARN_IF_INCOMPLETE_DOC = YES
    WARN_NO_PARAMDOC       = NO
    WARN_IF_UNDOC_ENUM_VAL = NO
    WARN_LAYOUT_FILE       = YES
    WARN_AS_ERROR          = NO
    WARN_FORMAT            = "$file:$line: $text"
    WARN_LINE_FORMAT       = "at line $line of file $file"
    WARN_LOGFILE           =

## 4.1 主要な設定項目

- `WARNINGS`: 警告メッセージの有効化
- `WARN_FORMAT`: 警告メッセージのフォーマット (`$file`, `$line`, `$text` のプレースホルダーを使用)
- `WARN_LOGFILE`: 警告ログの出力先ファイル (空の場合は stderr に出力)

# 5 出力バッファリング

Doxygen の出力をリダイレクトする際、バッファリングによって stdout と stderr の出力順序が入れ替わる問題が発生する可能性があります。

`-b` フラグを使用することで、この問題を回避できます。

    doxygen -b > out.txt 2>&1

本実装では、`2>&1` でストリームを結合してフィルターに渡すため、バッファリング問題は発生しません。

# 6 参考情報

- Colorize Command Line Output warnings · Issue #9038 · doxygen/doxygen
- Doxygen: Configuration
- Force line buffering · Issue #8329 · doxygen/doxygen