Svelte 5入門 第1回 Svelteの特徴

ReactやVue.jsとも違う、シンプルで新しいアプローチの開発ツール、Svelteを紹介します。まずはSvelteを含むプロジェクトをインストールし、テンプレートを試してみましょう。

発行

著者 宇野 陽太 フロントエンド・エンジニア
Svelte 5入門 シリーズの記事一覧

Svelteとは

Svelte(スベルト)は、ReactやVue.jsと並んで紹介されることも多い、UIフレームワークです。

ReactやVue.jsは、アプリケーションの状態変化を検知し、それにあわせてUIを更新し、画面を再描画する仕組みです。そして、この仕組みを実行するために必要なコード(ランタイムを含む)をクライアントにダウンロードする必要があります。

状態変化とUIの描画を紐づける仕組み

この仕組みは、広く「仮想DOM」という名前で呼ばれることが多いです。 ですが、執筆時点のReact公式ドキュメントでは、「仮想DOM」という単語は使われなくなっています。 それを加味して、本記事では「仮想DOM」という単語の使用は避けました。 ちなみに、Vue.jsではこれまで通り、この仕組みを「仮想DOM」と呼んでいます。

それに対し、Svelteではアプリケーションを事前にコンパイルし、アプリケーションの状態が変更されたら直接DOMを更新するという手法をとっています。そのため、ランタイムで必要なコードは、DOMを更新する小さなスクリプトとなるので、仮想DOMで必要だったような大きなランタイムが不要となります。

ファイル形式は独自であるものの、HTMLやCSS、JavaScriptの標準仕様に近い書き方ができることも魅力の一つです。次節で例を示しながら、詳しくみてみましょう。

簡潔な記法

Svelteで作ったアプリケーションのプロジェクトは、.svelte拡張子をつけたファイル群とJavaScriptファイルからなります。.svelteファイル内は、スクリプト、マークアップ、スタイルの3つで構成されます。このファイルの例を見てみましょう。

なお、このシリーズでは、Svelte 5.30.1を使って説明していきます。

次のコードは、ボタンをクリックすると表示カウントが増えていくデモと、その.svelteファイルのコードです。

svelteファイルのサンプル

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

function onClickButton () {
  count += 1;
}
</script>

<div>
  <output>{count}</output>
</div>
<button type="button" onclick={onClickButton}>button</button>

<style>
/* 必要なければstyleタグごと消してよい */
</style>

これをコンパイルすれば、デモページで使用しているコードになります。

ご覧のように、非常に簡潔です。

スクリプト部分は、ライブラリなどを用いない素のJavaScriptコードを書く場合とほとんど変わりません。一部、$stateのようなSvelte特有の記法を覚える必要があるくらいで、これまでJavaScriptを書いてきた人であれば、あまり意識することなく書くことができます。

こういった既存の知識や役立つという点から、Svelteを初めてUIライブラリを使う際の候補としてもよいかもしれません。

Svelteを試してみる

それでは、Svelteを実際に触っていきましょう。インストール方法はSvelteのドキュメントに載っているとおりに進めればすぐに終わります。

まずはSvelteプロジェクトを作成しましょう。以下のコマンドを実行します。

プロジェクトの作成

npx sv create

このコマンドを実行すると、対話形式でSvelteのプロジェクトを作成することができます。

ここでは、それぞれ次のように選択しています。

まず、プロジェクトを作成する場所を聞かれます。

  Where would you like your project to be created?

    ./2025-svelte-demo

Svelteプロジェクトを作成するディレクトリを入力します。ここはご自身の環境に合わせて、お好きなディレクトリを指定してください。

ここでは./2025-svelte-demoとしました。

プロジェクトの作成場所

  Which template would you like?
   SvelteKit minimal (barebones scaffolding for your new app)
   SvelteKit demo
   Svelte library


    SvelteKit minimal

プロジェクトに使うテンプレートを選択します。選択肢中の「SvelteKit」とは、Svelteの利用を前提としたWebアプリケーションフレームワークです。

特定のライブラリの利用を前提としたフレームワーク

SvelteKitのように、特定のライブラリの利用を前提としたフレームワークのことを「メタフレームワーク」と言います。 SvelteKit以外の代表的なメタフレームワークでは、ReactにおけるNext.js、Vue.jsにおけるNuxt.jsなどが挙げられます。

UIライブラリであるSvelte単体では実現できない、ルーティングや、ビルドなどの機能を提供します。

補足:SvelteKitを使ったアプリケーション開発

テンプレートから作成したプロジェクトに、ページを追加したり関数を足したりしていくことで、アプリケーションを作成していきます。SvelteKitを使ってアプリケーションを開発する方法については、以下のシリーズを参考にしてください。

SvelteKitを使わない選択肢はここには出てきません。Svelte単体でインストールする方法については後述します。

今回は最小構成のファイル群があればいいので、SvelteKit minimalを選択しました。

次にTypeScriptを使うかどうかを選択します。

TypeScriptの使用の有無

  Add type checking with TypeScript?
   Yes, using TypeScript syntax
   Yes, using JavaScript with JSDoc comments
   No


    No

これもどちらでも構いませんので、プロジェクトで使いたいほうを選択してください。

TypeScriptの型注釈とそのチェック機能は、ここでの選択にかかわらず利用することができます。より高度なTypeScriptの機能を必要とする場合は有効にします。

本シリーズではTypeScript固有の解説は行わないので、ここではNoを選択しています。

追加でインストールしたい開発ツールを選択します。フォーマッターやリンターなど、必要に応じて選択してください。

今回は何も使うつもりはないので、何も選択せずにEnterを押します。

追加でインストールするツール選択

  What would you like to add to your project? (use arrow keys / space bar)
   prettier (formatter - https://prettier.io)
   eslint
   vitest
   playwright
   tailwindcss
   sveltekit-adapter
   drizzle
   lucia
   mdsvex
   paraglide
   storybook


    none

プロジェクトで使用するパッケージマネージャーを選択します。

パッケージマネージャーの選択

  Which package manager do you want to install dependencies with?
   None
   npm
   yarn
   pnpm
   bun
   deno


    npm

ここではNode.jsの初期状態でも利用できるnpmを選択しました。なお、npm以外を選択した場合、該当のパッケージマネージャーがあらかじめインストールされていないとエラーとなるので、気をつけてください。

ここまで選択すると、プロジェクトの作成が完了します。依存パッケージのインストールも自動で行われます。

SvelteKitを使わないプロジェクトを作成する

Svelte 5では、npx sv createコマンドを使って、SvelteKitベースのプロジェクトを作成することが推奨されています。本シリーズもそれに従って、SvelteKitベースのプロジェクトで解説していきます。

とはいえ、組織や環境などの理由により、SvelteKitを導入できないケースというのもあるかもしれません。

そのようなケースでは、ビルドツールであるViteのプロジェクトとしてセットアップする、というやり方があります。

まずは、以下のコマンドを実行して、Viteのプロジェクトを作成します。

Viteプロジェクトの作成

npm create vite@latest

するとこちらも、対話形式でプロジェクトのセットアップが始まります。

プロジェクト名を入力します。

Viteプロジェクトのセットアップ

Project name:

  2025-vite-w-svelte-demo

先ほどと同様に、ご自身の環境に合わせてディレクトリを指定してください。

使いたいフレームワークを選択します。

UIフレームワークの選択

Select a framework:

  Svelte

ここでSvelteを選択します。

開発スタイルを選択します。

開発スタイルの選択

Select a variant:

  JavaScript

JavaScriptまたはTypeScriptを選択します。

これで、SvelteKitを使用しない、Svelte単体で動作するプロジェクトが作成されます。

アプリケーションのビルドとサーバーの起動

テンプレートのpackage.jsonには3つのコマンドが用意されています。それぞれの役割を見てみましょう。

アプリケーションをビルドする

あらかじめ用意されているビルドコマンドを使い、アプリケーションをビルドしてみましょう。

npm run build

このコマンドを実行すると、.svelte-kit/outputディレクトリが作成され、その中にJavaScriptファイルとCSSファイルが追加されます。

このディレクトリをHTTPサーバーで公開することで、アプリケーションを閲覧することができるようになります。

サーバーの起動

生成したファイルを実行するサーバーは、以下のコマンドで起動します。

サーバーを起動とプレビュー

npm run preview

このコマンドは、ローカルサーバーを起動し、上記のnpm run buildで生成したディレクトリをホスティングします。名前からわかるように、プレビュー用のサーバーを起動するコマンドです。

初期状態では、http://localhost:4173/にアクセスすることで動作を確認できます。

サーバーはcontrol+Cキーで停止します。

ビルドと監視

ソースファイルを監視して、変更があったらアプリケーションを再ビルドする開発用のコマンドがあります。また、このコマンドではサーバーも同時に実行し、再ビルド時には自動で更新が行われます。

ビルドと監視

npm run dev

サーバーにアクセスするURLは、http://localhost:5173/です。

ローカルサーバーやビルド処理の変更

これらのコマンドはViteを実行するものです。ローカルサーバーのポート番号を変更したい場合など、必要に応じてコマンドのオプションを追加修正するとよいでしょう。

また、Viteによるビルド処理自体を変更したい場合は、vite.config.tsを更新します。

まとめ

今回はSvelteアプリケーションを作成し、そのまま実行するところまで紹介しました。次回から、簡単なアプリケーションを作りながら、Svelteコンポーネントの機能を紹介していきます。