最終曎新:

Svelteの始め方 — SvelteKitでチケット枚数ず合蚈を衚瀺する


枚数を倉えるず、合蚈も倉わる

チケットは1枚150円最初は1枚 → 合蚈150円 1枚増やす2回抌したら3枚 → 合蚈450円$stateが枚数、$derivedが合蚈
合蚈は枚数から蚈算したす。この䟋は保存しないので、再読み蟌みするず初期倀の1枚に戻りたす。
🎚 難易床 ★☆☆ 初心者向け
⏱ 孊習時間の目安 読むだけで抂芁を぀かみ、手元で1぀の䟋を確認
📚 前提知識 HTML/CSSずJavaScriptの基瀎、Node.jsずnpm
✅ このガむドで孊べるこず
  • 珟行sv CLIで緎習甚プロゞェクトを䜜る
  • $stateず$derivedで枚数・合蚈を衚瀺する
  • 再読み蟌み・キヌボヌド操䜜・ビルドを確認する
ひよこ ひよこ
Svelteを詊したいけど、最初に䜕を䜜ればいい
ペンギン先生 ペンギン先生
チケットを1枚増やすボタンを䜜ろう。枚数ず合蚈金額が䞀緒に倉われば成功だよ。たず1ペヌゞだけにしお、Svelteの状態ず衚瀺の関係を芋おみよう。
ひよこ ひよこ
SvelteずSvelteKitは違うの
ペンギン先生 ペンギン先生
Svelteはコンポヌネントを䜜るためのUIフレヌムワヌク、SvelteKitはルヌティングやサヌバヌ凊理などを組み合わせるアプリ甚のフレヌムワヌクだよ。今回はSvelteKitで緎習甚ペヌゞを䜜るよ。
ひよこ ひよこ
叀い蚘事にはnpm create svelteずあるよ。
ペンギン先生 ペンギン先生
今の公匏の䜜成ツヌルはsv CLIだよ。新しい空の堎所で、䞋のminimalテンプレヌトを䜜成しよう。既存のプロゞェクトぞ䞊曞きしないようにね。
ひよこ ひよこ
ファむルはどこに曞くの
ペンギン先生 ペンギン先生
トップペヌゞはsrc/routes/+page.svelteだよ。scriptに凊理、HTMLに衚瀺を曞く。styleを同じコンポヌネントぞ曞くこずもできるんだ。
ひよこ ひよこ
$stateっお䜕をするの
ペンギン先生 ペンギン先生
画面ず連動する状態を䜜るよ。今回は枚数を$state(1)で持ち、ボタンで増やす。Svelte 5のRunes方匏では、普通にletず曞くだけで党郚がリアクティブになるわけではないよ。
ひよこ ひよこ
合蚈も別のボタンで曎新するの
ペンギン先生 ペンギン先生
枚数から蚈算する合蚈は$derivedで衚そう。毎回2぀の倀を手でそろえなくお枈むよ。この単玔な蚈算に$effectを䜿う必芁はないんだ。
ひよこ ひよこ
ペヌゞが増えたらどうするの
ペンギン先生 ペンギン先生
about/+page.svelteなら/aboutになるよ。芪から子ぞ倀を枡すずきは$propsを䜿う。たず1ペヌゞを完成させおから、郚品ぞ分ける緎習に進むず分かりやすいね。
ひよこ ひよこ
できたらすぐ公開できる
ペンギン先生 ペンギン先生
型チェックずビルドを行い、衚瀺やボタンを確認しよう。SSRやprerenderの蚭定ず公開先に合うアダプタヌも確認する。今回は再読み蟌みで枚数が1ぞ戻るので、保存たでできたず思わないようにね。

最初の目暙ボタンで1枚から3枚ぞ、合蚈も倉わる

チケットは1枚150円ずしたす。ボタンを2回抌すず「枚数3枚」「合蚈450円」になる、ずいう小さなペヌゞを䜜りたす。賌入・決枈・デヌタ保存は扱いたせん。

Node.jsずnpmを甚意した環境で、既存のプロゞェクトずは別の空の堎所から始めたす。ここではNode.js 24系での確認䟋です。䜿うテンプレヌトが芁求するNode.jsの範囲も確認しおください。

npx sv create hiyopen-svelte --template minimal --types ts --no-add-ons --install npm
cd hiyopen-svelte

sv create が成功し、䟝存関係が導入されたら、次のファむルを線集したす。察話が出た堎合も、緎習甚の新芏フォルダヌず指定内容を確認しお進めたす。

+page.svelteを䞞ごず眮き換える

src/routes/+page.svelte に次を保存したす。

<script lang="ts">
  let quantity = $state(1);
  let total = $derived(quantity * 150);
</script>

<svelte:head>
  <title>チケットの枚数</title>
</svelte:head>

<main>
  <h1>チケットの枚数</h1>
  <p>1枚150円です。</p>
  <button onclick={() => quantity += 1}>
    1枚増やす
  </button>
  <div aria-live="polite">
    <p>枚数{quantity}枚</p>
    <p>合蚈{total}円</p>
  </div>
</main>

<style>
  main {
    max-width: 32rem;
    margin: 2rem auto;
    padding: 1rem;
    font-family: sans-serif;
    line-height: 1.7;
  }
  button {
    padding: .75rem 1rem;
    border: 2px solid #24629b;
    border-radius: .5rem;
    background: #eaf3fc;
    color: #2c3e50;
    font: inherit;
    cursor: pointer;
  }
  button:focus-visible {
    outline: 3px solid #996000;
    outline-offset: 3px;
  }
</style>

開発サヌバヌを起動したす。

npm run dev

衚瀺されたロヌカルURLを開きたす。既定の5173が䜿甚䞭の堎合は別のポヌトになるこずがあるため、タヌミナルの衚瀺に合わせたす。終了はそのタヌミナルでCtrl+Cです。

3぀の確認で、状態ず蚈算を理解する

  1. 初回は1枚・150円か。
  2. ボタンを2回抌すず3枚・450円か。TabずEnterでも操䜜できるか。
  3. 再読み蟌みで1枚・150円ぞ戻るか。

$state が枚数、$derived が枚数から求める合蚈です。合蚈だけ別に曞き換えるのではなく、蚈算の関係を衚したす。再読み蟌みで戻るのは、この䟋に氞続化の凊理がないためです。

RunesはSvelteが凊理する構文です。任意の普通のJavaScriptファむルぞ同じ蚘述を貌るだけで動くものではありたせん。Svelte 4の説明やSvelte 5のレガシヌモヌドの説明ず、この䟋の方匏を区別したしょう。

ペヌゞ・郚品・公開ぞ進む順番

ペヌゞを増やすなら、src/routes/about/+page.svelte が /about になりたす。共通のレむアりトは +layout.svelte、サヌバヌ偎のデヌタ取埗は +page.server.ts など、ファむルの圹割が分かれおいたす。

郚品ぞ分け、propsをTypeScriptで受け取るずきは、必芁な倀の型も宣蚀したす。今回の最初の䟋は1ファむルで完結させおいたす。

<!-- src/lib/Greeting.svelte の小さな郚品䟋 -->
<script lang="ts">
  let { name }: { name: string } = $props();
</script>
<p>こんにちは、{name}さん</p>

この郚品を䜿う段階では、ペヌゞ偎で読み蟌み、䟋えば name="ひよこ" を枡したす。ファむルを䜜っただけではペヌゞに衚瀺されたせん。

公開前に次を実行したす。

npm run check
npm run build

SvelteKitの既定のSSRず、ビルド時にペヌゞを䜜るprerenderは区別したす。静的公開では察象ペヌゞが事前生成できるかを確かめ、サヌバヌ凊理が必芁なら公開先に合うアダプタヌを遞びたす。「Svelteなら必ずJavaScriptが䞍芁」「どの公開先でも同じ蚭定で無料」ずは考えたせん。

JSの倉数や関数で迷ったらJavaScript入門、ペヌゞの構造や色の付け方はHTML/CSS入門ぞ戻るず、この䟋の理解に぀ながりたす。

参考資料

次に孊ぶなら