20.【Marp】日本語豆腐(□)はなぜ設定で直らないのか|PPTXとフォントの構造
tags:
- Markdown
- Marp
- PowerPoint
- フォント
- GitHubActions
🎯 この記事でやること
前回の記事では、
Marp × GitHub Actions で PPTX を生成した際、日本語が □(豆腐)になる問題で止まっている状況を書きました。
👉 今回は 解決編ではありません。
この記事の目的は 1 つだけです。
なぜ日本語豆腐は「設定をいじっても」直らないのかを、構造で説明すること
結論(先に)
日本語豆腐は、Marp の設定不足ではない。
PPTX とフォントの構造上、そうなるようにできている。
だから、
- Viewer を変えても
- PowerPoint 側でフォントを置換しても
- 一時的に直っても
CI では再発する。
🧠 豆腐(□)の正体
まず前提。
- □ は文字化けではない
- UTF-8 の問題でもない
フォントに、その文字のグリフが無い
ただそれだけ。
PPTX では、
- 指定されたフォント
- そのフォントに無い文字
が来た瞬間、
代替せず □ を出すケースがある。
💣 なぜ Marp + PPTX で起きやすいのか
問題の中心は code / pre
Marp では、
- インラインコード
- コードブロック
が 等幅フォント(monospace)として扱われる。
しかし、
- 多くの等幅フォントは
- 日本語グリフを持たない
結果:
- HTML:ブラウザが勝手にフォールバック
- PPTX:フォント固定 → □
👉
HTML で見えるのに PPTX で壊れる最大の理由。
❌ なぜ「設定で直したつもり」になるのか
よくやりがちな対処:
- PowerPoint でフォントを置換
- Viewer を変える
- ローカル環境に日本語フォントを入れる
これらは確かに、
- 「その場では」直る
- 「その環境では」見える
しかし CI では、
- 同じ環境が再現されない
- 同じ Viewer が使われない
👉
再現性がない修正は、CI では無効。
🔁 なぜ CI だと再発するのか
CI 環境では:
- OS はクリーン
- フォントは最小構成
- Viewer も存在しない
つまり、
「ローカルで直った」は、何の保証にもならない
CI で再発するのは
仕様どおり。
🧩 正しい修正ポイントはどこか
結論はこれ。
- PowerPoint ではない
- Viewer でもない
- GitHub Actions でもない
👉
Marp の front matter(CSS)で最初からフォントを固定する
ここだけが、
唯一再現性のある修正ポイント。
⚠️ それでも「完全解決」と言えない理由
正直に書く。
- 日本語対応等幅フォントが少ない
- 環境によってフォールバックが変わる
- PPTX の仕様自体がブラックボックス
つまり、
100% 安全な構成は、今のところ存在しない
できるのは、
- 再発確率を極小化する
- 地雷を踏まない書き方をする
ここまで。
🧠 実務での現実的な判断基準
迷ったら、この 1 行。
それは「コード」か?
- YES →
code / preを使う - NO → 通常テキストにする
日本語説明を code に入れない
これだけで、事故は激減する。
まとめ
- 日本語豆腐はバグではない
- 設定ミスでもない
- PPTX とフォントの構造問題
だから、
- 設定をいじり続けても直らない
- 環境を変えても再発する
理解して避けるしかない問題。
📌 結論(1 行)
日本語豆腐は、
設定で解決できる問題ではない。
関連記事
-
18
VS CodeでMarkdownからプレゼン資料(HTML / PPTX)を作成する方法【Marp】 -
19
GitHub ActionsでMarkdownからプレゼン資料を自動生成しようとして、日本語豆腐で止まった話【Marp】
End.