svelte5-best-practices について
リアクティビティ、コンポーネント、イベント、TypeScript、SvelteKit、移行、性能に関する Svelte 5 の実践パターンをまとめたスキルです。現行の慣習を適用し、よくある誤りを避けるために役立ちます。
主な機能
- 01Runes とリアクティブ状態のパターン
- 02スニペットとコンポーネントプロパティ
- 03イベントとコールバックの規約
- 04TypeScript とジェネリックコンポーネント
- 05SvelteKit と性能に関する指針
- 06Svelte 4 の移行ノート
活用シーン
- 01Svelte 5 コンポーネントの作成
- 02Svelte 4 コードの移行
- 03SvelteKit のロード処理とフォームアクションの実装
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ ejirocodes/ agent-skills --skill svelte5-best-practicesインストール後、Claude Code で/svelte5-best-practicesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/events.mdmigration.mdperformance.mdrunes.mdsnippets.mdsveltekit.mdtypescript.md詳細
Svelte 5 のベストプラクティス
クイックリファレンス
| トピック | 使用する場面 | リファレンス |
|---|---|---|
| ルーン | $state、$derived、$effect、$props、$bindable、$inspect | runes.md |
| スニペット | スロットの置き換え、{#snippet}、{@render} | snippets.md |
| イベント | onclick ハンドラー、コールバックプロパティ、コンテキスト API | events.md |
| TypeScript | Props の型付け、ジェネリックコンポーネント | typescript.md |
| 移行 | Svelte 4 から 5 への移行、ストアからルーンへの移行 | migration.md |
| SvelteKit | Load 関数、フォームアクション、SSR、ページの型付け | sveltekit.md |
| パフォーマンス | ユニバーサルリアクティビティ、過剰なリアクティビティの回避、ストリーミング | performance.md |
基本的なパターン
リアクティブな状態
<script>
let count = $state(0); // Reactive state
let doubled = $derived(count * 2); // Computed value
</script>
コンポーネントの Props
<script>
let { name, count = 0 } = $props();
let { value = $bindable() } = $props(); // Two-way binding
</script>
スニペット(スロットの置き換え)
<script>
let { children, header } = $props();
</script>
{@render header?.()}
{@render children()}
イベントハンドラー
<button onclick={() => count++}>Click</button>
コールバックプロパティ(createEventDispatcher の置き換え)
<script>
let { onclick } = $props();
</script>
<button onclick={() => onclick?.({ data })}>Click</button>
よくある間違い
$stateを使わずにletを使う -$state()がない変数はリアクティブになりません- 派生値に
$effectを使う - 代わりに$derivedを使います on:click構文を使う - Svelte 5 ではonclickを使いますcreateEventDispatcherを使う - 代わりにコールバックプロパティを使います<slot>を使う -{@render}とスニペットを使います$bindable()を忘れる -bind:を動作させるには必須です- SSR でモジュールレベルの状態を設定する - リクエスト間で状態が漏れる原因になります
- Load 関数で await を逐次実行する - リクエストを並列で処理するには
Promise.allを使います
コメント
Markdown 対応