マークダウンをHTMLにパースするためのJSライブラリの比較検討をするにあたって役立つようにまとめました。
※ この記事は、micromarkの開発者たちが作成したドキュメントを参考にして作成しました。そのため少しはバイアスがあると思って読んでください。
【目次】
結論
基本はMicromarkでよさそう
直近のトレンドを見てもそうですが、使いやすさ、CommonMark準拠、そして出力の安全性を考えるとmicromarkを採用するのが1番良さそうです。
また、最も有名なmarkedがCommonMark標準に対応していないというのは驚きました。なるべく標準に寄せるほうが良いでしょうし、サニタイズのような安全策も弱いようなので、基本的にmarked以外のものを使うほうが良さそうです。
micromark:
Markedを使う理由
しかし、Markedはスタンダードとなっており、利用者が多いため、
- 参考記事が多く見つかる(日本でも利用者が多い)
- GPTなどのLLMがよく知っていてコードを書いてもらいやすい
- 他ライブラリとの連携が強い
といったメリットがあります。
たとえば、改行文字(\n)を改行として認識させるシンプルなオプションや、シンタックスハイライトの highlight.js やサニタイザーの DOMPurify との連携もラクです。
これらの点で、結局Markedを採用するところも多いでしょう。
各ライブラリ解説
micromark
micromarkは非常に小さく、速く、100%のCommonMark準拠です。
さらに、100%のGFM準拠(micromark-extension-gfmを使用)のような構文拡張もありますが、これらはかなり複雑です。
※ GFMとは、GitHub Flavored Markdownのことで、GitHubのマークダウン表現に倣おうとするもの。
micromarkは最新のパーサーであり、現代のMarkdownのニーズに適していますが、すでにテストされており、JavaScriptで3番目に人気のあるMarkdownパーサーです。
細かい制御が必要ならmicromarkを使いましょう。
また、MarkdownからHTMLだけが欲しいなら、micromarkを使いましょう。
remark
remarkは最も人気のあるMarkdownパーサーです。
micromarkの上に構築されており、構文のツリーを提供します。アナロジーとしては、BabelやESLintなどが1つのプロジェクトになったようなものです。micromarkが持つ構文拡張をサポートしているため(100%のCM準拠および100%のGFM準拠が可能)、ほとんどの作業はツリーを変換したり検査したりするプラグインで行われ、これらのプラグインはたくさんあります。
ツリーの変換は比較的簡単です:それは直接操作できるJSONオブジェクトです。
remarkは安定しており、広く使われており、複雑なデータを扱うのに非常に強力です。おそらくremarkを使うべきでしょう。
marked
markedは最も古いMarkdownパーサーです。長い間使われており、十分にテストされていて、小さく、人気があり、多くの拡張機能があります。
ただし、CommonMarkやGFMには準拠しておらず、デフォルトでは安全ではありません。
信頼できるMarkdownがあり、手間をかけずにHTMLに変換したい場合、そしてCommonMarkやGFMとの完全な互換性を気にしないが、小さなバンドルサイズと安定性を重視する場合は、markedを使用しましょう。
markdown-it
markdown-itは良好で安定した、基本的にCommonMark準拠のMarkdownパーサーで、いくつかのGFM機能も(オプションで)サポートしています。
パッケージ内で直接依存関係としてよく使われますが、かなり大きいです。
markdown-itは、Markdownだけでなく、あなた(またはあなたの会社)のバージョンのMarkdownをサポートしたい場合に特に優れています。
CommonMark準拠のMarkdownにカスタムの構文拡張をいくつか追加し、HTMLを生成したい場合は、markdown-itを使用しましょう。
その他
他にもたくさんのMarkdownパーサーがあります!
小さいとか速いとか、CommonMark準拠だと言われることがありますが、必ずしもそうとは限りません。
このリストは網羅的なものではなく(しかし、最も関連性の高いものです)、micromarkの代替として(あるいはそれを使わない理由として)のMarkdownパーサーを使用する理由の瞬間的なスナップショットです。
目標に応じて、すべてが良い選択肢です。