SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Webページ用UIフレームワーク「Svelte」の活用

Webページ用UIフレームワーク「Svelte」とは? プレーンで軽量なJavaScript生成を体験しよう!

Webページ用UIフレームワーク「Svelte」の活用 第1回

SvelteKitを含まないプロジェクトでSvelteとReactを比較しよう

 それでは実際にSvelteのプロジェクトを生成して実行してみます。Svelteのプロジェクトは、SvelteKitを含むものと含まないものが利用できます。本連載では次回以降、SvelteKitを含むプロジェクトを利用して説明していきますが、SvelteとReactの各プロジェクトでビルドされたJavaScriptファイルを比較するため、今回はSvelteKitを含まないプロジェクトも利用します。

 まずは、SvelteKitを含まないSvelteのプロジェクト(以下「Svelteプロジェクト」と記述)について説明します。Viteを利用して、リスト1のコマンドでプロジェクトを生成します。--template svelte-tsの指定は、TypeScriptを利用するSvelteのテンプレートをもとにプロジェクトを生成することを表します。プロジェクトを生成するコマンドについてはViteの公式ドキュメントも参考にしてください。

[リスト1]ViteでSvelteプロジェクトを生成するコマンド
npm create vite@latest <プロジェクト名> -- --template svelte-ts

 プロジェクト生成後、プロジェクトのフォルダーでnpm installコマンドでライブラリをインストールして、npm run devコマンドで実行できます。Webブラウザーでhttp://localhost:5173/にアクセスして、図3の通り表示できます。なおnpm run dev -- --openと実行すると、自動的にWebブラウザーを開いてWebページを表示できます。

図3 Svelteプロジェクトの実行結果(p001-vite-svelte)
図3 Svelteプロジェクトの実行結果(p001-vite-svelte)

 このWebページでは「count is 0」のボタンをクリックすると、カウントが増えていきます。この処理はsrc/lib/Counter.svelteファイルに、リスト2の通り実装されています。

[リスト2]Svelteプロジェクトでのカウント処理(p001-vite-svelte/src/lib/Counter.svelte)
<script lang="ts"> // ...(1)
  let count: number = 0 // ...(1a)
  const increment = () => { // ...(1b)
    count += 1
  }
</script>

<button on:click={increment}> <!--(2)-->
  count is {count} <!--(3)-->
</button>

 ここで簡単にSvelteのコード(*.svelteファイル)の形式を説明します。まず処理の実装は(1)の<script>タグ内に行います。lang="ts"はTypeScriptを利用して実装することを表します。ここでは(1a)でcount変数を初期化し、(1b)のincrement関数でcountを1増やすようにしています。

 画面表示は<script>部の外にHTMLベースの記述で行います。(2)の<button>要素では、on:click={increment}記述で、クリック時に(1b)のincrement関数を実行するようにします。また(3)の{count}記述により、count変数の値をボタンに表示します。このような記述方法については、次回以降改めて説明していきます。

 一方、リスト3のコマンドを実行すると、リスト1のコマンドで生成したSvelteプロジェクトと類似の動作をするReactプロジェクトを生成できます。--template react-tsの指定は、TypeScriptを利用するReactのテンプレートをもとにプロジェクトを生成することを表します。

[リスト3]ViteでReactプロジェクトを生成するコマンド
npm create vite@latest <プロジェクト名> -- --template react-ts

 Svelteプロジェクト同様に、npm installコマンドでライブラリをインストール後、npm run devコマンドを実行すると、図4の通りWebページを表示できます。図3同様、ボタンクリックでカウントが増えていきます。

図4 Reactプロジェクトの実行結果(p002-vite-react)
図4 Reactプロジェクトの実行結果(p002-vite-react)

 カウントに関する処理は、プロジェクト内のsrc/App.tsxに、リスト4の通り実装されています。

[リスト4]Reactプロジェクトでのカウント処理(p002-vite-react/src/App.tsx)
function App() {
  const [count, setCount] = useState(0) // ...(1)

  return (
(略)
        <button onClick={() => setCount((count) => count + 1)}> {/*(2)*/}
          count is {count} {/*(3)*/}
        </button>
(略)
  )
}

 (1)のuseStateフックで、カウンターの値を格納するcount変数と、カウンターの値を設定するsetCount関数を取得します。これらを利用して(2)で、クリック時にカウンターの値を1増やすボタンを記述しています。(3)の{count}記述により、ボタン内にcount変数の値が表示されます。

 ここでSvelteとReactの各プロジェクトをビルドして、生成されるJavaScriptファイルを比較します。npm run buildコマンドを実行するとビルドが行われ、成果物がdistフォルダーに出力されます。dist/assets配下に出力されるJavaScriptファイルを参照すると、Svelteプロジェクトでは図5の通りになっています。

図5 Svelteプロジェクトをビルドして生成されたJavaScript(p001-vite-svelte)
図5 Svelteプロジェクトをビルドして生成されたJavaScript(p001-vite-svelte)

 一方でReactプロジェクトでは図6の通り、ビルドされたJavaScriptにReact自身のコードが含まれていることがわかります。

図6 Reactプロジェクトをビルドして生成されたJavaScript(p002-vite-react)
図6 Reactプロジェクトをビルドして生成されたJavaScript(p002-vite-react)

 この差異により、SvelteプロジェクトではビルドされたJavaScriptが8KB程度、Reactプロジェクトでは140KB程度と、ファイルサイズに大きな差が生じます。ライブラリ自身のコードが含まれない分だけ、Svelteではファイルサイズを小さくできます。

次のページ
SvelteKitを含むSvelteのプロジェクトを生成・実行するには?

この記事は参考になりましたか?

Webページ用UIフレームワーク「Svelte」の活用連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト  吉川 英一(ヨシカワ エイイチ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/19636 2024/07/03 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー