【Astro】rehype (remark) プラグインを自作してMarkdown内の内部リンクをカードに変換する
AstroでMarkdown・MDXを扱う際、remark
及びrehype
のサードパーティプラグイン1のお世話になることが多いが、今回は自前で簡易的なrehypeプラグインを作ってみる。
やりたいこと
mdファイル内に埋め込んだ内部リンク (自サイトの別記事へのテキストリンク) をリンクカードに変換したい2。
上記のように/
から始まる相対パスの場合に内部リンクとみなす。
<a>
には任意のクラスを指定し、タイトルと投稿日をリンク内に挿入する。
解決法
1. rehypeプラグインを実装
hastをwalkするために、unist
のユーティリティモジュールunist-util-visitをインストールする。
hast (Node) をvisitし、<a>
かつhref
が相対パスであれば任意のElementを挿入する3。
もしCSS Modulesを利用している場合はclassName
に直接指定しスタイリングすることもできる。
2. 設定ファイルに追記
あとはAstroの設定ファイルのrehypePlugins
に指定すれば完成。リンクカードに変換されるようになった。
参考
-
remark/doc/plugins.md・rehype/doc/plugins.mdから一覧を参照できる ↩
-
外部リンクをリンクカードに変換する場合はremark-link-cardを利用するのが楽そう。OGP画像も表示してくれる ↩