このサイトを Astro 7 にアップグレードした
このサイトを Astro 6.4 から Astro 7.0 にアップグレードした。結論から言うと本体の移行はほぼノーコード変更で完了したが、その後の依存関係まわりで 2 つほど罠を踏んだので、あわせて記録しておく。
更新したパッケージ
| パッケージ | 変更 |
|---|---|
| astro | ^6.4.6 → ^7.0.6 |
| @astrojs/cloudflare | ^13.7.0 → ^14.1.1 |
@astrojs/rss・@astrojs/sitemap・@astrojs/check はそのままで Astro 7 に対応済みだった。
Astro 7 の主な破壊的変更
Rust コンパイラがデフォルトに
Go 製コンパイラが Rust 製(@astrojs/compiler-rs)に置き換わった。ビルドが速くなる一方で、不正な HTML に厳格になり、閉じタグのない要素はエラーになる。このサイトはビルド一発で通ったので影響なし。
Markdown プロセッサが Sätteri に
.md のレンダリングが remark/rehype から Astro ネイティブの Sätteri パイプラインに変わった。remark/rehype プラグインを使っている場合は @astrojs/markdown-remark を明示的にインストールして設定する必要がある。
// astro.config.mjs — remark/rehype を使い続ける場合
import { unified } from '@astrojs/markdown-remark';
export default defineConfig({
markdown: {
processor: unified(),
},
});
このサイトはプラグインなしの素の Markdown なので Sätteri のまま移行した。日本語見出しの ID 生成(<h2 id="技術スタック">)も従来どおりで、レンダリング結果に目立った差はなかった。
compressHTML のデフォルトが ‘jsx’ に
HTML の空白除去が JSX ルールになり、インライン要素間の改行由来のスペースが消えるようになった。英文サイトだと <span>hello</span> <em>world</em> のような箇所に影響しうる。従来挙動に戻すなら compressHTML: true(HTML-aware 圧縮)か false(無圧縮)を設定する。
そのほか
- advanced routing がデフォルト有効化 —
src/fetch.tsがエントリポイントとして予約された。同名ファイルがある場合はリネームが必要 astro:transitionsの非推奨 API 削除 —createAnimationScope()やTRANSITION_*定数など@astrojs/db削除 —node:sqliteや Drizzle ORM への移行が案内されている
いずれもこのサイトでは未使用だった。チェックリスト的に grep して確認しただけで済んだ。
罠 1: Dependabot の transitive 依存
アップグレード後も Dependabot が undici / ws / yaml / esbuild の脆弱性を報告し続けていた。いずれも直接依存ではなく、wrangler や miniflare が exact バージョンで固定している transitive 依存なので、pnpm update undici では何も起きない。
対処は 2 段構え:
- 親パッケージごと上げる — wrangler を最新化すると undici / ws / esbuild の修正版が入った。
pnpm update --depth Infinity @cloudflare/vite-plugin miniflareで古い pin も一掃 - どうにもならないものは overrides — yaml は volar-service-yaml が古い yaml-language-server を固定していたため、
pnpm-workspace.yamlのoverridesで強制した
# pnpm-workspace.yaml
overrides:
yaml: ^2.9.0
ここで注意点がひとつ。pnpm 11 は package.json の top-level "overrides" を 読まない(npm 用のフィールド)。以前から置いてあった vite の override は実は一度も効いていなかった。pnpm の overrides は pnpm-workspace.yaml に書く。
罠 2: CI の pnpm バージョン不一致
overrides を追加した途端、Cloudflare Workers Builds のデプロイがこけた。
ERR_PNPM_LOCKFILE_CONFIG_MISMATCH Cannot proceed with the frozen installation.
The current "overrides" configuration doesn't match the value found in the lockfile
原因はローカルが pnpm 11、CI が pnpm 10 だったこと。pnpm 11 が lockfile に記録した overrides セクションを pnpm 10 は同じように解釈できず、「設定と lockfile が一致しない」と判定して frozen install を拒否する。
修正は package.json に 1 行。
"packageManager": "pnpm@11.6.0"
Workers Builds は packageManager フィールドを尊重するので、これで CI もローカルと同じバージョンを使う。lockfile を触るツールはバージョンを固定しておくべきだった、という教訓。
まとめ
- Astro 7 本体の移行は、破壊的変更に該当機能がなければ package.json の更新だけで終わる
- 移行そのものより、wrangler / miniflare の transitive 依存と pnpm のバージョン差異のほうが手間だった
packageManagerフィールドは最初から書いておくのが吉