SvelteKitに挑戦してみる - またフレームワーク乗り換えか
SvelteKit、挑戦してみることにした
また新しいフレームワーク?
Vue.jsを学び始めたのがつい最近のようなのに、また新しいフレームワークに目が行ってしまいました。
今回はSvelteKitです。
正直、フロントエンドのフレームワーク戦争は少し疲れます。React、Vue、Angular、そして今度はSvelte。数年ごとに「これが最高だ」というものが変わるので、全部学んでいたらキリがありません。
でもSvelteはちょっと違って見えました。
Svelteが違う点
ReactやVueは仮想DOMを使います。状態が変わると新しい仮想DOMを作り、前の仮想DOMと比較して実際に変わった部分だけ更新する方式。これが効率的だとされていましたが、Svelteはまったく異なるアプローチを取ります。
コンパイル時にすべて処理する。
Svelteはビルド時にコンポーネントを最適化されたvanilla JavaScriptに変換します。ランタイムで仮想DOMの比較のようなことはしません。その結果、バンドルサイズが小さく実行速度が速くなります。
この概念を初めて聞いた時「ああ、そういうことができるんだ」と思いました。シンプルでありながら合理的なアプローチです。
SvelteKit = Svelte + フルスタック
SvelteKitはSvelteベースのフルスタックフレームワークです。Next.jsがReactのフレームワークであるように。
SSR(サーバーサイドレンダリング)、ルーティング、APIエンドポイントなどを標準で提供します。ファイルベースルーティングなので、ディレクトリ構造を見るだけでURLが分かります:
src/routes/
├── +page.svelte → /
├── about/+page.svelte → /about
└── blog/[slug]/+page.svelte → /blog/:slug
直感的で良いですね。
コードがスッキリしている
Svelteのコードを初めて見た時に驚いたのは、コード量の少なさです。
Reactで状態管理するにはuseState、useEffectなどのフックが必要で、VueでもRef、reactive、computed等のAPIが必要です。Svelteは?
<script>
let count = 0;
$: doubled = count * 2;
</script>
<button on:click={() => count++}>
{count} (doubled: {doubled})
</button>
変数を宣言するだけで終わりです。$:一つでリアクティブ宣言ができます。ボイラープレートがほぼありません。
学ぶ価値はあるか
正直、悩みどころです。
Vueもまだ深く使いこなせていない状態で、また新しいものを学ぶと、あれこれ触るだけで何も身につかない状況になりかねません。「何でもできるけど何も極められない」状態。
でも怠惰を克服する方法で書いたように、新しい技術を学ぶとモチベーションが戻ります。コーディングが楽しくなるには、知らないことが必要なのです。
まずは簡単なサイドプロジェクトをSvelteKitで作ってみるつもりです。本業のプロジェクトにいきなり導入するのはリスクがあるので、サイドプロジェクトで先に検証します。
また新しいフレームワークにハマるのか、それとも「やっぱりVueが楽だ」となるかは、やってみないと分かりません。