はじめに
Astro 6.0 が出てそのうち更新せねばと思っていたのですが、思い立ったので更新します。
Upgrade to Astro v6
How to upgrade your project to Astro v6.0.
まず、ドキュメントに従ってアップグレードコマンドを実行します。
pnpm dlx @astrojs/upgrade
package.json が参照している astro のバージョンが 6.4.4 になりました。
ビルドしようとすると、wrangler が要求バージョンを満たさなくなっていたので更新します。
pnpm update wrangler
さらに、src/content/config.ts を src/content.config.ts へ移動せよとメッセージが出るので、言われるがままに移動します。
まだまだ警告やエラーが出るので対応していきます。
Markdown 設定の非推奨警告への対応
対象ファイル:
- astro.config.mjs
- 対応: markdown.remarkPlugins は Astro 6.0 より非推奨となったため、@astrojs/markdown-remark から unified をインポートし、markdown.processor 内で適用する形式へと移行しました。
- 依存関係の追加: pnpm の厳密な依存関係解決(Strict Dependencies)エラーを回避するため、@astrojs/markdown-remark を package.json に開発依存関係(devDependencies)として追加しました。
Vite の Dynamic Import 警告および Wrangler エラーへの対応
対象ファイル:
- wrangler.jsonc
- 対応: @astrojs/cloudflare アダプターの新しい推奨設定に合わせ、main フィールドのパスを旧形式(dist/_worker.js/index.js)から、Astro 6.0 の新しい統合エントリーポイントである @astrojs/cloudflare/entrypoints/server へと更新しました。これにより、Vite がビルド時にセッションドライバー用の動的インポートを解析できずに発生していた警告と、Wrangler のビルドエラーが解消されました。
Content Layer API への移行対応
対象ファイル:
- src/content.config.ts
- src/utils/blog.ts
- src/pages/blog/[…slug].astro
- 対応: src/content.config.ts で loader: glob(…) を使用するように定義を変更し、Zod などのインポート元を Content Layer 対応のものに修正しました。
- Content Layer エントリーでは post.slug が利用できないため、src/utils/blog.ts にて post.id から slug を解決してマッピングするように修正し、各種インデックスやタグ一覧ページでのリンク崩れとルート競合の警告を防ぎました。
- 個別記事を表示する src/pages/blog/[…slug].astro にて、従来の非推奨メソッドである post.render() から、新しい render(post) 関数を呼び出す形式へと書き換えました。
SSG(静的サイト生成)構成への見直しと Cloudflare Pages デプロイ問題への対応
対象ファイル:
- astro.config.mjs
- wrangler.jsonc (wrangler.jsonc.bak)
- src/layouts/Layout.astro
- 対応: 以前は
@astrojs/cloudflareアダプターを使用しながらoutputを未指定(実質 SSG 扱い)にしていましたが、Astro 6 へのアップデートに伴い、アダプターがある状態での静的ビルドは成果物がdist/client/に出力される仕様に変更されました。この結果、Cloudflare Pages のデプロイ先(dist)とズレが生じ、公開ディレクトリが 404 になる問題や最新ブログ一覧が更新されない事象が発生していました。このブログは動的処理を伴わない純粋な SSG で良いため、astro.config.mjsからcloudflareアダプターを削除し、純粋な静的サイトとしてビルドされるように戻しました。これにより、ビルド結果がdist/直下にフラットに生成され、デプロイが正常に機能するようになりました。
おわりに
いくつかエラーや警告が出て多少手こずる部分もありましたが、ドキュメントとエラーメッセージを一つずつ対処して、無事に Astro 6 へのアップデートを完了できました。