Runesシステム
Svelte 5で導入されたRunesシステムは、リアクティビティをより明示的で予測可能にする新しいプリミティブです。従来の暗黙的なリアクティビティから、明示的な宣言へと進化し、TypeScriptとの統合も大幅に改善されました。
Runesシステムとは
Runesは、Svelte 5の中核となる新しいリアクティビティAPIです。$
記号で始まる特別な関数として提供され、コンパイル時に最適化されたコードに変換されます。これにより、より直感的で型安全なリアクティブプログラミングが可能になりました。
このセクションで学ぶこと
🎯
Runesシステム入門 →
Runesの基本概念と従来のリアクティビティとの違いを理解します。
- なぜRunesが必要なのか
- Svelte 4からの移行
- 基本的な構文と動作原理
💾
$stateルーン →
リアクティブな状態を宣言する最も基本的なルーンを学びます。
- 基本的な値の状態管理
- オブジェクトと配列の扱い
- 深いリアクティビティ
- TypeScriptとの統合
🔄
$derivedルーン →
他の値から自動的に計算される派生値を作成します。
- 計算プロパティの定義
- 複数の依存関係
- メモ化と最適化
- 非同期派生値
⚡
$effectルーン →
リアクティブな値の変更に応じて副作用を実行します。
- 副作用の自動実行
- クリーンアップ処理
- 依存関係の自動追跡
- 実行タイミングの制御
📦
$propsルーン →
コンポーネントのプロパティを型安全に定義します。
- Props の宣言と型定義
- デフォルト値の設定
- 分割代入とrest props
- TypeScript統合
🔗
$bindableルーン →
親子コンポーネント間で双方向バインディングを実現します。
- 双方向データフロー
- フォーム要素との連携
- カスタムコンポーネントでの使用
- バインディングの制約
🔍
$inspectルーン →
開発時のデバッグを効率化する値監視ツール。
- リアクティブ値の自動監視
- コンソールへの出力
- 開発環境でのみ動作
- 本番ビルドで自動削除
基本的な使い方
// カウンターの例
let count = $state(0);
let doubled = $derived(count * 2);
$effect(() => {
console.log(`現在のカウント: ${count}`);
});
function increment() {
count++;
}
typescript
このシンプルな例は、Runesシステムの核心を示しています:
$state
- リアクティブな状態を宣言$derived
- 他の値から自動計算される派生値$effect
- 値の変更に応じて実行される副作用
なぜRunesが必要なのか
1. 明示的なリアクティビティ
従来のSvelteでは、let
宣言した変数が自動的にリアクティブになりましたが、これは時に混乱を招きました。Runesを使うことで、どの値がリアクティブなのかが一目で分かります。
2. TypeScriptとの完全な統合
Runesは型推論が完全に動作し、IDEのサポートも充実しています。これにより、型安全なアプリケーション開発が容易になりました。
3. パフォーマンスの向上
コンパイル時に最適化されたコードが生成され、実行時のオーバーヘッドが最小限に抑えられます。
Runesの種類と役割
ルーン | 役割 | 使用頻度 |
---|---|---|
$state | リアクティブな状態を作成 | ⭐⭐⭐ |
$derived | 計算値を作成 | ⭐⭐⭐ |
$effect | 副作用を実行 | ⭐⭐⭐ |
$props | プロパティを定義 | ⭐⭐⭐ |
$bindable | 双方向バインディング | ⭐⭐ |
$inspect | デバッグ用監視 | ⭐⭐ |
$state.frozen | 不変状態 | ⭐ |
$derived.by | 複雑な派生値 | ⭐ |
学習の進め方
- 基礎を固める - まず
$state
と$derived
を理解 - 副作用を学ぶ -
$effect
で外部システムとの連携 - コンポーネント間通信 -
$props
と$bindable
- 高度な使い方 - 実践編で複雑なパターンを習得
次のステップ
準備ができたら、 Runesシステム入門 から始めましょう。従来のSvelteとの違いや、なぜRunesが必要なのかを詳しく解説します。