カスタムエレメントと通常のSvelteコンポーネントの違い

Svelteでは、コンポーネントを「通常のSvelteコンポーネント」として使う方法と、「Web Components(カスタムエレメント)」として使う方法の2つが存在します。それぞれの使い方と特徴の違いをまとめます。

✅ 使い方の違い

通常のコンポーネント

<!-- Parent.svelte -->
<script>
  import Widget from './Widget.svelte';
</script>

<Widget name="Svelte" />
svelte
  • Svelteアプリ内でのみ使用。
  • props の受け渡し、型補完が効く。
  • SSRやSvelteKitとの統合が容易。

カスタムエレメント(Web Components)

<!-- Stepper.svelte -->
<svelte:options customElement="my-stepper" />

<script>
  export let step = 0;
</script>

<p>現在のステップ: {step}</p>
svelte
<!-- 外部HTMLや別フレームワークで利用 -->
<my-stepper step="2"></my-stepper>
html
  • svelte:options で customElement 名を指定。
  • Shadow DOM によるスタイルのカプセル化。
  • 外部アプリケーション(React, Vue, HTML)でも使用可能。

📊 比較表

観点通常のSvelteコンポーネントカスタムエレメント(Web Component)
使用場所Svelte内任意のHTML環境
バインディングpropsで安全に渡す属性やDOMプロパティ経由
スタイリングスコープ付きCSSShadow DOMでカプセル化
SSR対応✅ 可能❌ 非対応
型補完・ツール連携✅ TypeScript対応良好❌ 限定的
ライフサイクルフックSvelteの独自APIWeb Componentsの仕様に準拠

💡 どちらを使うべき?

目的推奨方法
Svelteアプリ内で再利用通常のコンポーネント
他フレームワークやHTMLでも再利用したいカスタムエレメント
SSRしたい通常のコンポーネント
完全にスタイルを隔離したいカスタムエレメント

🧠 補足

  • カスタムエレメントは一種のWeb標準で、Svelteはそれに準拠した形で出力できます。
  • ただし、SEOやSSRを重視する場合は、通常のSvelteコンポーネントを選びましょう。
Last update at: 2025/08/14 07:39:43