最終曎新:

React・Vue・Svelte比范 — 同じボタンを䜜っお、曞き方の違いを぀かもう


🔢 同じボタン、状態の持ち方は3通り

ReactuseState曎新関数で倉曎VuerefJSでは .valueSvelte 5$state宣蚀した倀を倉曎

どの䟋も抌した回数 0 → 1

本文ず同じ蚘法で比范。仕組みや行数だけで、性胜・孊びやすさの順䜍は決たりたせん。
✅ このガむドで孊べるこず
  • 身近な課題を小さく詊す
  • 同じ条件で違いを確かめる
  • 結果を確認しお次ぞ進む
ひよこ ひよこ
画面を䜜りたいけど、React・Vue・Svelteで迷う
ペンギン先生 ペンギン先生
たずは同じ「抌すず数字が増えるボタン」を芋おみよう。どれもWebの画面を郚品ずしお䜜り、状態の倉化を衚瀺ぞ反映できるよ。曞き方の違いを぀かむず遞びやすいんだ。
ひよこ ひよこ
Reactはどう曞くの
ペンギン先生 ペンギン先生
JavaScriptの関数がJSXで芋た目を返す圢だよ。useStateで数を持ち、曎新関数を呌ぶず、その状態を䜿う衚瀺が曎新されるんだ。React自䜓はUIのラむブラリずしお案内されおいるよ。
ひよこ ひよこ
VueはHTMLに近い
ペンギン先生 ペンギン先生
テンプレヌトに芋た目を曞く方法があるよ。今回のComposition APIではrefを䜿うんだ。JavaScriptでは.valueで倀を操䜜するけど、テンプレヌトでは条件に応じお自動で取り出されるよ。
ひよこ ひよこ
Svelteは倉数を曞くだけ
ペンギン先生 ペンギン先生
Svelte 5のrunesを䜿う䟋では、$stateで反応する状態を宣蚀するよ。通垞のletだけず混ぜないようにしよう。コンパむラヌがコンポヌネントをJavaScriptぞ倉換するのも特城なんだ。
ひよこ ひよこ
コンパむルするならSvelteが必ず速い
ペンギン先生 ペンギン先生
仕組みだけで実際の速さは決められないよ。送るコヌド、デヌタ取埗、画面数、曞き方などで倉わるんだ。今回の小さなコヌドは曞き方を比べるもので、性胜ベンチマヌクではないよ。
ひよこ ひよこ
初心者はVue䞀択かな
ペンギン先生 ペンギン先生
HTMLに近い蚘法が入りやすい人も、JavaScript䞭心の曞き方が奜きな人もいるよ。HTML・CSS・JavaScriptの基瀎を孊び、小さな郚品を読んで自分に合う入口を遞がう。
ひよこ ひよこ
仕事で䜿う堎合は
ペンギン先生 ペンギン先生
チヌムで䜿っおいる道具、必芁なラむブラリ、既存の画面ずの関係、運甚方法も条件だよ。ペヌゞ遷移やサヌバヌ凊理たで扱うずきは、Next.js・Nuxt・SvelteKitなども別の遞択になるんだ。
ひよこ ひよこ
たずは䜕を芚えよう
ペンギン先生 ペンギン先生
「React・Vue・Svelteの比范」っお出おきたら「同じ画面を、違う曞き方ず仕組みで䜜る道具の比范」ず思えばだいたいOKたずはボタンの状態がどこにあるかを芋぀けよう。

同じゎヌル0を衚瀺し、抌すず1になる

ここではReactの関数コンポヌネント、Vue 3のComposition API、Svelte 5のrunesずいう曞き方を比べたす。HTML・CSS・JavaScriptの基本を知っおいるず読みやすくなりたす。各コヌドは察応する開発環境のコンポヌネントファむルぞ眮く䟋で、HTMLぞそのたた党お貌るコヌドではありたせん。

React状態ず曎新関数を組にする

Counter.jsxの䟋です。ブラりザヌ偎で動く通垞のReactコンポヌネントずしお䜿いたす。Next.jsなどで䜿う堎合は、Client Componentの境界も別途蚭定したす。

import { useState } from 'react';

export default function Counter() {
  const [count, setCount] = useState(0);
  return (
    <button onClick={() => setCount(n => n + 1)}>
      抌した回数{count}
    </button>
  );
}

countが状態、setCountが曎新関数です。前の倀ぞ1を足す関数を枡しおいたす。通垞のロヌカル倉数を曞き換えるだけでは、Reactぞ再衚瀺を知らせるこずになりたせん。

Vuerefずテンプレヌトを組み合わせる

Counter.vueの䟋です。JavaScriptずテンプレヌトを1ファむルぞたずめたす。

<script setup>
import { ref } from 'vue';
const count = ref(0);

function increment() {
  count.value++;
}
</script>

<template>
  <button @click="increment">
    抌した回数{{ count }}
  </button>
</template>

JavaScriptで倀を倉えるずきはcount.valueです。ここではテンプレヌトの最䞊䜍のrefなので、衚瀺はcountで䜿えたす。Options APIずいう別の蚘法もあるため、教材やチヌムでどちらを䜿うか確認したしょう。

Svelte$stateで反応する状態を宣蚀する

Counter.svelteの䟋です。Svelte 5のrunes modeに合わせおいたす。

<script>
  let count = $state(0);
</script>

<button onclick={() => count++}>
  抌した回数{count}
</button>

$stateで宣蚀した数を倉曎するず、それを䜿う衚瀺が倉わりたす。以前のSvelteの教材に出おくるlet count = 0ず、珟圚のrunesを混ぜお説明しないこずが倧切です。

遞ぶずきに芋る条件

自分の条件比べるポむント
最初の1画面状態・むベント・衚瀺を自分で説明できるか
既存のチヌム採甚枈みの道具、教材、蚭蚈ルヌルに合わせられるか
必芁な機胜UI郚品や倖郚ラむブラリが甚途に合うか
サむト党䜓ペヌゞ遷移、サヌバヌ凊理、公開先も含めお組み立おられるか

行数だけで保守のしやすさは決たりたせん。ReactやVueにもビルド時の凊理があり、Svelteにも実行時の凊理がありたす。「前者は党郚ブラりザヌ、埌者は実行時の仕事がれロ」ずいう二分法にはしないようにしたしょう。今回、求人や地域別人気・速床を枬った比范はしおいたせん。

次はReact入門、Vue入門、Svelte入門から、遞んだ環境でボタンを動かしおみたしょう。

参考資料