Qiitaの記事作成や、GitHubのREADMEなどでも広く採用されているMarkdownですが、その表記法がサイトやソフトによって若干異なります。
John Gruber氏が考案したMarkdownはもともと、Markdown記法のテキストファイルをPerlで書かれたparserを通じてHTMLを生成するという、表記法とparserがセットになったものでした。その後、その利便性からPerl以外のparserも開発され、さらにはPandocのようにHTMLのみならずEPUB形式など複数の形式へ出力できるものが登場しました。そして同時に新たな拡張機能と、その拡張機能を利用するための表記法が追加され、結果としてソフトごとの表記法に差異が生じるようになりました。この表記法(およびその表記法で実現する機能)の差異が、flavor、syntax extension、方言、などと呼ばれているものです。
Markdown CommunityがMarkdown parser一覧を公開していますが、この一覧はあくまでparserの一覧であり、その他にもPandocのMarkdownをベースにした、ドキュメント中のRコードの実行を想定したR Markdownや、remarkをベースにJSXも書けるようにしたMDXなどが登場しており、Markdownは今も多様化しています。
しかしそれぞれのparserでMarkdownの表記法が全く異なるというわけではなく、使用頻度の高いものは一部統一されていたりもします。例えばバックティック3つ(```
)で囲んでコードブロックを表現するという所作はオリジナルのMarkdownではサポートされていませんが、今ではMarkdown表記法のデファクトスタンダードになっていると言えるでしょう。
ただし表記法が同じでも生成されるHTMLはparserにより異なります。parserごとのHTMLの違いはbabelmarkというサイトで見ることができます。
このような状況を受けて、表記法の標準化を目指すCommonMarkが2014年に登場しました。2019年にはバージョン0.29が公開され、今後もアップデートされていくでしょう。Markdownによるドキュメントの管理を予定している場合、動向を注視する必要がありそうです。
(個人的にはPython-Markdownで採用されているAdmonition機能がかなり気に入っているのですが、remark-admonitionsでは表記法が異なっていたりするので統一されないかなあと期待しています。)
備考
この記事はクリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。