:::: MENU ::::

Starlightの中を見つつContent CollectionsやMDXの可能性について探る

ドキュメント向きのhtmlはmicroCMSで管理するのがよいですが、見栄えに特化したページは扱いづらいのでファイルとして管理することになります。
元々がhtmlファイルで管理されていた場合、それを1つ1つAstroファイル作るのもあれなので、Content Collectionsでhtmlを管理できないか探ってみます。

参考にするのがAstro製のドキュメントWebサイトフレームワークのStarlight。最近できたばかりでまだまだこれからのフレームワークですが、AstroのContent Collectionsのサンプルとしては適しているので、これを触りながらContent CollectionsやMDXの可能性について考えていきます。

withastro/starlight: 🌟 Build beautiful, high-performance documentation websites with Astro

Content Collection

Content Collections 🚀 Astro Documentation

扱えるのはMarkdown, MDX, JSON, YAML。
Astroファイル扱えれば実質htmlが扱えたのに残念。。

JSONやYAMLのデータとしてhtmlを扱えはするが、そのまま編集しやすいかというとそうではないので、htmlを別ファイルとして持っておきpre-build時にJSON化するなどが必要となりちょっと微妙。

MDXだとどこまでhtmlが扱えるか調べる。

MDX

Markdown for the component era | MDX

Javascriptが書けるMarkdownという認識だったが、もっといろいろできるみたいなので欲しい機能があるか調べる。

HTMLはサポートされてないがJSXは使える

micromark/mdx-state-machine: How to parse MDX

htmlをそのまま移植するのはちょっと厳しい面があるが、そこまで複雑なものでなければJSXでも対応しているので使えはするはず。

htmltojsx - npm

htmlからJSXにするライブラリもなくはないので、 スクレイピング -> html to JSX -> Content Collection のファイルとして出力も可能なのでは?

コンポーネント利用はできる

MarkdownとMDX 🚀 Astroドキュメント

JSXにするのがあれな要素があればコンポーネントとして扱うこともできる。が、自動処理の場合は向いてないか。

Frontmatter

Frontmatter | MDX

標準では対応していないがモジュール入れれば可能。StarlightやAstroのMDX integrationには標準で入ってる。

remarkjs/remark-frontmatter: remark plugin to support frontmatter (YAML, TOML, and more)

MarkdownとMDX 🚀 Astroドキュメント

meta情報はFrontmatterで管理したいので、 スクレイピング -> YAML-> Frontmatter という具合に挿入されるのがいいか?ちょっと手間だけど。

まとめ

Content Collectionsでhtmlを直に扱うことはできないが、MDX内でJSXを扱えるため一部htmlはそのまま扱える。
htmltojsxで変換すればたいてい扱えるとは思うので、これが一番楽な手段なのかな。

追加でmeta情報などをFrontmatterに突っ込めば、大量のhtmlファイルを変換してMDXとして扱うこともできそう。
ページごとに追加で読み込んでいるcssやjsの扱いがちょっと課題ではある。

元のhtml構造が似ててスクレイピングしやすいということが前提。
似てなくて汚かったら数にもよるが手動でやっちゃったほうがいいこともあるし。

大量のhtmlファイルの変換についてもうちょっといい案ありそうなのでまた考えよう。