doxybook2-decolorize-output.sh は、Doxybook2 の出力メッセージから過剰な ANSI カラーコードを除去するフィルタースクリプトです。[info] ログを完全に脱色し、[warning] / [error] / [critical] の太字を除去します。
Doxybook2 は spdlog ライブラリを使用してログ出力を行っており、デフォルトで ANSI カラーコードによる着色が有効になっています。実行時、以下の問題が発生します。
[info] レベルのログが緑色で大量に出力され、視認性が低下する[info] は情報メッセージであり、着色の必要性が低い[warning]、[error]、[critical] の太字も、強調が過剰である[critical] の赤背景も過剰であり、通常の赤文字で十分であるDoxygen 着色スクリプト (doxygen-colorize-output.sh) とは逆のアプローチを採用します。
[info] は完全脱色、[warning] / [error] / [critical] は太字を除去[単語] のみが着色されるdoxybook2-decolorize-output.sh
実行可能 (chmod +x)
標準入力から受け取った各行を解析し、ログレベルに応じて ANSI カラーコードを除去または調整します。
| ログレベル | 検出パターン | 処理内容 | 処理後の表示 |
|---|---|---|---|
| Info | [info] |
全ての ANSI コードを削除 | デフォルト (着色なし) |
| Critical | [critical] |
太字と背景色を除去し、赤色に変換 | 🔴 赤 (通常の太さ、背景なし) |
| Warning | [warning] |
太字コードを除去、黄色は維持 | 🟡 黄 (通常の太さ) |
| Error | [error] |
太字コードを除去、赤色は維持 | 🔴 赤 (通常の太さ) |
| その他 | (該当なし) | そのまま出力 | 変更なし |
if [[ "$line" == *"[info]"* ]]; then行内に [info] が含まれる場合にマッチします。
elif [[ "$line" == *"[critical]"* ]]; then行内に [critical] が含まれる場合にマッチします。
elif [[ "$line" == *"[warning]"* ]] || [[ "$line" == *"[error]"* ]]; then行内に [warning] または [error] が含まれる場合にマッチします。
echo "$line" | sed 's/\x1b\[[0-9;]*m//g'正規表現の説明:
- \x1b: ESC 文字 (8 進数 033)
- \[: 左角括弧
- [0-9;]*: 数字とセミコロンの 0 回以上の繰り返し
- m: 終端文字
echo "$line" | sed 's/\x1b\[1;41m/\x1b[0;31m/g'処理内容:
- 太字 + 赤背景 (\033[1;41m) を通常の赤文字 (\033[0;31m) に変換
- [critical] という単語のみが赤色で表示される
echo "$line" | sed 's/\x1b\[1;/\x1b[0;/g'変換例:
- \033[1;33m (太字 + 黄色) → \033[0;33m (通常 + 黄色)
- \033[1;31m (太字 + 赤色) → \033[0;31m (通常 + 赤色)
| 項目 | doxygen-colorize-output.sh | doxybook2-decolorize-output.sh |
|---|---|---|
| 目的 | 着色を追加 | 着色を削除/調整 |
| 対象 | error, warning | info, warning, error |
| 処理 | ANSI コードを付与 | ANSI コードを除去/変換 |
| 理由 | 着色が不足 | 着色が過剰 |
[info] の形式は、スペースを含まない明確なパターンであるため、誤検知の可能性が低く、シンプルなマッチングで十分です。
doxybook2 -i ../xml -o ../docs-src/doxybook2 --config doxybook2-config.json --templates templates 2>&1 | $(MAKEFILE_DIR)/doxybook2-decolorize-output.sh2>&1: stderr を stdout にリダイレクトして結合|: パイプでフィルタースクリプトに渡すdoxybook2 -i ../xml -o ../docs-src/doxybook2 --config doxybook2-config.json --templates templates 2>&1 | $(MAKEFILE_DIR)/doxybook2-decolorize-output.sh;
DOXYBOOK2_EXIT=${PIPESTATUS[0]};
exit $DOXYBOOK2_EXIT;PIPESTATUS[0] を使用して、パイプの最初のコマンド (doxybook2) の終了コードを取得し、ビルドの成否を正しく判定します。
[2025-11-26 10:30:15.123] [info] Processing file calculator.h
[2025-11-26 10:30:15.124] [warning] Missing brief description
[2025-11-26 10:30:15.125] [error] Failed to parse member
[2025-11-26 10:30:15.126] [critical] Fatal error occurred
(ターミナルでは [info] が緑、[warning] が太字黄色、[error] が太字赤色、[critical] が太字 + 赤背景で表示)
[2025-11-26 10:30:15.123] [info] Processing file calculator.h
[2025-11-26 10:30:15.124] [warning] Missing brief description
[2025-11-26 10:30:15.125] [error] Failed to parse member
[2025-11-26 10:30:15.126] [critical] Fatal error occurred
([info] は着色なし、[warning] 単語は通常の太さの黄色、[error] と [critical] 単語は通常の太さの赤色で表示)
元々 ANSI カラーコードに対応していないターミナルでは、Doxybook2 自体が着色を出力しないため、本スクリプトの効果はありません。
ANSI カラーコードを含む出力をファイルにリダイレクトする場合、本スクリプトを適用することで、ログファイルに不要なエスケープシーケンスが含まれることを防げます。
doxybook2 ... 2>&1 | doxybook2-decolorize-output.sh | tee doxybook2.log以下のコマンドでスクリプト単体のテストが可能です。
cat <<'EOF' | doxybook2-decolorize-output.sh
Normal output line
[2025-11-26 10:30:15.123] [info] Processing file
Another normal line
[2025-11-26 10:30:15.124] [warning] Missing description
[2025-11-26 10:30:15.125] [error] Parse failed
[2025-11-26 10:30:15.126] [critical] Fatal error
More normal output
EOF期待される結果:
- [info] 行: ANSI コードが完全に削除される
- [critical] 行: 太字と背景色が除去され、[critical] 単語が通常の太さの赤色になる
- [warning] 行: 太字が除去され、[warning] 単語が通常の太さの黄色になる
- [error] 行: 太字が除去され、[error] 単語が通常の太さの赤色になる
実際の ANSI コードを含むテストは以下の通りです。
cat <<'EOF' | doxybook2-decolorize-output.sh
Normal output line
[2025-11-26 10:30:15.123] [32m[info][0m Processing file
[2025-11-26 10:30:15.124] [1;33m[warning][0m Missing description
[2025-11-26 10:30:15.125] [1;31m[error][0m Parse failed
[2025-11-26 10:30:15.126] [1;41m[critical][0m Fatal error
EOFmakefile: 本スクリプトを doxybook2 実行時に適用docs-src/doxybook2-decolorize-output-research.md: 調査結果と背景情報doxygen-colorize-output.sh: Doxygen 用の着色スクリプト (対比参考)