spacetimedb-views について
SpacetimeDBを使う開発者向けに、ビューで派生データをクライアントへ公開する方法を案内するスキルです。ビューの設計、クエリの選択、参考資料を扱います。
主な機能
- 01公開・読み取り専用ビューの定義
- 02呼び出し元に応じたコンテキスト選択
- 03クエリビルダーによるフィルターと結合
- 04読み取り範囲の制限とインデックス参照
活用シーン
- 01フィルター・結合済みデータの公開
- 02購読者間でのマテリアライズ結果の共有
- 03ユーザー固有データの照会
- 04頻繁に購読されるビューのインデックス確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ danmossa/ spacetimedb-skills --skill spacetimedb-viewsインストール後、Claude Code で/spacetimedb-viewsを入力して読み込まれたか確認します。
同梱ファイルreferences/functions-views.md
詳細
SpacetimeDB ビューを通じて公開する派生データには、このスキルを使用します。
ビューの基本パターン
ビューは、読み取り専用の派生データをクライアントに公開します。別のテーブルに行を複製するのではなく、サーバー側で計算する必要があるフィルタリング済みまたは結合済みの結果に使用します。
TypeScript のビューの形式:
export const high_scorers = spacetimedb.anonymousView(
{ name: "high_scorers", public: true },
t.array(players.rowType),
(ctx) =>
ctx.from.players
.where((p) => p.score.gte(1000n))
.where((p) => p.name.ne("BOT")),
);
設計ルール
- ビューは公開し、明示的な名前を付ける必要があります。
- ビューは読み取り専用です。書き込みにはリデューサーを、状態の保存にはテーブルを使用します。
- すべての呼び出し元が同じ結果を見る場合は、
anonymousView/AnonymousViewContextを使用します。SpacetimeDB は、サブスクライバー間で同じマテリアライズ済み結果を共有できます。 - 呼び出し元に応じて結果が変わる場合(「自分のインベントリ」やプライベートメッセージなど)に限り、ユーザーごとの
ViewContextを使用します。 - 読み取り対象は小さく保ちます。フィルターや結合には、インデックス付き検索またはモジュール側のクエリビルダーを優先してください。
- ビューで
.iter()をデフォルトで使用しないでください。クエリビルダーの構文、.iter()の制約、主キーの推論については、リファレンスを参照してください。
リファレンスマップ
| 必要な情報 | 参照先 |
|---|---|
| ビューの定義と例 | references/functions-views.md |
ガイダンス
- 重複した保存済み行ではなく、派生データやフィルタリング済みデータが必要な場合は、ビューを使用します。
- 式やクエリの構文については、SQL リファレンスを確認してください。
- サブスクリプションが頻繁に発生する可能性のあるビューを追加する前に、テーブルのインデックスを確認してください。
コメント
Markdown 対応