Communityコーディング&開発github.com

cachesdev/svelte-deep-knowledge

Svelte ファイルの読み取り、編集、作成、または SvelteKit プロジェクトでの作業の前に常に使用します。誤った前提を排除するために作業開始前に適用します。モダン Svelte の定石的なガイダンスと落とし穴を含みます。

svelte-deep-knowledge とは?

このスキルは、Svelte / SvelteKit プロジェクトにおいて、開発者がよく陥る知識のギャップを事前に埋めるための総合ナレッジベースです。インストールされているパッケージのバージョン確認から始め、公式 MCP を用いた API 検証、非同期レンダリング、エラーバウンダリ、テンプレート機能、Rune や共有状態、ランタイムモジュールに至るまで、Svelte 5 および SvelteKit 3(2)の最新機能を網羅しています。特に、リモート関数、`{#await}` とバウンダリの使い分け、アタッチメント、宣言タグ、クラスバインディング、`$state` や `$derived` などの Rune の正しい使い方、SvelteMap や motion モジュールなど、実践的なパターンを具体的なバージョン番号とともに解説しています。SvelteKit 3 への移行手順や CSP、CSP レンダリング設定など、プロジェクト全体に影響する設定もカバーしており、このスキルを適用することで、API の誤用や古い知識に基づく実装ミスを防ぎます。対応プラットフォームは Svelte 5.57.3、SvelteKit 3.1.1 および 2.70.3 で検証済みです。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/cachesdev/svelte-deep-knowledge/tree/main/skills/svelte-deep-knowledge

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Svelte 深層知識

知識ギャップのインデックスとして使用します。計画立案および実装中は、公式の Svelte MCP に対して関連する API を確認してください。

2026-11-01 に Svelte 5.57.3、SvelteKit 3.1.1、SvelteKit 2.70.3 に対して検証済み。

インストールされているバージョンから始める

  1. パッケージのバージョンと Vite 設定を確認する。インストールされている Kit のメジャーバージョンと有効な実験的フラグに合わせてガイダンスを調整する。
  2. Svelte MCP の list-sections を呼び出し、続けて get-documentation で関連セクションを取得する。MCP と svelte.dev は Kit 3 のドキュメントを提供する。Kit 2 プロジェクトの場合は、sveltejs/kit リポジトリの version-2 ブランチの documentation/docs から該当ページを読む。
  3. Kit 3 プロジェクトおよび Kit 2 から Kit 3 への移行では、Kit 3 リファレンス を読む。Kit 2 プロジェクトでは、Kit 2 リファレンス を読む。
  4. 新規または編集した Svelte コンポーネント/モジュールに対して svelte-autofixer を実行し、該当する指摘事項を解決する。統合と型についてはプロジェクトのチェックを使用する。

新しい Svelte API、非同期レンダリング、アタッチメント、コンパイラツールの例については、Svelte リファレンス を読む。

リモート関数、バウンダリ、および await

実験的な非同期を採用する新しい SvelteKit アプリでは、コンポーネントデータに直接 await を使用するリモート関数と、ローディング/エラー UI のための細かいバウンダリを推奨する。svelte:boundary の配置は、サーバーでレンダリングする必要があるものに基づいて選択する。

  • experimental.remoteFunctions と compilerOptions.experimental.async を一緒に有効にする。公式のリモート関数セットアップには両方のフラグが必要。
  • load、フォームアクション、+server ルートは引き続きサポートされるが推奨されない。タスクに移行が含まれない限り、既存のアーキテクチャに従う。
  • .loading、.error、.current は引き続きサポートされるクエリ API。直接 await が推奨されるメカニズム。
  • レンダリングおよび命令型のコンテキストでは await query(args) を使用する。
  • {#await} はサポートされるが推奨されず、独自の Promise 状態動作を持つ。調整された非同期レンダリングには直接 await とバウンダリを使用する。{#await} の動作がタスクに合う場合はそのまま保持する。

MCP のセクション kit/remote-functions、svelte/await-expressions、svelte/svelte-boundary で確認する。

非同期レンダリングの動作

  • コンポーネントレベルの await は Svelte 5.36 で導入。非同期 SSR は 5.39 で導入された。await はトップレベルスクリプト、$derived、およびマークアップでサポートされる。
  • Svelte は非同期処理の解決中に依存する UI 更新を調整する。独立したテンプレート await 式は並行して実行される。スクリプト内の逐次的な await は依然としてウォーターフォールを発生させるので、その結果を待つ前に独立した処理を開始する。
  • バウンダリの pending スニペットは最初の作成時に表示される。そのバウンダリ内の後続の処理には $effect.pending() を使用する。そのカウントは子バウンダリを除外する。
  • SSR 中、pending を持つバウンダリはプレースホルダをレンダリングし、そのコンテンツをスキップする。そのようなバウンダリの外側にある await 式は await render(...) が完了する前に解決される。初期 HTML に必要なコンテンツはそれに応じて配置する。この API はまだストリーミング SSR を提供しない。
  • 5.41 で追加された $state.eager(value) は、調整された更新を待つ間に即時のフィードバックを公開する。アクティブなナビゲーションインジケータなど、ユーザーフィードバックに使用する。
  • tick() は保留中の状態変更を待つ。5.36 で追加された settled() は、それらによって引き起こされる非同期処理と結果として生じる DOM 更新も待つ。

エラーバウンダリ

  • <svelte:boundary> は、レンダリング/エフェクトの失敗に対して failed(error, reset) および onerror(error, reset) をサポートする。イベントハンドラや切り離された非同期エラーは呼び出しサイトで処理する。
  • Svelte 5.53 以降、failed スニペットは SSR 中のエラーもキャッチする。SvelteKit では、エラーは最初に handleError を通過するため、スニペットはサニタイズされた App.Error を受け取る。onerror は失敗したバウンダリがハイドレーションするときに実行される。
  • Kit 3 はレンダリングエラーを handleError 経由で最も近い +error.svelte に送信し、これがバウンダリとして機能する。非同期クライアント handleError には compilerOptions.experimental.async が必要。Kit 2.54+ では同じ統合に experimental.handleRenderingErrors が必要。
  • バウンダリドキュメントの古い「5.51以降」という注釈は公開されているチェンジログと矛盾する。導入バージョンとしては 5.53 を使用し、SSR/ハイドレーションの問題を診断するときは現在のパッチを確認する。

テンプレート機能

宣言タグ、Svelte 5.56+

  • マークアップローカル変数には {let ...} および {const ...} を推奨する。{@const} はレガシーとしてドキュメント化されており、古いプロジェクトでは引き続き使用できる。
  • プレーンな宣言は値を初期化する。リアクティビティには明示的な rune を使用する: {let count = $state(0)} および {const doubled = $derived(count * 2)}。
  • リアクティブな {@const area = width * height} を移行するには {const area = $derived(width * height)} が必要。プレーンな {const area = width * height} はリアクティブではない。
  • 宣言は要素/ブロック内でレキシカルスコープを持ち、外側の変数をシャドウでき、使用より前に記述する。複数の宣言子がサポートされる。

アタッチメント

  • Svelte 5.29+ では、新しい要素統合には {@attach ...} を推奨する。アタッチメントからクリーンアップを返す。
  • アタッチメントはリアクティブな読み取りを追跡し、依存関係が変更されると再実行される。falsy な値はそれらを無効にする。子エフェクト内のゲッターを介して変化するオプションを読み取ることで、高価なセットアップの繰り返しを避ける。
  • コンポーネントラッパーは、アタッチメントを含むプロパティを目的の要素に転送する必要がある。createAttachmentKey() はスプレッドオブジェクト内のアタッチメントをサポートする。
  • fromAction(action, () => argument) は既存のアクションの動作を保持する。その第2引数はゲッターである。このヘルパーはアタッチメント自体より後の 5.32 で導入された。

クラス、バインディング、HTML

  • class は 5.16 以降、ネストされた配列とオブジェクトを受け入れる。svelte/elements の ClassValue は 5.19 以降、ラッパープロパティで利用可能。
  • 関数バインディングは 5.9 以降 bind:value={get, set} を使用する。読み取り専用バインディングにはゲッターとして null を使用する。
  • 数値入力は空または無効な場合に undefined を生成することがある。チェックボックスの状態は bind:checked と bind:indeterminate を使用でき、ラジオグループは bind:group を使用する。
  • 入力は 5.6 以降 defaultValue/defaultChecked をサポートする。選択は 5.57 以降 defaultValue をサポートし、フォームリセット動作を含む。デフォルトを指定するときはバインディングの優先順位を確認する。
  • カスタマイズ可能なネイティブセレクトは 5.47 以降サポートされる。カスタムセレクトウィジェットを置き換える前に、ブラウザのサポートとドキュメント化された <selectedcontent> パターンを確認する。
  • 属性間の JavaScript 形式のコメントは 5.53 以降有効: `<div /* 説明 */ class=

関連スキル