概要
- Markdownのコードフェンス や インラインコード記法 の落とし穴と回避策を解説
- CommonMarkおよび GitHub Flavored Markdown (GFM) に準拠した仕様説明
- バッククォートやチルダ を使った安全な記述方法の紹介
- 具体例と HTMLレンダリング結果 の比較
- CommonMark仕様の 該当セクション抜粋 による根拠提示
コードフェンスとインラインコードの落とし穴と回避策
- 主人公Corey Dummは Markdownのコードフェンス 内で生活するキャラクター
- Markdownの実装は多様で、 レンダリングルールが微妙に異なる 現実
- 本記事は CommonMark仕様 に基づく解説、 GFMにも同様に適用可能
基本的なコードフェンス
- Coreyが子供の頃、 シンプルなコードブロック で問題なく描写
- 例:
(o_o)--.|[_]|
- 例:
- HTML変換では 期待通りのコードブロック として表示
フェンスの事故とその原因
- Coreyが成長し、 フェンスの数が増えた ことで問題発生
- 例:
(o_o)--.|[_]|
- 例:
- 2つ目のトリプルバッククォートが コードブロックを即終了 させ、残りが外に出てしまう事故
- バッククォートが Coreyの髪の毛 として消失する現象
回避策:ファンシーなコードフェンス
- CommonMarkでは チルダ(~)もフェンスとして利用可能
- 例:
``` (o_o)--.|[_]|
- 例:
- バッククォートやチルダの個数も3つ以上なら自由
- 例:
``` (o_o)--.|[_]| - 例:
``` (o_o)--.|[_]|
- 例:
- これらの方法でコードブロック内にバッククォートを安全に含められる
基本的なインラインコードスパン
- インラインコードはバッククォート1つで囲むのが一般的
- 例:
(o_o)--.|[_]|
- 例:
- しかし、コード内にバッククォートを含む場合は問題発生
- 例:
(o_o)← バッククォートが区切りとして機能し、意図通り表示されない
- 例:
回避策:ファンシーなインラインコードスパン
- インラインコードスパンのデリミタは複数のバッククォートでも可
- 例:
`(o_o)`
- 例:
- また、 デリミタ直後・直前のスペース は1つだけ自動で除去される仕様
- このテクニックで バッククォートを含む文字列も安全に囲める
CommonMark仕様抜粋と根拠
- コードフェンス :
- 3つ以上の連続したバッククォートまたはチルダで囲む
- 開始と終了のフェンスは 同じ種類・同じ以上の個数 でなければならない
- インラインコードスパン :
- バッククォート1個以上で囲み、 中身にバッククォートを含めたい場合はより長いデリミタを利用
- 両端にスペースがある場合、 1つずつ除去 される
まとめ
- Markdownのバッククォート事故 を防ぐには、 チルダや複数個のデリミタ を活用
- CommonMark仕様 を理解することで、 意図通りのレンダリング が可能
- Markdown記法の 落とし穴と回避策 を知ることで、より柔軟なドキュメント作成が実現