「前の会社が作ったAstroサイトを引き継いだのですが、バージョンが古いままで、触るのが怖くて」——受託の保守でこの相談は本当に多い。package.json を開くと Astro が数世代前で止まっていて、依存もそれに引きずられて古い。動いてはいるが、いざ上げようとすると何が壊れるか読めず、誰も最初の一歩を踏み出せないまま時間だけが過ぎている。そういうサイトが、Astro 7.0 の登場でまた一段、判断を迫られることになりました。
7.0 は単なるマイナーな積み増しではありません。.astro のコンパイラが Go 製から Rust 製へ置き換わり、これまで黙って通っていた「閉じタグの抜け」や「閉じていない属性」が、ビルドエラーとして止まるようになりました。バンドラも Vite 8(Rolldown)へ移り、ビルドは速くなる一方で、古いまま放置したサイトほど移行時に引っかかる箇所が増えます。本記事では、6.2 → 6.3 → 6.4 と続けてきたバージョンアップ受託の延長として、引き継いだAstroサイトを 7.0 へ上げるか、それともモダンSSGで作り直すかの判断を、制作の立場から整理します。
7.0 で何が「止まる」のか
新機能より先に、受託で効いてくるのは破壊的変更のほうです。引き継いだサイトを上げるとき、まずここでつまずきます。
一番大きいのは、コンパイラが Rust 製になり、HTML の文法に厳しくなったことです。これまでの Go 製コンパイラは、<div>Hello(閉じタグ抜け)や <div class="Hello >(閉じていない属性)といった壊れた書き方を黙って補正して通していました。7.0 ではこれがエラーになり、void 要素(<br> 等)を除くすべての要素に対応する閉じタグが必須になります。長く運用されたサイトほど、本文やテンプレートのどこかにこうした「動いていたけれど正しくない HTML」が紛れていて、それが移行時に一斉に表面化します。
| 変更 | 何が起きるか | 受託での影響 |
|---|---|---|
| Rust 製コンパイラ | 閉じタグ抜け・属性の閉じ忘れがエラー化 | 古いテンプレートほど修正箇所が出る |
| Vite 8 / Rolldown | バンドラが Rolldown に統合 | esbuild/Rollup 前提の独自設定・プラグインを要確認 |
@astrojs/db 削除 | astro db 等のCLIごと撤去 | DB を使っていれば SQLite / Drizzle へ移行が必要 |
もうひとつ見落としやすいのが @astrojs/db の削除です。6.4.5 で非推奨になっていたものが 7.0 で正式に撤去され、astro db / astro login / astro link といった CLI コマンドごと消えました。これを使っていたサイトは、Node.js 組み込みの SQLite(Node v22.5.0 以降)か Drizzle ORM への置き換えが要ります。引き継いだ案件だと「そもそも Astro DB を使っているかどうか」を発注者が把握していないことも多く、まず依存を棚卸しするところから始まります。
なお Vite 8 では、Rust 製の新バンドラ Rolldown が esbuild と Rollup を一本化して置き換えました。標準的な構成なら恩恵だけを受けられますが、独自の Vite プラグインや Rollup 前提の設定を仕込んでいるサイトは、その部分が動くかを個別に確認する必要があります。引き継いだサイトに前任者の独自設定が残っているケースは珍しくないので、ここは必ず実ビルドで当たります。
上げると速くなる、という現実的な動機
破壊的変更ばかり書くと腰が引けますが、7.0 に上げる動機はちゃんとあります。中心は速さです。
.astro コンパイラの Rust 化、Markdown / MDX 処理の刷新、レンダリングエンジンのキュー方式への置き換え、そして Vite 8 / Rolldown。これらが合わさって、ビルドが目に見えて速くなりました。記事数の多いメディアサイトや、ページ数の多いコーポレートサイトほど、ビルド時間の短縮はそのまま制作・運用の体感に効きます。デプロイのたびに数分待たされていたサイトが短くなれば、更新の心理的ハードルが下がり、結果として更新頻度も上がります。表示そのものの速さ、つまり Core Web Vitals の話とは別軸ですが、開発側の回転が速くなる効果は受託の保守では地味に大きい。表示速度の指標づくりについてはCore Web Vitals のガイド記事で整理しているので、あわせて見てもらえればと思います。
ルーティング面では、6.3 で実験的に入っていた Advanced Routing が 7.0 で標準有効になりました。src/fetch.ts というエントリポイントを置くと、src/middleware.ts と同じ感覚で Astro のリクエストパイプライン全体を細かく制御できます。さらに、6 系で実験フラグだったルートキャッシュが安定版になり、Netlify / Vercel / Cloudflare 向けに、キャッシュ指示をホストのエッジへ流す CDN キャッシュプロバイダ(一部はプライベートベータ)も用意されました。ただし、純粋な静的サイト(SSG)として運用しているコーポレートサイトでは、このあたりは直接の恩恵に乏しいことも多い。自分のサイトがどの機能を実際に使うのかを切り分けてから採否を決めるのが、受託では現実的です。
上げるか、作り直すか
ここが本題です。引き継いだサイトを前に、7.0 へ「上げる」のと、モダンSSGで「作り直す」のと、どちらを選ぶか。判断材料はバージョンの遠さだけではありません。
順当に上げられるのは、バージョンが一つか二つ前で、独自のVite設定やAstro DBに依存しておらず、テンプレートのHTMLが概ね素直なサイトです。この場合は、間のメジャーを飛ばさず段階的に上げるのが安全です。実際、私たちが扱ってきた案件でも、6.2 への移行、6.3 と Starlight 0.39 の同時更新、6.4 への引き上げと、一段ずつ確認しながら積み上げてきました。各段の公式アップグレードガイドに沿って破壊的変更を一つずつ潰し、ビルドが通って表示が変わらないことを確かめてから次へ進む。地味ですが、これが一番事故が少ない。
一方、作り直しを検討すべきサインもあります。前任者の独自Viteプラグインが深く絡んでいて Rolldown 上で動く保証がない、Astro DB に業務データが乗っていて移行設計から要る、あるいはテンプレートのHTMLが壊れた書き方だらけで Rust コンパイラのエラーが数百件単位で出る——こうしたケースでは、無理に上げ続けるより、現行の見た目とコンテンツを引き継いだうえで素直な構成に作り直したほうが、結果的に安く済むことがあります。「上げる」のコストが「作り直す」のコストに近づいてきたら、作り直しを正面から検討する合図です。
私たちが昨年引き継いだあるBtoB企業のサイト(社名は伏せます)は、Astro が数世代前で止まり、前任者が組んだ独自のVite設定とMarkdown処理が複雑に絡んでいました。試しに最新へ上げると、コンパイラのエラーとプラグインの非互換が同時に噴き出し、一つ直すと別が崩れる状態でした。最終的に、コンテンツコレクションの記事データと画像はそのまま流用し、レイアウトとビルド設定だけを素のAstro構成で組み直す方針に切り替えました。結果として、上げ続けるより工数が読みやすく、引き渡し後も次の担当者が触れる素直な状態に落ち着きました。「全部を一度に上げきろうとしない」「壊れた土台はいったん作り直す」という割り切りが、このときは効きました。
まず手元で7.0をビルドしてみる
どちらの道を選ぶにしても、最初にやるべきは判断ではなく計測です。いまの依存とテンプレートが 7.0 でどれだけエラーを出すかを、実際にビルドして数で見る。これをやらずに「古いから危ない」「動いているから大丈夫」と印象で決めると、たいてい見積もりを外します。
具体的には、検証用のブランチを切って Astro を 7.0 に上げ、npm run build を一度通してみるところから始めます。Rust コンパイラの閉じタグエラーが何件出るか、Vite 8 でプラグインが落ちないか、@astrojs/db の依存が残っていないか。エラーの件数と種類が見えれば、「一段ずつ上げて潰せる量」なのか「作り直したほうが早い量」なのかが、印象ではなく数字で判断できます。Node.js のバージョン要件も上がっているので、ビルド環境(Cloud Build や CI)が現行の偶数 LTS に乗っているかも、このタイミングで合わせて確認しておくと安全です。
引き継いだAstroサイトのバージョンが古いまま放置されている、上げたいが何が壊れるか分からず手を付けられない、いっそ作り直すべきか判断したい——そうしたお悩みがあれば、グリームハブのお問い合わせからご相談ください。まず現行サイトを 7.0 で試しビルドし、エラーの量と原因を切り分けたうえで、「段階的に上げる」「部分的に作り直す」「丸ごと作り直す」のどれが一番安く確実かを、見積もりとあわせてお出しします。
Sources
- Upgrade to Astro v7 - Astro Docs
- Astro 7.0 - Astro Blog
- Route caching - Astro Docs
- feat: remove @astrojs/db (#17010) - withastro/astro
- feat: make the Rust compiler the only option (#16462) - withastro/astro
- Astro 7.0 brings Vite 8, performance boost, advanced routing, route caching & AI features - AlternativeTo