このサイトは先述のとおり現状では Astro を基盤として作成している。
Astro は pages ディレクトリに Markdown ファイルを置くと自動でパースして使いやすいように加工してくれる大変ありがたい仕様になっている。
Next.js を使っていた時は、 [slug].tsx を作成して特定のディレクトリを走査、パースして getStaticPaths でページを生成する仕様にしていたので、こちらの方が直感的に分かりやすく手間もない。
さらに Astro には MDX (Markdown 内で JSX を使えるすごいやつ)をパースしてくれる拡張があるのだが、(運用方法にもよるが)正直あまり使いたくない。その理由が表題である。
本サイトが Markdown を使っているのは、ネガティブな面から言えば Headless CMS 等の外部のサービスに依存すると
ポジティブな面は Markdown 自体は HTML よりもさらに単純なテキストファイルであり可搬性や汎用性が高いと考えたためだ。実際に Gridsome, Gatsby, Next.js, Astro と乗り換えてきたが Markdown ファイルに関しては(都度整理しているが)そのまま利用できている。
しかし、 MDX に関しては JSX に依存する関係上、付随するコンポーネントも必ず必要になってくる。 Astro に関して言えば、多くのフレームワークに対応しているのである程度は吸収できるが、 Gridsome や Nuxt.js から Gatsby, Next.js に変更する場合には Vue から React に書き換える必要がある。だったら Markdown に直接 HTML を記述した方が移行時の手間がないんじゃないかと思っている。
要するに、Markdown は Markdown ファイル単体で文書として成立している(frontmatter はともかく)ことが利点で、ラッパーは問題ないが内部に別の仕組みを持ちそこに依存が生まれてしまうと負債になるのでは?ということだ。
とはいえ、コンポーネントが利用できる利点も大きいので利用することに対して真っ向から否定したい訳ではないが。
「JSX 自体が廃れたらどうするのか」という論点もあるが、そこを懸念するのであれば Markdown が廃れたらどうするのかも考えなければならないので、その時はその時の形式にリプレースしようねということで。