Markdownの真実—俺たちが慣れ親しんだ「バッククォートのコードブロック」は実は拡張記法だったんだぜ

## 拡張記法

バッククォートは拡張記法。
「行頭スペース四個」でのコードブロックが基本記法らしい。

>The basic Markdown syntax allows you to create code blocks by indenting lines by four spaces or one tab. If you find that inconvenient, try using fenced code blocks. Depending on your Markdown processor or editor, you’ll use three tick marks (```) or three tildes (~~~) on the lines before and after the code block.

[Extended Syntax | Markdown Guide](https://www.markdownguide.org/extended-syntax/#fenced-code-blocks)

その他には、例えばテーブル記法も拡張のようだ。

## 学習

Markdownにも基本記法とか、拡張記法とかがあることをはじめて知った。

たとえばQiitaではコードブロックにファイル名まで書けたり、Markdownの解釈にもバリエーションがあることは薄々意識していたが、慣れ親しんだコードブロック記法自体が拡張記法だったんだな。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/da584db4-2c6c-eb71-774b-3182140d6b14.png)

Githubでも普通に拡張記法のコードブロックを消化してるけど、まあ各サービスのヘルプで「これこれが実は拡張記法で」なんてわざわざ説明しないのは当たり前だよね。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/5554acf2-9463-c668-62c3-7aed0bf12294.png)

- [Creating and highlighting code blocks - User Documentation](https://help.github.com/articles/creating-and-highlighting-code-blocks/)


そういえばStackoverflowでは、コードブロックを書くために毎行毎行4個の空白を入れさせられて「なんだこの冗長な記法は！」と思っていたけど、これがMarkdownの基本だったんだな。


## チルダでコードブロック

これも初耳だった！
Qiitaもちゃんと対応している。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/1663fd41-8e57-db03-76c0-037007eda4d1.png)

~~~bash
echo Mark down 
~~~


## 経緯

Ruby gem の redcarpet がうまくコードブロックをパースしてくれないことに気付いた。
gemのバグかと思い Issue を出したら [robin850 (Robin Dupret)](https://github.com/robin850) さんが教えてくれた。

バッククォートでのコードブロックは「オリジナルのマークダウン記法ではサポートしてないよ！」って。

>Actually you need to enable the fenced_code_blocks option; this syntax is not supported by original Markdown, so you should rather write:

[Can not parse well Markdown syntax in code block · Issue #659 · vmg/redcarpet](https://github.com/vmg/redcarpet/issues/659)

後で読んだら、思い切りREADMEに書いてあった。すいません。

>`:fenced_code_blocks:` parse fenced code blocks, PHP-Markdown style. Blocks delimited with 3 or more ~ or backticks will be considered as code, without the need to be indented. An optional language name may be added at the end of the opening fence for the code block.

ただ大本の原因は、Markdownの超基本だと思いこんでいた「バッククォートでのコードブロック」が拡張だという前提理解がなかったせいだ。

## 私の意見

空白4個でのコードブロックとか書く方にとっては苦痛でしかないし、明らかにバッククォートのほうが優れているし流通していると思うのだけど、もう基本表現に昇格させてあげても良いんじゃないだろうか。

HTMLの世界でも独自拡張のタグが標準仕様に取り入れられたりするように。

### 追記

[CommonMark](https://commonmark.org/) という標準仕様策定の動きもある様子。
( この記事の @scivola さんのコメントを参照 … Thanks! ） 

## リンク

- 拡張記法 ( [Extended Syntax | Markdown Guide](https://www.markdownguide.org/extended-syntax/#fenced-code-blocks) )
- 基本記法 ( [Basic Syntax | Markdown Guide](https://www.markdownguide.org/basic-syntax) )

## Gist

- [Markdown—Actually "fenced codeblock" is not supported original Markdown syntax ( Thank you Robin Dupret @robin850 )](https://gist.github.com/YumaInaura/dd121a0a0d4de98746cf000a6f4dd22c)

## あわせて読みたい？

- [OSSに貢献したいのに、まだ貢献していないあなたへ ( GithubでのPullRequest作成のススメ ) - Qiita](https://qiita.com/YumaInaura/items/96cc47f9bff386ca998b)









<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->