GFMと素のMarkdownの違い。表・タスクリスト・打ち消し線

Markdownのコラム

Markdownには決まった標準が無い、という言い方をされることがあります。
正確には、最初に作られた仕様があり、そこに各サービスが独自の拡張を足してきた結果、書ける記法が場所によって違う状態になっています。

いま一般に「Markdown」と呼ばれて通じるものの多くは、GitHubが定めた拡張版です。
GitHub Flavored Markdown、略してGFMと呼ばれます。

素のMarkdownにあるもの

もともとのMarkdownで書けるのは、次のあたりです。

  • 見出し(#)
  • 箇条書きと番号付きリスト
  • 強調(* または _)
  • リンクと画像
  • 引用(>)
  • コード(バッククォート)
  • 水平線

文章を書くうえで必要なものはひととおり揃っています。
逆に言えば、ここに無いものは後から足された拡張です。

GFMで足されたもの

よく使われるのは次の4つです。

表

| 項目 | 内容 |
| --- | --- |
| A | あ |

素のMarkdownに表はありません。表が書けるかどうかは、拡張に対応しているかで決まります。

打ち消し線

~~取り消した文字~~

チルダ2つで囲みます。

タスクリスト

- [ ] まだ
- [x] 済み

箇条書きの先頭に [ ] を置く書き方です。GitHubのissueでチェックボックスとして表示されるのはこれです。

自動リンク

素のMarkdownでは、URLをそのまま書いてもリンクになりません。<> で囲むか、リンク記法で書く必要があります。
GFMでは、URLを書くだけでリンクとして扱われます。

コードブロックの言語指定

バッククォート3つで囲むコードブロックも、素のMarkdownには無い書き方です(もとの仕様では半角スペース4つの字下げでした)。

開始のバッククォートの後ろに言語名を書くと、対応している処理系では色が付きます。

指定しなくてもコードブロックにはなります。色が付かないだけです。
言語名が間違っていた場合の扱いは処理系によって違い、無視されることもあれば、そのまま出ることもあります。

改行の扱いも、場所によって違う

素のMarkdownでは、文の途中で1回改行しても、表示では改行になりません。
前後の行は1つの段落としてつながって表示されます。
改行したいときは、行末に半角スペースを2つ置くか、空行を1行入れて段落を分けます。

一方で、1回の改行をそのまま改行として表示する場所もあります。
GitHubでも、IssueやコメントとREADMEのようなファイルとで、扱いが違います。

LiteMD のプレビューは、1回の改行も改行として表示する設定にしています。
そのため、LiteMD で見た目どおりに改行されていても、貼り先によっては段落がつながって表示されることがあります。
改行の位置が大事な文章は、空行で段落を分けておくと、どこに貼っても崩れにくくなります。

脚注

GitHubでは、文中に [^1] と書き、文末に [^1]: 本文 と書くと、脚注として表示されます。
比較的新しく加わった記法なので、対応していない場所では、そのままでは表示されません。

対応していない場所では、[^1]: 本文 の行が「リンク先の定義」として読まれることがあります。
その場合、文中の [^1] は「本文」という名前のページへのリンクになり、押しても存在しないページに飛びます。
脚注の本文は、どこにも表示されません。

LiteMD のプレビューも脚注には対応しておらず、この形で表示されます。
脚注を使いたい文章は、本文の中に()で補足を書くか、文末に「※1」のような注記を普通の文として書いておくと、どこに貼っても内容が失われません。

どこまで書いてよいか迷ったら

貼り付け先が決まっているなら、その場所の仕様を見るのが確実です。
決まっていない、あるいは複数の場所に貼る予定があるなら、素のMarkdownの範囲に表を足したあたりまでに収めておくと、たいていの場所でそのまま通ります。

タスクリストや脚注のような後発の記法は、対応していない場所では記号のまま出ます。
消えるわけではないので致命的ではありませんが、読み手には意図が伝わりません。