Astro 6.4登場!Sätteri移行を検討してみた
Astro 6.4で追加されたMarkdown processor APIとSätteriを確認しつつ、今のブログでは切り替えずunifiedのままにした判断メモ。
Astro 6.4が出て、Markdownまわりに少し大きめの更新が来ていました。
今回気になったのは、新しいmarkdown.processorAPIと、Rust製Markdown processorのSätteri。
Markdownのビルドが速くなるなら良さそう。
ただ、このブログではMarkdownにいくつかプラグインを入れているので、単純に差し替えて終わりなのかを確認しました。
Astro 6.4で変わったこと
Astro 6.4では、Markdownの処理パイプラインをmarkdown.processorで差し替えられる。
これまで通りのremark / rehypeベースの処理はunified()として使えます。
一方で、markdown.remarkPluginsやmarkdown.rehypePluginsのようなトップレベル設定は非推奨になり、今後はprocessor側に渡す形が推奨されています。
ざっくり言うと、今までこう書いていたものを、
export default defineConfig({
markdown: {
remarkPlugins: [remarkPlugin],
rehypePlugins: [rehypePlugin],
},
});
これからはこう寄せる、という話です。
import { unified } from '@astrojs/markdown-remark';
export default defineConfig({
markdown: {
processor: unified({
remarkPlugins: [remarkPlugin],
rehypePlugins: [rehypePlugin],
}),
},
});
今すぐ壊れるわけではないですが、将来的にはこちらに寄せておいた方がよさそうです。
Sätteriも気になった
もうひとつ気になったのがSätteriです。
SätteriはRustベースのMarkdown / MDX pipelineです。
Astro 6.4では@astrojs/markdown-satteriが追加されて、Markdown processorとして使えるようになっています。
公式ブログでも、Astro docsやCloudflare docsでビルド時間が短くなった例が紹介されていました。
Markdown記事が多いサイトではかなり効きそうです。
使うだけならこんな感じです。
import { satteri } from '@astrojs/markdown-satteri';
import { defineConfig } from 'astro/config';
export default defineConfig({
markdown: {
processor: satteri(),
},
});
ただ、Sätteriはunifiedの完全な置き換えではありません。
ASTの形はMDAST / HASTに近いですが、プラグインAPIは互換ではないので、既存のremark / rehypeプラグインはそのまま動きません。
今のブログで使っているMarkdown機能
このブログでは、Markdownまわりで以下を使っています。
| 現在の機能 | Sätteriで再現 | メモ |
|---|---|---|
| 見出しIDをASCII slugにする | 可能 | SätteriのHAST/MDAST pluginで実装できる |
外部リンクにtarget / relを付与 | 可能 | Sätteri docsにほぼ同じHAST plugin例がある |
| URLをリンクカード化 | 可能 | ただしremark-link-card相当を自作する必要がある |
| Markdown内HTML | 可能 | @astrojs/markdown-satteri経由でraw HTMLの出力を確認できた |
| MDX | 可能 | @astrojs/mdxがSätteri processorを検出して専用経路で処理していた |
| Shikiハイライト | 可能 | markdown.shikiConfigがSätteri経由でも効くことを確認できた |
調べた感じ、機能としては切り替え可能でした。
特に、raw HTML、MDX、Shikiが動くかは少し気になっていました。
ここは小さな検証用プロジェクトを作って、@astrojs/markdown-satteriと@astrojs/mdxを入れてビルドしてみました。
結果として、
- Markdown内のHTMLがそのまま出力される
- Shikiの
astro-codeが出力される - MDX内でAstro componentをimportして表示できる
render(post)のheadingsも生成される
ところまでは確認できました。
「今のremark / rehypeプラグインをSätteri用に作り直せばいける」という感じです。
切り替えなかった理由
「Astroの今後のメジャーバージョンでは、SätteriをデフォルトのMarkdownプロセッサにしたいと考えています。」
ということで、今回は一旦様子見ですね。
感想
Markdown記事が大量にあるサイトや、remark / rehypeへの依存が少ないサイトなら、切り替える価値はかなりありそうです。
今後Astro側でもSätteriがより標準に近づいていくなら、早めに触っておくのもよさそう。
ただ、このブログではまだunifiedのままで十分でした。
まずは非推奨になった設定をmarkdown.processorへ移して、将来のAstro 8.0に備えるくらいかな。
以上、おわり。