【2026年版】Svelteの始め方 — SvelteKit環境構築からコンポーネント作成まで完全ガイド


Svelteのコンパイラ型アーキテクチャ Counter.svelte <script> ロジック HTML テンプレート <style> スコープ CSS 1ファイルで完結 Svelte Compiler ビルド時変換 最適化済み JS ~ 2 KB (tiny!) スコープ CSS クラス衝突なし バンドルサイズ比較(同等機能) React: 仮想DOM ランタイム込み (~140 KB) Svelte: コンパイル済み (~10 KB) ランタイム必要 ランタイム不要 Svelteはビルド時にすべて最適化されるため実行時オーバーヘッドがない
Svelteのコンパイラ型アーキテクチャ
🎚 難易度 ★☆☆ 初心者向け
⏱ 学習時間の目安 読むだけ10分、環境構築込み30〜60分
📚 前提知識 javascript-getting-started の基礎知識・html-css-getting-started の基礎知識
✅ このガイドで学べること
  • SvelteKitプロジェクトの作成と起動
  • リアクティブ変数($state)とテンプレート構文
  • コンポーネントとpropsの使い方
  • SvelteKitのファイルベースルーティング

セットアップ手順

npm create svelte@latest my-svelte-app
cd my-svelte-app
npm install
npm run dev   # http://localhost:5173 で起動

コンポーネントの基本(Svelte 5)

<!-- src/lib/Counter.svelte -->
<script lang="ts">
  let count = $state(0);
  let doubled = $derived(count * 2);
</script>

<button onclick={() => count++}>
  クリック: {count}(2倍: {doubled})
</button>
<!-- src/lib/Greeting.svelte(propsを受け取るコンポーネント) -->
<script lang="ts">
  let { name, color = 'blue' } = $props();
</script>

<p style="color: {color}">こんにちは、{name}さん!</p>

<!-- 使い方(親コンポーネント) -->
<!-- <Greeting name="ひよこ" color="green" /> -->

SvelteKitのフォルダ構成:

src/routes/
  +page.svelte          # / (ルートページ)
  +layout.svelte        # 共通レイアウト
  about/
    +page.svelte        # /about
  blog/
    [slug]/
      +page.svelte      # /blog/:slug (動的ルーティング)
      +page.server.ts   # サーバーサイドデータ取得

よくある詰まりポイント

Q: Svelte 4とSvelte 5の書き方が混在して混乱する → Svelte 5(2024年リリース)では $state()$derived()$props() というRunesが導入されました。古い記事はSvelte 4の書き方(let count = 0 で自動リアクティブ)です。新規プロジェクトはSvelte 5推奨です。

Q: +page.server.ts でデータを取得したのにコンポーネントで受け取れないload 関数が返した値は +page.sveltelet { data } = $props() として受け取ります。data.xxx でアクセスできます。

Q: TypeScriptで $state の型エラーが出るlet count = $state<number>(0) のようにジェネリクスで型を指定できます。

ひよこ ひよこ

SvelteってReactVueと何が違うの?

ペンギン先生 ペンギン先生

Svelteの最大の特徴は「コンパイラフレームワーク」という点だよ。ReactVueブラウザ仮想DOMという仕組みを動かすけど、Svelteはビルド時にコードを最適化されたバニラJavaScriptに変換するんだ。だから実行時のオーバーヘッドが少なく、バンドルサイズが小さくなるのが特徴だよ。コードの書き方もシンプルで、ReactのuseState/useEffectのような特殊な書き方が少ないから学習コストが低いとも言われているよ。

ひよこ ひよこ

へえ、学習コストが低いのは魅力的!どうやって始めるの?

ペンギン先生 ペンギン先生

SvelteKitというフルスタックフレームワークで始めるのが今の標準だよ。「npm create svelte@latest my-app」でプロジェクトを作成できて、テンプレートは「Skeleton project」か「SvelteKit demo app」から選べるよ。「cd my-app」→「npm install」→「npm run dev」でlocalhostにアクセスできるようになるよ。TypeScriptも最初から使えるように選べるんだ。

ペンギン先生 ペンギン先生

ここで「npm create svelte@latest my-svelte-app」を実行してみてね。テンプレートは「Skeleton project」でOK、TypeScriptは「Yes」がおすすめだよ。「cd my-svelte-app」→「npm install」→「npm run dev」で「localhost:5173」にアクセスしてみよう!(試してみて)

ひよこ ひよこ

コンポーネントはどうやって書くの?

ペンギン先生 ペンギン先生

Svelteコンポーネントは「.svelte」ファイルで、「<script>」「HTML」「<style>」の3ブロックで構成されているよ。変数を宣言するだけで自動的にリアクティブになるのが特徴で、Svelte 5では「let count = $state(0)」という新しい書き方になったよ。ボタンをクリックしたらカウントが増えるコンポーネントを書くなら、「let count = $state(0)」と「<button onclick={() => count++}>{count}</button>」だけで完成するんだ。

ひよこ ひよこ

ReactのuseStateより短く書けるんだね!親から子コンポーネントへデータを渡すのは?

ペンギン先生 ペンギン先生

propsを使って渡すよ。子コンポーネントで「let { name } = $props()」と書いてpropsを受け取り、親から「<Child name="ひよこ" />」のように渡せるんだ。双方向バインディングは「bind:value」で実現できて、「<input bind:value={text} />」と書くだけで入力値がtextに自動で反映されるよ。Reactより少ないコードで同じことが実現できるのがSvelteの魅力だね。

ひよこ ひよこ

SvelteKitのルーティングってどうなってるの?

ペンギン先生 ペンギン先生

SvelteKitはファイルベースルーティングを採用していて、「src/routes/」ディレクトリの構造がそのままURLになるよ。「src/routes/+page.svelte」が「/」、「src/routes/about/+page.svelte」が「/about」になるんだ。「+page.svelte」はページコンポーネント、「+layout.svelte」は共通レイアウト、「+page.server.ts」はサーバーサイドのデータ取得を書く場所だよ。「[slug]」ディレクトリで動的ルーティングも実現できるんだ。

ひよこ ひよこ

SSRSSGもできるの?

ペンギン先生 ペンギン先生

できるよ!SvelteKitはSSRデフォルトで、「+page.server.ts」の「load関数」でサーバーでデータを取得してからHTMLを返せるんだ。「export const prerender = true」を設定すればSSGになるよ。「@sveltejs/adapter-static」を使えば完全静的サイトとしてVercelNetlifyデプロイできるし、「@sveltejs/adapter-vercel」でVercelSSRも使えるよ。

ひよこ ひよこ

ReactVueSvelte、どれを学べばいいか迷う…

ペンギン先生 ペンギン先生

求人や採用では今もReact(特にNext.js)が圧倒的に多いから、就職・転職を考えるならReactを優先するのがおすすめだよ。でもSvelteは学習コストが低く、個人開発や小中規模プロジェクトで生産性が高いのが特徴だね。Reactを学んでからSvelteを試すと、「こんなにシンプルに書けるんだ!」と感動する人が多いよ。2026年現在、SvelteKitはViteベースで開発体験もよく、注目度が上がっているフレームワークだよ。

ひよこ ひよこ

デプロイはどこがおすすめなの?

ペンギン先生 ペンギン先生

VercelNetlifyが最も手軽だよ。GitHubと連携しておけばpushするだけで自動デプロイされるんだ。「@sveltejs/adapter-vercel」か「@sveltejs/adapter-netlify」をインストールして「svelte.config.js」で設定するだけだよ。SupabaseバックエンドとしてFirebaseの代わりに使えば、Svelte + SvelteKit + Supabaseスタックでフルスタックアプリが無料〜低コストで作れるよ。

次に学ぶなら