Astro 7.0で何が変わったのか

このブログ(saka2blog)自体もAstro ^6.0.8 の上で動いています。 そこに Astro 7.0 がリリースされました。マイナーアップデートの延長ではなく、 内部のコンパイラそのものを置き換えたアーキテクチャレベルの刷新です。

一言でいうと「速くなったが、より厳格になった」リリースです。ビルドは15〜61%高速化される一方、これまで黙って通っていた崩れたHTMLが ビルドエラーとして弾かれるようになりました。何が起きているのかを整理します。

Astroのメジャーリリースの流れ

Astro 1.0リリース

「Islands Architecture」を掲げ、静的サイト生成に部分的なインタラクティブ性を持ち込む新しいアプローチとして登場。

Astro 2.0〜4.0

Content Collections、View Transitions、Server Islandsなど、SSR・データ管理まわりの機能を段階的に拡充。

Astro 5.0〜6.0

Content Layer API安定化、Advanced Routingやストリーミングレンダリングが実験フラグとして先行提供される。

Astro 7.0リリース

コンパイラをGoからRustへ移行。新Markdownエンジン「Satteri」、ストリーミングレンダリング・Advanced Routing・Route Cachingが安定版に昇格。AIエージェント向けdevサーバー機能も追加。

核心変更①:GoコンパイラからRustコンパイラへ

Astroの.astroファイルは内部的に専用コンパイラでJSに変換されています。 これまではGo実装(@astrojs/compiler)でしたが、Astro 7.0ではRust製の新コンパイラが唯一のデフォルトになりました。

効果は主に2つです。ビルド速度の向上(公称15〜61%)と、HTML構文の厳格なバリデーションです。 裏返すと、これまで「動いていたが実は壊れていたマークアップ」——閉じタグ漏れや属性の記法ミスなど——が ビルドエラーとして表面化しやすくなっています。

flowchart LR
    Src[".astroファイル"] --> Compiler
    subgraph Compiler["コンパイラ"]
        direction LR
        Go["v6以前: Go実装
(緩やかなHTML解釈)"]
        Rust["v7: Rust実装
(厳格なHTML解釈)"]
    end
    Compiler --> JS["JS/HTML出力"]
    Rust -.->|"不正なHTMLは
ビルドエラー"| Fail["ビルド失敗"]
コンパイラ刷新により、これまで黙って通っていた不正なマークアップが検出されるようになった

核心変更②:新Markdownエンジン「Satteri」

Markdownのデフォルトプロセッサがremarkベースのunifiedパイプラインから、 Astro独自実装のSatteriに切り替わりました。ネイティブ実装によって処理速度が上がる一方、remark/rehypeのカスタムプラグインへの依存があるプロジェクトは影響を受けます

このブログは本文をHTML直書きで管理しているためMarkdown処理自体への依存は薄いですが、 remarkプラグイン(目次生成・数式レンダリング等)を使っているプロジェクトでは注意が必要です。 従来動作に戻す方法は用意されています。

# 従来のremark/rehypeパイプラインを維持したい場合
npm install @astrojs/markdown-remark

# astro.config.mjs 側で明示的に指定
# markdown: { syntaxHighlight: ... } 等のremark系オプションは
# @astrojs/markdown-remark 経由でこれまで通り利用可能

核心変更③:ストリーミングレンダリング・Advanced Routing・Route Cachingの安定化

Astro 6系まではexperimentalフラグの裏に隠れていた機能が、7.0で軒並み標準機能に昇格しました。

機能Astro 6以前Astro 7.0
レンダリング方式キューベース(順次処理)ストリーミングが安定版・デフォルトに
Advanced Routing実験フラグ`experimental.rewriting`等標準機能。エントリポイントが`src/app.ts`→`src/fetch.ts`に移動
Route Caching実験フラグ内の`cache`/`routeRules`標準の設定項目としてトップレベルに移動
コンパイラGo実装(デフォルト)Rust実装のみ(Goは廃止)
Markdown処理remark/rehype(unified)Satteriがデフォルト

ストリーミングレンダリングは、ページ全体の生成を待たずに準備できた部分から レスポンスを返す方式です。TTFB(Time to First Byte)の改善が期待できます。

Advanced Routingは、これまでsrc/app.tsだったデフォルトのエントリポイントがsrc/fetch.tsに変わった点が実務上のインパクトです。カスタムルーティングロジックを 書いている場合はファイルの移行が必要になります。

核心変更④:AIコーディングエージェント向けdevサーバー

地味ながら開発体験に直結する変更です。astro devAIコーディングエージェント環境を自動検知し、 バックグラウンドプロセスとして起動できるようになりました。Claude CodeのようなCLIエージェントが コード変更→devサーバー再起動→動作確認のループを自動化しやすくなります。

# バックグラウンドでdevサーバーを起動(AIエージェント環境を検知して自動選択されることもある)
astro dev

# 状態確認
astro dev status

# ログ確認(フォアグラウンドに出さずに後から追う)
astro dev logs

# 停止
astro dev stop

非推奨・削除された機能

新機能の裏で、いくつかの機能が非推奨化・削除されています。アップグレード前にチェックしておきたいポイントです。

  • Astro DBが非推奨に。astro dbastro loginastro logoutastro linkastro initの各CLIコマンドが削除されました。node:sqliteやDrizzle ORMなど、他のデータ層への移行が推奨されています。
  • Vite 8へのアップグレード。開発サーバー・本番バンドラーの基盤がVite 8になりました。Vite 8非対応の古いプラグインを使っている場合は動作確認が必要です。
  • compressHTMLのデフォルト変更。従来のtrueから'jsx'に変わり、インライン要素間の空白がJSX(Reactライク)のルールで扱われるようになりました。テキストの余白が微妙に変わる可能性があります。
  • astro:transitionsの内部API削除。TRANSITION_*系の内部定数・ヘルパー関数が廃止されました。公式のView Transitions APIを直接使っていれば影響はありません。

アップグレード前のチェックリスト

実際にアップグレードする前に確認しておきたい項目を整理します。

  1. Node.jsバージョンをローカル・CI・ホスティング環境すべてで確認する
  2. remark/rehypeカスタムプラグインへの依存があるか棚卸しする(あれば@astrojs/markdown-remarkを追加)
  3. カスタムルーティングsrc/app.tsを使っていないか確認する(src/fetch.tsへの移行)
  4. Astro DBを使っていないか確認する(使っていれば移行計画が必要)
  5. まずステージング環境でastro buildを実行し、HTML構文エラーが出ないかを確認する
# アップグレードコマンド(公式のastro upgradeを使うのが安全)
npx @astrojs/upgrade

# 手動で行う場合
npm install astro@latest

# アップグレード後はまずビルドで検証
npm run build

まとめ

  • ① コンパイラがGoからRustへ。ビルドが15〜61%高速化する一方、HTML構文チェックが厳格化され、既存の崩れたマークアップがビルドエラーとして表面化しやすくなる。
  • ② Markdown・レンダリング・ルーティングの主要機能が安定版に昇格。新Markdownエンジン「Satteri」がデフォルトに、ストリーミングレンダリング・Advanced Routing(src/fetch.ts)・Route Cachingが実験フラグを卒業した。
  • ③ AIエージェント時代を意識したdevサーバー。astro dev status/logs/stopが追加され、AIコーディングエージェントとの協調がしやすくなった。一方でAstro DBは非推奨化されるなど、削除される機能もあるためアップグレード前の棚卸しが欠かせない。

理解度チェック

問題 0 / 50%
Q1

Astro 7.0における最大の内部アーキテクチャ変更はどれですか?

キーボード: 1〜4 で選択、Enter で回答