Svelte
エンジニアのためのWebチートシート
Svelteはコンパイラベースのフロントエンドフレームワークです。 Svelte 5のRunes($state, $derived, $effect等)による新しいリアクティビティシステムを中心に、テンプレート構文、バインディング、トランジション、SvelteKitの基本をチートシートにまとめました。
コンポーネント基本
コンポーネント構造
script(ロジック)、マークアップ(HTML)、style(CSS)の3セクションで構成されます。
TypeScript対応
lang="ts" でTypeScriptを使用できます。
スコープドCSS
スタイルはコンポーネントにスコープされます。:global() でグローバルスタイルを適用できます。
Runes(ルーン)
$state - リアクティブ状態
リアクティブな状態を宣言します。オブジェクト・配列はディープリアクティブです。
$derived - 派生状態
他の状態から自動計算される値です。メモ化され、依存値が変わった時のみ再計算されます。
$effect - 副作用
マウント時と依存値の変更時に実行されます。クリーンアップ関数を返せます。
$props - プロパティ
親コンポーネントから渡されるプロパティを受け取ります。
$bindable & $inspect
$bindableは双方向バインディング可能なプロパティ、$inspectはデバッグ専用のルーンです。
テンプレート構文
{#if} & {#each}
条件分岐とリストレンダリングです。
{#await} & {#key}
Promise処理と値変更時の再生成です。
{#snippet} & {@render}
再利用可能なテンプレート片の定義とレンダリングです(Svelte 5でslotを置換)。
イベント & バインディング
イベントハンドリング
Svelte 5ではHTML標準のイベント属性(onclick等)を使用します。
バインディング
bind:ディレクティブによるフォーム要素やDOM参照への双方向バインディングです。
コンポーネントイベント
Svelte 5ではコールバックプロパティでイベントを伝播します。
トランジション & アニメーション
トランジションの使い方
要素の出入りにアニメーションを適用します。
組み込みトランジション一覧
| トランジション | 効果 | 主要パラメータ |
|---|---|---|
| fade | 不透明度 | delay, duration |
| blur | ぼかし + 不透明度 | amount, duration |
| fly | 移動 + 不透明度 | x, y, duration |
| slide | スライド | axis, duration |
| scale | 拡大縮小 | start, duration |
| draw | SVG描画 | speed, duration |
| crossfade | 要素間の遷移 | fallback, duration |
アニメーション(keyed each内)
{#each}でキーを使う場合、要素の並べ替えをアニメーションできます。
ストア & 状態共有
共有状態(Svelte 5推奨)
.svelte.js ファイルでrunesを使い、コンポーネント間で状態を共有します。
従来のストア
writable/readable/derivedストアは引き続き利用可能です。
特別な要素 & ディレクティブ
特別な要素
svelte:window、svelte:head 等のシステム要素です。
class & style ディレクティブ
条件付きクラスとインラインスタイルの設定です。
SvelteKit ルーティング
ファイルベースルーティング
src/routes/ ディレクトリ構造でルーティングが決まります。
レイアウト
共通レイアウトの定義です。children スニペットで子ページを挿入します。
SvelteKit データ & フォーム
ロード関数
サーバー/クライアントでのデータ取得です。
フォームアクション
サーバーサイドのフォーム処理です。プログレッシブエンハンスメント対応。
APIルート
+server.ts でREST APIエンドポイントを作成します。