Astro 6.4

585文字
3分
編集

Astro 6.4 がリリースされた。Markdown パイプラインをプロセッサ単位で差し替えられる markdown.processor、高速化を狙う Rust 製 Sätteri、および Cloudflare 上の実験的 advanced routing を扱いやすくする cf() ヘルパーが中心である。既存プロジェクトは npx @astrojs/upgrade、または各パッケージマネージャで astro@latest へ上げて導入できる。

#markdown.processor

これまで Astro の Markdown は unified(remark / rehype)前提だった。6.4 では markdown.processor でパイプライン全体を置き換えられる。既定は従来どおり unified() のため、既存構成はそのまま動く。remark / rehype プラグインはトップレベルの markdown.remarkPlugins などではなく、プロセッサへ渡す形が推奨される。

js
import { defineConfig } from 'astro/config';
import { unified } from '@astrojs/markdown-remark';
import remarkToc from 'remark-toc';

export default defineConfig({
  markdown: {
    processor: unified({
      remarkPlugins: [remarkToc],
    }),
  },
});

markdown.remarkPluginsmarkdown.rehypePluginsmarkdown.remarkRehypemarkdown.gfmmarkdown.smartypants は引き続き動作するが非推奨となり、Astro 8.0 で削除される。

#Sätteri プロセッサ

別プロセッサとして @astrojs/markdown-satteri が追加された。Rust 実装の Sätteri は unified より高速で、従来プラグインに頼っていた機能の一部をネイティブに持つ。Astro 公式サイトと Cloudflare ドキュメントへの切り替え試験では、それぞれのビルド時間が 1 分以上短縮されたとされている。

js
import { defineConfig } from 'astro/config';
import { satteri } from '@astrojs/markdown-satteri';

export default defineConfig({
  markdown: {
    processor: satteri({
      features: { directive: true },
    }),
  },
});

Sätteri は remark / rehype プラグインを実行しない。unified 依存の拡張を使う場合は、当面 unified() のままにするか、MDAST / HAST プラグインへ移植する必要がある。将来のメジャーで Sätteri を既定にする意向が示されている。

#Cloudflare の cf() ヘルパー

Astro 6.3 で入った実験的 advanced routing を Cloudflare で使う場合、@astrojs/cloudflarecf() が SESSION KV バインディング注入、ASSETS による静的アセット配信、locals.cfContextcf-connecting-ip からのクライアントアドレス、waitUntil、プリレンダー済みエラーページなどをまとめて配線する。

カスタム fetch ハンドラでは @astrojs/cloudflare/fetch から読み込む。

ts
import { astro, FetchState } from 'astro/fetch';
import { cf } from '@astrojs/cloudflare/fetch';

export default {
  async fetch(request: Request, env: Env, ctx: ExecutionContext) {
    const state = new FetchState(request);
    const asset = await cf(state, env, ctx);
    if (asset) return asset;
    return astro(state);
  },
};

Hono では @astrojs/cloudflare/hono のミドルウェアとして app.use(cf()) を先頭付近に置く。

#その他

アダプタは preserveBuildServerDir で静的ビルド時も dist/server/ を残せるようになった。プレビューサーバ、転送ヘッダ、React Actions と dep optimizer の競合など、細かな修正も同梱されている。

#参考文献