最近、ChatGPTやGeminiにブログの下書きを書いてもらうことが日常になりました。 でも、出力されたMarkdownをそのままHugoでビルドすると、 ある「違和感」 に直面します。
やたらと太字(Bold)の周りにスペースが空いているんですよね。
これは **「強調」** です。 みたいに。
「AIくん、なんでそんな余計なスペース入れるの?」 最初はそう思っていたのですが、実はこれ、AIのせいではありませんでした。 Markdownという規格そのものが、日本語と絶望的に相性が悪い のが原因なんです。
なぜAIの書く文章には「不自然な空白」が混ざるのか?
Markdownの仕様では、 **太字(**)の前後には半角スペースが必要** なケースが多いんです。
特に、日本語の括弧(「」)や句読点が隣接していると、パーサーが太字だと認識してくれません。
- 認識されない例 :
これこそが**「真実」**だ。 - 確実に太字になる例 :
これこそが **「真実」** だ。
エディタ上では強調されているのに、公開するとただのアスタリスクが表示される……。 この「パースエラー」を避けるために、AIたちは気を利かせてスペースを入れてくれているわけです。
でも、日本語の文章の中にポツンと半角スペースがあるのは、美しくありません。 組版の観点からも、これは看過できない問題です。
答えは「AIに自然に書かせて、システムで強制抽出する」という役割分担
ここで「AIに意地でも太字を認識させるために、スペースを入れさせる」という妥協案もありました。 しかし、これだとMarkdownのソースコードが不自然なスペースだらけになり、美しくありません。
おっしゃる通り、もっとスマートな解決策があります。 それは、「AIにはスペースなしで自然に書かせ、もしHugoがパースに失敗して生のまま残った『』があれば、テンプレート側で強引に強勢(strong)タグへ置換する」** という方法です。
Hugoのビルドプロセスで「太字」を強制再定義する
やり方は非常にシンプルです。
Hugoのテンプレートファイル(layouts/_default/single.htmlなど)で、本文を出力している部分(.Content)に対して、正規表現で「生のアスタリスク」を「HTMLタグ」に上書きしてしまいます。
| |
このアプローチが最強である理由
この「ねじ伏せ」コードを導入すると、以下のような革命が起きます。
- AIへの指示がゼロになる : 「Bold前後にゼロ幅スペースを入れて」なんていう微細なプロンプトは不要。AIは普段通りに、自然な日本語の並びで
**強調**と書くだけでよくなります。 - Markdownソースが美しい : 執筆中のエディタ上のテキストに不自然な空白が混じりません。
- 確実な表示保証 : パーサーがサボっても、最後のフィルターで確実に
<strong>タグに変換されるため、強調漏れがゼロになります。
執筆時の美しさと、公開時の完璧なレンダリング。 この両方を「システムの裏側」だけで完結させるのが、AI時代のWeb屋の作法というものでしょう。
ただ……ソースがめっちゃ強そうになる
**を全部<strong>にするから、ソースコードに強さが産まれますね。
でもわりとSEO的にstrongタグは正解らしいので、AIらしさがある**を残して「あちゃー」となるよりはマシかと感じます。
ちなみに私は、半角スペースを前後に入れる指示でゴリ押してるし、今更変えるのも面倒だからと放置しています。
So, what’s next?
結局のところ、Markdownは英語圏の文化から生まれたツールです。 日本語特有の事情なんて、彼らは考慮してくれません。
だったら、ツールに自分を合わせるのではなく、 ツールを自分たちの言語に合わせる 。 それがWebに携わる者の「粋」というものではないでしょうか。
この設定を一度入れてしまえば、もうAIの出力に目くじらを立てる必要はありません。 AIにはのびのびと「正しいMarkdown」を書いてもらい、私たちはその成果を美味しくいただくだけ。 これこそが、AIと人間の心地よいパワーバランスなんだと思います。
