はじめに
七尾百合子さん、お誕生日 164日目 おめでとうございます! nikkieです。
Sphinx で Markdown を扱うときの TIL (Today I Learned) です。
目次
- はじめに
- 目次
- Sphinx と MyST-Parser
- MyST-Parser でのハイパーリンク記法
- Linkify 拡張を使えば URL を<>で囲まなくてもいいんです!
- きっかけは markdown-it
- 終わりに
Sphinx と MyST-Parser
ドキュメント変換ツール Sphinx。
通常は reStructuredText (reST) で書いた原稿を HTML や PDF(など)に変換します。
MyST-Parser も合わせて使うと、reST 以外に Markdown の原稿も扱えます1。
私は『Sphinxをはじめよう 第3版』付録Dで知りました。
さて、MyST-Parser で Markdown も扱えるようになったのですが、ハイパーリンクの記法でひっかかっていた点がありました。
MyST-Parser でのハイパーリンク記法
「Cross-references」のドキュメントの「3. Markdown link syntax」より。
https://myst-parser.readthedocs.io/en/stable/syntax/cross-referencing.html#markdown-link-syntax
- Autolink:
<>で囲む - inline links:
[link text](URL) - Reference links(外部リンクではないので今回は省略)
私がひっかかっていたのは、直書きのURLはハイパーリンクにならないことです。
<>で囲んで Autolink にする必要があります。
またmyst-parserを使ってMarkdownを試したのですが、リンクのサポートが残っています。
<>で囲まないといけないようですね(うーむ)
Linkify 拡張を使えば URL を<>で囲まなくてもいいんです!
このたび Linkify を偶然見つけました。
https://myst-parser.readthedocs.io/en/latest/syntax/optional.html#linkify
conf.py
extensions = [
"myst_parser",
]
myst_enable_extensions = [
"linkify",
]
myst_linkify_fuzzy_links = False
Linkify 自体はスキーム2のない(bareな)URL もハイパーリンクにしてくれるのですが、myst_linkify_fuzzy_links=Falseを指定して無効化しています。
なお、Python環境に追加で linkify-it-py が必要です。
myst-parser[linkify]と extra を指定してもインスールできます。
サンプルを用意しました。
### Content 1 * https://ftnext.github.io/sphinx-new-tab-link/guide.html

きっかけは markdown-it
JavaScript のライブラリ markdown-it を見ていて
https://github.com/markdown-it/markdown-it/tree/14.1.0?tab=readme-ov-file#linkify
linkify: trueuses linkify-it.
ライブラリがある!
markdown-it-py は linkify-it-py も使います。
そして、MyST-Parser は markdown-it-py を使っているんです!!
https://github.com/executablebooks/MyST-Parser/tree/v4.0.1?tab=readme-ov-file#myst-parser
It contains an extended CommonMark-compliant parser using markdown-it-py
こうして MyST-Parser の linkify の存在を知りました。
ここまでの検索は GPT-5 に助けてもらっています。
終わりに
Sphinx で Markdown を使うときにずっとひっかかっていた、直のURLではハイパーリンクにならない点。
MyST-Parser の Linkify 拡張が見事に解決していました👏
私にとっては結構なブロッカーだったので、解決できたのは非常に大きいです!