Astro vs Next.js:静的サイトで40%高速化する技術的真実

はじめに
技術ブログのフレームワーク選びで、私もかなり悩みました。
最初はVercel製でReactエコシステムが強力なNext.jsが「鉄板」だと思っていました。しかし、コミュニティで「Astroのパフォーマンスが凄い」「Lighthouseで満点が出た」という声を頻繁に目にするようになり、心が揺れ動きました。
あなたも今、Astro vs Next.js、どちらを選ぶべきか迷っているのではないでしょうか?ネット上の比較記事は多いですが、結局どちらが良いのか分かりにくいこともあります。
そこで私は2日間かけて、同じ内容のブログを両方のフレームワークで構築し、Lighthouseスコア、ビルド速度、実際のアクセス速度を徹底的に比較検証しました。結果は驚くべきもので、Astro版はLighthouseスコアが一気に100点になり、初期ロード時間は半分近くになりました。
この記事では、パフォーマンス、アーキテクチャ、エコシステム、デプロイの4つの観点から、忖度なしのデータに基づいて両者を比較します。これを読めば、あなたのプロジェクトにどちらが適しているか、明確な答えが出るはずです。
パフォーマンス対決 - 真のスピードキングはどっちだ?
Astro Next.js 比較において、パフォーマンスは避けて通れないトピックです。ブログやドキュメントサイトなら、表示の速さとSEOは命綱ですから。
JavaScriptサイズ:90%の差は伊達じゃない
まずは最も分かりやすいデータから。同じ内容(約30記事、コードハイライトと画像あり)で構築した2つのブログの、ホームページのJSバンドルサイズを比較しました。
- Next.js 静的エクスポート:約 85KB(gzip後)
- Astro:約 8KB(gzip後)
この差は圧倒的です。Astro公式サイトが謳う「JavaScript 90%削減」は、私の実測でも証明されました。
なぜこれほど違うのか?鍵は設計思想にあります。Next.jsは静的エクスポート(SSG)であっても、Reactランタイム、ハイドレーションロジック、ルーター管理などの基礎コードを含めます。一方、Astroはデフォルトでページを純粋なHTMLとしてレンダリングし、JavaScriptを一切送信しません。client:* ディレクティブで指定したコンポーネントだけがJSを含みます。
簡単に言えば、Next.jsは「静的ページを見せたいだけでもReactフルセットを提供」するのに対し、Astroは「必要な部分だけを提供する」のです。
Lighthouseスコア:Astroは余裕の満点
バンドルサイズだけでなく、実際のユーザー体験も測定しました。Chrome DevToolsのLighthouseで、Vercelにデプロイした本番環境を計測しました。
Astro ブログ:
- Performance: 100
- Accessibility: 98
- Best Practices: 100
- SEO: 100
Next.js ブログ(SSG):
- Performance: 88
- Accessibility: 98
- Best Practices: 96
- SEO: 100
差がついたのは主にFCP(First Contentful Paint)とTTI(Time to Interactive)です。Astroは通常0.5秒以内に描画完了しますが、Next.jsは1〜1.5秒かかります。
興味深いのは、モバイル3G回線でのシミュレーション結果です。AstroはPerformance 95+を維持しましたが、Next.jsは75前後まで落ちました。ブログやドキュメントのようなコンテンツ重視のサイトにおいて、Astroのパフォーマンス優位性は揺るぎないものです。
ビルド速度:大規模プロジェクトで顕著な差
開発体験の一環として、ビルド速度も重要です。1000ページのドキュメントサイト(StarlightとNextraを使用)でテストしました。
- Astro (Starlight):約 18秒
- Next.js (Nextra):約 52秒
Astroは約3倍高速でした。「Gatsbyより3倍速い」という公式の宣伝文句通りです。Next.js 15も並列ビルドなどでかなり高速化されましたが(以前は80秒以上かかっていました)、純粋な静的生成においてはAstroに軍配が上がります。
実例:大手企業はどう選んでいる?
データだけでなく、実際の採用事例を見てみましょう。
Astroを採用しているサイト:
- IKEAの開発者ドキュメント
- NordVPNの公式ブログ
- Firebaseのドキュメント
- Cloudflareの開発者センター
共通点は「コンテンツ主体」であること。読み込み速度とSEOを極限まで追求しています。
Next.jsを採用しているサイト:
- NikeのECサイト
- Spotifyのマーケティングページ
- Huluのストリーミングプラットフォーム
- TikTokの一部ページ
こちらは動的な機能、ユーザーインタラクション、パーソナライズが必要なシーンが多いですね。
ここから見える選定基準は明確です:純粋なコンテンツ表示にはAstro、動的インタラクションが主ならNext.js。
技術アーキテクチャ - Islands vs RSC 静的サイトに適しているのは?
なぜこれほどの差が出るのか、技術的な裏側を見てみましょう。
Astro Islands:海に浮かぶ孤島
Astroのコアは Islands Architecture(アイランドアーキテクチャ) です。
Webページを「海」(静的なHTML部分)と、そこに浮かぶ「島」(インタラクティブなコンポーネント)に見立てる考え方です。
ページの大半は静的な海であり、検索バーや「いいね」ボタンといった少数の島だけがJavaScriptを必要とします。
Astroはデフォルトでページ全体を静的HTMLとしてレンダリングします。そして、特定のコンポーネントだけを「島」として扱います:
---
import SearchBox from '../components/SearchBox.jsx'
import StaticHeader from '../components/Header.astro'
---
<StaticHeader /> <!-- 純粋なHTML、JSなし -->
<SearchBox client:load /> <!-- これは島。JSをロード -->この設計のメリット:
- JSのオンデマンド読み込み:インタラクションが必要な部分だけJSを送信。
- 独立したハイドレーション:各島は独立しており、並行してロード可能。
- 柔軟なロード戦略:
client:load(即時)、client:visible(表示時)など細かい制御が可能。
私のブログの例で言えば、コードハイライトは純粋なCSS(JS不要)、ダークモード切り替えボタンだけ client:load にしています。結果、ホームページのJSはボタン用のわずか5KBで済みました。Next.jsなら、ハイライトが静的でもReactランタイム全体が必要になります。
Next.js RSC:サーバーコンポーネントによるダイエット
Next.js 15の解は React Server Components (RSC) です。これも「サーバーでレンダリングできるものはサーバーで」という発想です。
RSCはコンポーネントを2種類に分けます:
- Server Components(デフォルト):サーバーでレンダリングされ、ブラウザにはHTMLだけ届く。JSは送信されない。
- Client Components(
'use client'宣言):インタラクションが必要なコンポーネント。JSバンドルに含まれる。
// app/components/Header.jsx
export default function Header() {
return <header>My Blog</header> // JSは送信されない
}
// app/components/SearchBox.jsx
'use client'
import { useState } from 'react'
export default function SearchBox() {
// ... クライアントJSとして送信される
}Astro Islandsと似ていますが、違いがあります:
- デフォルトの挙動:AstroはHTMLのみ。Next.jsはRSCでコンポーネントコードは減らせても、基盤となるReactランタイムは送信されます。
- フレームワークへの依存:AstroはReact, Vue, Svelteなどを混在可能。Next.jsはReact専用です。
結局、静的サイトにはどっち?
純粋な静的コンテンツ(ブログ、ドキュメント)なら、Astro Islandsの方が圧倒的に軽量です。Markdownブログの例なら、AstroはJSゼロにできますが、Next.jsは最低でも40-50KBのランタイムが必要です。
しかし、動的更新が必要なら話は別です。Next.jsのISR(Incremental Static Regeneration)は、CMSで記事が更新されたら特定のページだけバックグラウンドで再生成する機能があり、非常に強力です。AstroもServer Islandsなどで動的部分に対応しましたが、ISRのような更新フローの成熟度はNext.jsに一日の長があります。
私のおすすめ:
- 90%以上が静的:Astro(パフォーマンス重視)
- 頻繁な更新が必要:Next.js(ISRの柔軟性)
- 混合ケース:チームの技術スタック次第
機能とエコシステム - 開発体験と拡張性
開発のしやすさ、機能の豊富さについても比較しましょう。
Markdown対応:Astroは即戦力
ブログやドキュメントを作るならMarkdownは必須です。この点、Astroの体験は素晴らしいです。
.mdファイルをsrc/pages/に置くだけでページ化- MDXも標準サポート
- Content Collections API で型安全なコンテンツ管理が可能
// src/content/config.ts
const blog = defineCollection({
schema: z.object({
title: z.string(),
tags: z.array(z.string())
})
})これでTypeScriptによる補完が効き、メタデータの記述ミスを防げます。RSSやサイトマップ生成も簡単です。
一方 Next.js は、@next/mdx や next-mdx-remote のインストール、remark/rehypeプラグインの設定など、環境構築に手間がかかります。Contentlayerのようなサードパーティライブラリを使わないと、型安全な管理は難しいです。
フレームワークの互換性:Astroの「大統一」
Astroの強みは、好きなフレームワークを使えることです。
React、Vue、Svelte、Solid、Preact… これらを一つのプロジェクト内で混在させられます。
- ナビゲーションはReact(チームが慣れているから)
- コンポーネントはVue(既存資産があるから)
- グラフはSvelte(軽量だから)
といった使い分けが可能です。これはレガシー資産の移行時にも非常に有利です。
Next.jsはReact一筋ですから、Reactのエコシステムにフルコミットする場合に最適です。
プラグインエコシステム
Next.js:
- npm上の数百万のReactライブラリが使える
- Vercelによる強力な統合(Analytics, Speed Insights, KVなど)
- 圧倒的なコミュニティ規模で、解決策が見つからないことはまずない
Astro:
- 400+ の公式/コミュニティ統合機能
- Starlight(ドキュメント)、AstroBlogなどの特化型ソリューションが優秀
- 画像最適化、Sitemapなど基本機能は公式サポートあり
ブログやドキュメントサイトを作る範囲では、Astroのエコシステムで困ることはほぼありません。複雑なWebアプリを作るならNext.jsのエコシステムが必要になるでしょう。
適用シーン - あなたはどっちを選ぶべき?
いろいろ比較しましたが、結局「自分のプロジェクトにはどっち?」という疑問に答えましょう。
Astroを選ぶべき人
以下の条件に2つ以上当てはまるなら、Astroを強く推奨します:
- コンテンツが主役:ブログ、ドキュメント、ポートフォリオ、企業サイト。
- パフォーマンス重視:Lighthouse 100点を狙いたい、Core Web Vitalsを改善したい。
- Markdown中心:記事やデータをMarkdownで管理したい。
- シンプルさ重視:複雑な設定なしで、サクッとサイトを立ち上げたい。
- 多フレームワーク:React以外のVueやSvelteも使いたい、あるいはこれらを混ぜたい。
Next.jsを選ぶべき人
以下のようなケースでは、Next.jsが輝きます:
- 動的アプリ:ダッシュボード、SNS、SaaS製品など、ユーザーごとの表示が多い。
- 複雑な動的ルーティング:ECサイトのフィルタリング、検索結果ページ。
- Reactエコシステムへの依存:特定のReactライブラリが不可欠。
- Vercelへの依存:既にVercelのワークフローや機能(ISRなど)を多用している。
- 頻繁なデータ更新:CMSと連携し、分単位でコンテンツを更新・再生成したい。
移行コストについて
Next.jsからAstroへの移行を考えている場合:
- 低コスト(1-2日):純粋なMarkdownブログ。Reactコンポーネントが少なければ、ほぼコピペで済みます。
- 中コスト(1-2週間):独自のReactコンポーネントが多い場合。Astro Islandsでラップして再利用できますが、データ取得ロジックなどの調整が必要です。
- 高コスト(推奨しない):大量の
useEffectや複雑な状態管理、Next.js固有のAPI(API Routes, Middleware)に依存している場合。
私の経験では、90%が静的コンテンツのサイトなら、移行する価値は十分にあります。
結論
Astro vs Next.js、勝者は決まりましたか?
私の結論はこうです:
- 個人ブログ、技術ドキュメント、コーポレートサイトには Astro。
- Webアプリケーション、大規模EC、高機能プラットフォームには Next.js。
私はブログをAstroに移行して、パフォーマンスの向上と「Lighthouse 100点」という精神的な充足感を得ました(笑)。Markdownでの執筆体験も最高です。
一方、業務で作る管理画面やSaaSには迷わずNext.jsを選びます。
迷っているなら、まずはAstroで npm create astro@latest して、デフォルトのブログテンプレートを触ってみてください。その軽快さに驚くはずです。
FAQ
AstroとNext.jsのパフォーマンス差はどれくらい?
Astro IslandsとNext.js RSCの違いは?
Next.jsからAstroへの移行は大変ですか?
動的な機能が必要な場合はどうすればいい?
6 min read · 公開日: 2025年12月2日 · 更新日: 2026年1月22日
関連記事
Next.js ファイルアップロード完全ガイド:S3/Qiniu Cloud 署名付き URL 直接アップロード実践

Next.js ファイルアップロード完全ガイド:S3/Qiniu Cloud 署名付き URL 直接アップロード実践
Next.js Eコマース実践:カートと Stripe 決済の完全実装ガイド

Next.js Eコマース実践:カートと Stripe 決済の完全実装ガイド
Next.js ユニットテスト実践:Jest + React Testing Library 完全設定ガイド


コメント
GitHubアカウントでログインしてコメントできます