React・Vue・Svelte・Astro・Next.jsを同じアプリで比較

フロントエンドフレームワーク比較

React・Vue・Svelte・Astro・Next.js比較:同じアプリで実測 | We.Inc

React、Vue、Svelte、Astro、Next.js を、それぞれで作った同じToDoアプリで比較。実測したJavaScriptのサイズ、プロジェクトの種類別の選び方の表、学習コストの解説、Vite と webpack の比較コラム付き。

人気ではなく、プロジェクトに合わせて選びましょう。Astro はページをJavaScriptがほとんど、またはまったくないHTMLとして配信するため、コンテンツ中心のサイトに向いています。React をベースにした Next.js は本格的なWebアプリに向いています。Vue は最も学びやすく、Svelte は配信するコードが最も少なくなります。それぞれで同じToDoアプリを作ったところ、gzip 圧縮後のサイズは Svelte が13.8 KB、Vue が25.8 KB、React が68 KBでした。

それぞれを一言で

意見は簡単に見つかりますが、同じアプリを計測したデータはなかなかありません。私たちは小さなToDoアプリを React、Vue、Svelte、素のJavaScriptで書き、それぞれ Vite でビルドし、ブラウザーで操作して、配信されるものを計測しました。Astro と Next.js については、同じコンポーネントを組み込んだ形で紹介します。

よくある質問

Next.js と React は同じものですか?

いいえ。React はUIライブラリで、Next.js は React をベースにしたフレームワークです。ルーティング、サーバーレンダリング、Server Components、データ読み込み、ビルド設定を追加します。Next.js の中で React のコンポーネントを書きます。

Webサイトには Astro と Next.js のどちらがいいですか?

マーケティングページ、ブログ、ドキュメントなどコンテンツ中心のサイトなら、通常は Astro のほうが配信するJavaScriptが少なく、シンプルです。ログイン、ダッシュボード、多くのインタラクションがあるアプリのようなサイトなら、Next.js のほうが適しています。

Vue は React より簡単ですか?

テンプレートがHTMLのように見え、リアクティビティにイミュータブルな更新が不要なため、始めやすいと感じる人が多いです。React は最初に JSX とフックのルールを学ぶ必要がありますが、ライブラリも求人もより多くあります。

Svelte のバンドルが小さいのはなぜですか?

Svelte はビルド時にコンポーネントを単純なDOM更新コードにコンパイルするため、汎用的なレンダリングエンジンではなく、小さなランタイムだけを配信するからです。

Vite と webpack のどちらを使うべきですか?

新しいプロジェクトなら Vite です。起動が速く、設定もほとんど必要ありません。webpack は、そのプラグインに依存している既存のプロジェクトでは今でも理にかなっています。

学習コストを正直に比べると

ホスティング

それぞれが配信するもの

Vite の本番モードでビルドし、すべてのビルドをブラウザーでテストしました。Astro と Next.js はこの計測に含めていません。

実測値:同じToDoアプリで配信されるJavaScriptの合計

どれを選ぶか

プロジェクトの種類別の選び方

比較一覧

ひと目でわかる比較

同じアプリを5通りで

React

状態はフックに保持されます。変更のたびにコンポーネントが再実行され、React がDOMの差分を更新します。更新では新しい配列やオブジェクトを作る必要があります。

Vue

スクリプト、テンプレート、(必要なら)スタイルを1つのファイルに書きます。v-model で入力を双方向にバインドし、ref はリアクティブなので、配列に追加するだけで済みます。

Svelte 5

runes($state、$derived)でリアクティブな値を示し、コンパイラーがコンポーネントを直接的なDOM更新に変換します。そのためランタイムが小さいのです。

素のJavaScript

比較の基準です。小さなウィジェットなら十分ですが、DOMの更新は自分で書き、データとの同期も手作業で保つ必要があります。

Astro:同じアプリをアイランドとして

Astro はページをHTMLとしてレンダリングし、client ディレクティブを指定したコンポーネントだけをハイドレートします。ここでは Svelte のToDoアプリが画面内にスクロールされたときにJavaScriptを読み込み、ページの残りの部分は一切配信しません。

Next.js:同じコンポーネントを置く場所

App Router ではページが Server Component なので、インタラクティブなToDoリストは "use client" を付けた専用のファイルに置きます。それを囲むページ自体は、コンポーネントのJavaScriptを一切送りません。

コラム:Vite と webpack の比較

Vite と webpack の比較

コンテンツサイトを作るなら、こちらもご覧ください:

静的サイトジェネレーター

無料で始める · クレジットカード不要

関連: ガイド|Webマーケティングと集客を学ぶ

製品

ご利用いただける方

機能

リソース

会社情報

サイトマップを見る