はじめに
2026-06-22にAstro 7がリリースされました。当ブログはAstro 6.4.8で運用していたので、リリース直後にAstro 7.0.3へアップグレードしてビルド時間を実測してみました。結果はタイトルの通りで、本番ビルドは大幅に速くなったのに対して、devサーバーの起動だけは逆に遅くなる、という意外な結果になりました。
本記事では、計測条件、実測値、そして「なぜdevが遅くなったか」「なぜビルドが速くなったか」の順に掘り下げていきます。
アップグレードと計測の準備
公式のアップグレードツールを試したら、いきなり詰まりました。
npx @astrojs/upgrade@latest
これを実行するとastro本体と@astrojs/mdxの破壊的変更を検出してSome packages have breaking changes. Continue?と対話プロンプトが出ます。Claude CodeなどのCLIエージェント越しに作業していたため、標準入力に応答できずここで停止してしまいました。
回避策として、ツールが識別した最新メジャー版をそのままnpm installで指定しました。
npm install astro@^7.0.3 @astrojs/mdx@^7.0.0
@astrojs/sitemapは3.7.3のままで動作するので変更不要です。
当ブログでは破壊的変更へのコード修正は一切不要で済みました。これは元の構成が最小限だったためで、内訳は次の通りです。
| Astro 7の破壊的変更 | 当ブログの状況 |
|---|---|
| Vite 8化 | astro.config.mjsにviteカスタム設定なし |
| Rustコンパイラ厳格化 | .astro/.mdxに書式ミスなし |
| compressHTMLデフォルトが’jsx’に | HTML差分は出るが視覚影響なし(後述) |
| Sätteriが新Markdownデフォルト | remark/rehypeプラグイン未使用 |
| @astrojs/dbの削除 | 未使用 |
| astro:transitions内部API削除 | 未使用 |
| experimental flag一斉撤去 | 未指定 |
計測条件は以下の通り。
- 規模: 記事56本、画像379枚、生成ページ99
- 環境: Node 22.22.2、WSL2上のDebian 13、dev container内
- 各フェーズN=5ラン+ウォームアップ1ラン(集計対象外)
- Build cold:
rm -rf dist .astro node_modules/.astro node_modules/.vite後にnpm run build - Build warm: 直前のキャッシュを残したまま連続実行
- Dev cold:
.astroとVite キャッシュ削除後、astro dev起動からポート確立まで
WSL2上のI/Oはばらつきが出やすいので、min/median/mean全部を集計対象にしています。特にbuild warmは時々2秒台の極端な外れ値が出ましたが、傾向が両バージョンで共通だったので結論には影響しないと判断しました。
結果

5ラン分の集計値です。
| 指標 | Astro 6.4.8 | Astro 7.0.3 | 差分 |
|---|---|---|---|
| Build cold (median, s) | 14.30 | 13.60 | -4.9% |
| Build cold (mean, s) | 15.14 | 12.53 | -17.2% |
| Build warm (median, s) | 6.74 | 4.90 | -27.3% |
| Build warm (mean, s) | 6.32 | 4.35 | -31.2% |
| Dev cold (mean, s) | 4.91 | 5.95 | +21.2% |
| distファイル数 | 652 | 652 | ±0 |
| dist合計サイズ | 52.75 MB | 52.73 MB | -0.04% |
| Layout CSSサイズ | 135,595 B | 133,276 B | -1.7% |
本番ビルドはmeanで2〜3割短縮、devだけ1秒ほど悪化、という結果です。
出力差分も見ました。HTMLは652ファイル中101ファイルが差分を持ちますが、全部がAstro 7の既知変更で説明可能で、視覚的な崩れはありませんでした。
<meta name="generator">のバージョン表記更新<link rel="stylesheet">のCSSハッシュ更新compressHTMLのデフォルトがtrueから'jsx'になり、要素間のホワイトスペースが詰まる(例:</a> <li>→</a><li>)- インラインscriptのminify識別子の変化(Vite 8の新ミニファイヤ)
CSSは中身の最小化アルゴリズム自体も変わって-1.7%。dist全体のサイズはほぼ同等で、画像最適化結果に変化は出ていません。
なぜdevが遅くなったか
タイトルの主役なので先に書きます。
実は計測中、最初はdev起動時間の数値すら取れませんでした。Astro 6のdevサーバー出力にはastro v6.4.8 ready in 4129 msのような行があり、ベンチスクリプトではready inを正規表現で拾っていました。ところがAstro 7では起動ログがJSON形式に置き換わり、ready inの文字列ごと消えていました。
{
"message": "Dev server running at http://localhost:4322 (pid 485411)\n Network:\n http://172.17.0.2:4322/\n Stop: astro dev stop\n Status: astro dev status\n Logs: astro dev logs",
"label": "SKIP_FORMAT",
"level": "info"
}
messageフィールドは改行を埋め込んだ1つの文字列です。実際にターミナルでこれを展開した見た目はこうなります。
Dev server running at http://localhost:4322 (pid 485411)
Network:
http://172.17.0.2:4322/
Stop: astro dev stop
Status: astro dev status
Logs: astro dev logs
判定文字列をAstro 6/7共通のhttp://(localhost|127.0.0.1):に切り替えて再計測しました。
ログを見ると分かりますが、Astro 7のdevサーバーは起動直後にastro dev stop astro dev status astro dev logsという新しいサブコマンド群を案内しています。Astro 7からdevサーバーがバックグラウンドdaemonとして動く設計に変わり、フォアグラウンドのターミナルを長時間専有しなくて良くなりました。CLIエージェント(Claude Codeなど)からの利用を想定した変更だと思われます。
dev cold startが1秒ほど悪化しているのは、おそらくこのdaemon化に伴う初期化処理(プロセスフォーク、JSONロガー初期化、新サブコマンドの常駐準備など)が増えたためと推察します。ただ当ブログでの実測はN=2と少なく、原因の特定までは至っていません。リリースノートにも明示はなく、今回のところは「事実として遅くなった、設計変更が大きい」までで止めておきます。
なぜビルドが速くなったか
こちらは公式リリースノートでも目玉として挙がっている領域で、3つの要因が重なっています。
-
Vite 8化: Astro 7はバンドラとして使うViteをv7からv8に上げました。Vite 8では各種依存更新やバンドル戦略の改善が入っており、esbuild/lightningcssの新版も同時に取り込まれます。当ブログのLayout CSSが-1.7%小さくなったのは、おそらくこのCSS最小化の改善が効いた結果です。
-
Rustコンパイラ統一: Astroの
.astroファイルをパースするコンパイラが、Go実装からRust実装(@astrojs/compiler-rs)に統一されました。Astro 6ではexperimental扱いだったRust版がデフォルトかつ唯一の実装になり、コンパイル自体が高速化されています。同時にエラーチェックも厳格化され、未閉じタグなどは黙って自動修正されずエラー扱いになります。 -
Sätteri Markdownデフォルト化: 従来はremark/rehypeベースのパイプラインがデフォルトでしたが、Astro 7からはネイティブ実装の「Sätteri」がデフォルトMarkdownプロセッサになりました。remark/rehypeプラグインを使っているプロジェクトは別途@astrojs/markdown-remarkを入れる必要があります。当ブログは標準Markdownのみ使用なので、Sätteriへの切り替えがそのまま速度向上に効いていると思われます。
ただし、当ブログのベンチでは「Vite 8単体・Rustコンパイラ単体・Sätteri単体」までの切り分けはしていません。あくまで合算効果としての-17〜31%です。
まとめ
個人ブログ規模(記事56本)でWSL2上、N=5の小さな実測なので、数字をそのまま大規模サイトに当てはめるのは無理がありますが、当ブログの環境では以下のような結果でした。
- 本番ビルドは確かに速くなった(cold mean -17.2%、warm mean -31.2%)
- devコールドスタートは1秒ほど悪化(+21.2%)、ただし新しいdaemon化の副作用と推察
- アップグレード自体はnpm installだけで、コード変更ゼロで完了
総合判断としてはアップグレードを取り込んだ価値はあったと考えています。dev体験についてはAstro 7のdaemon化の意図(エージェント連携)が定着していくうちに最適化されると思うので、しばらく様子を見ます。
