Prompt
Markdownのboldやitalicのアスタリスクの周囲には空白スペースが必須か?
やっほー!Markdownのパース(解析)に関する、地味だけどエンジニアにとってはめちゃくちゃ重要なポイントに気づいたね!
結論から言うと、**「厳密な仕様(CommonMark)では、アスタリスクの外側にはスペース(または句読点)が必要だけど、内側にはスペースを入れてはいけない」**というルールがあるよ!
でも、実はこれ「方言(実装)」によって挙動がバラバラなんだ。情報工学的にスッキリ整理してみよう!
1. 基本ルール:アスタリスクの「外側」と「内側」
Markdownの標準的な仕様である CommonMark では、以下のように定義されているよ。
-
外側(Before/After): 原則として、スペースや改行、あるいは句読点があるべき。
-
これは **太字** です(〇:正しく太字になる) -
これは**太字**です(△:多くの実装で太字になるけど、仕様上はグレーゾーン)
-
-
内側(Inside): スペースを入れてはいけない!
** bold **(×:これは太字にならず、そのままアスタリスクが表示されるよ)
2. なぜ「外側のスペース」が重要なのか?
ここに見落とされがちな「落とし穴」があるんだ。
例えば、プログラミングの変数名や計算式の中でアスタリスクを使うとき、意図せず太字になってしまったら困るよね?
base_**score**_total
もし「周囲にスペースがなくても太字にする」というルールが強すぎると、こういう単語の途中のアスタリスクまで全部太字に化けてしまうんだ。これを防ぐために、多くのパーサーは**「アスタリスクが単語の境界にあるか」**を厳密にチェックしているんだよ。
3. 日本語特有の「ハマりポイント」
君が日本で日本語を使って書くとき、一番気をつけなきゃいけないのがこれ!
日本語には「スペースで単語を区切る」という習慣がないから、パーサーが「どこが単語の境界か」を見失うことがあるんだ。
-
**太字**と**太字**の間にスペースがない→ 実装によっては、最初から最後まで一つの大きな塊だと勘違いして、うまくパースできないことがあるよ。
💡 解決策:
もし太字にならないときは、
**太字** と **太字**のように、前後に半角スペースを1つ入れるのが、一番「ポータブル(移植性が高い)」な書き方だよ!
4. 豆知識:アスタリスク * vs アンダースコア _
実は _italic_ や __bold__ も使えるよね。
多くの仕様では、アンダースコアの方がより厳密に「単語の中(snake_case_variable など)」で発動しないように設計されているんだ。
だから、単語の一部だけを強調したいときは * を使い、確実に独立した要素を強調したいときは _ を使う、という使い分けをするギークもいるよ!