hero_picture
Cover Image for Svelteを使ってみた

Svelteを使ってみた

Webサイト構築事業部の西村です

今回は、最近有名になりつつある Svelte というJavaScript Frameworkの簡単な紹介と使ってみた感想を紹介いたします

目次

Svelteとは?

Svelteは簡単にいうとDOMを効率よく更新できるjsファイルを生成できるコンパイラとなっています

生成したjsファイルがDOMを効率よく更新できるためReactやVue.jsで利用されているVirtual DOM(仮想DOM)がないという特徴となっています

https://svelte.dev/blog/virtual-dom-is-pure-overhead

また、ReactやVue.jsと比較すると少ないコードで記述ができることも1つの特徴となっています

https://svelte.dev/blog/write-less-code

始めてみる

Svelteの公式ブログに新規開発者に向けた記事(https://svelte.dev/blog/svelte-for-new-developers)があります

その記事ではnode.jsのインストールから書かれているため初心者でも始めやすいかと思われます

今回はプロジェクトの作成から始めたいと思います

まずGithubのtemplateリポジトリ(https://github.com/sveltejs/template)をダウンロードします

degitが導入されている方はそちらを用いてダウンロードされても問題ございません

1npx degit sveltejs/template svelte-app

degitが導入されていない方は画像で赤くなっているボタンを押すとzipファイルとしてダウンロードできるため、ダウンロードし任意の場所に展開することで同じものを用意できます

展開した(degitでダウンロードした)テンプレートのディレクトリをターミナルで開き下記コマンドを実行します

1npm install
2npm run dev

するとアプリがhttp://localhost:5000で起動し、ページを開くとHello Worldが表示されるかと思います

実際のコードは src/app.js と src/App.svelte に書かれておりこちらを変更することでページの内容が更新されます

フェードインを実装してみる

画面をフェードインで表示するようなアニメーションを追加していきます

まずは src/App.svelte を開きます

そして、fadetransitionをインポートします

1<script>
2	import { fade } from 'svelte/transition'
3	export let name;
4</script>

そしてそれを実行したい部分にtransition:fadeを追加します(今回はmainタグに追加します)

1<main transition:fade>
2	<h1>Hello {name}!</h1>
3	<p>Visit the <a href="https://svelte.dev/tutorial">Svelte tutorial</a> to learn how to build Svelte apps.</p>
4</main>

これでフェードインの実装は完了ですが、実際に動作させるためには表示を切り替える必要があります

表示を切り替える最も簡単な方法は {#if 式} {/if} でタグを挟むこととなっています

1<script>
2	import { fade } from 'svelte/transition'
3	export let name;
4
5	let isVisible = false;
6</script>
7
8{#if isVisible}
9<main transition:fade>
10	<h1>Hello {name}!</h1>
11	<p>Visit the <a href="https://svelte.dev/tutorial">Svelte tutorial</a> to learn how to build Svelte apps.</p>
12</main>
13{/if}

この段階でisVisibleはfalseを指定しているため画面の表示はなくなります

ですのでこのisVisibleを変更することによりフェードインで表示されるようになります

今回は画面表示時に切り替えてみようと思います

ライフサイクルの中でonMountとというものがあるためこちらを利用してtrueに切り替えます

1<script>
2	import { onMount } from 'svelte';
3	import { fade } from 'svelte/transition'
4	export let name;
5
6	let isVisible = false;
7
8	onMount(() => {
9		isVisible = true;
10	});
11</script>
12
13{#if isVisible}
14<main transition:fade>
15	<h1>Hello {name}!</h1>
16	<p>Visit the <a href="https://svelte.dev/tutorial">Svelte tutorial</a> to learn how to build Svelte apps.</p>
17</main>
18{/if}

ここまでが正常に実装できているとページを表示した際にフェードインで表示されるようになります

fadeの他にもscaleやslide等様々あります

https://svelte.dev/docs#svelte_transition

私の所感

アニメーション等が容易に実装できることはすごい便利だと感じた半面、既存のライブラリがまだ少ないため既存のライブラリがどこまで利用できるかが未知数であると言わざるをえません。(例えばBootstarp)

また日本語での解説記事もまだ多くないため情報源は英語などの外国語の記事が多くなるかと思われます

そのような記事を上手く読まないといけないのが大変な点だとも感じました

また、記述はVue.jsに似ている部分もあるためいままで開発で利用していた場合は始めやすいのかなと感じました

※これは私の所感なので実際の感じ方には個人差があります

最後に

少しでも気になった方は試してみるといいかもしれません

Node.jsのダウンロードが面倒や、テンプレートをダウンロードするのが面倒という場合は、Webページ上で試すこともできる(https://svelte.dev/repl)のでそちらで試してみてはいかがでしょうか?

ここまで読んでいただきありがとうございました