iii-reactive-backend について
iii エンジンで状態駆動型アプリケーションを構築する開発者向けのリアクティブバックエンドのスキルです。スコープの変更トリガー、リアクティブな副作用、ストリームによるリアルタイム更新を扱います。
主な機能
- 01state 操作による CRUD
- 02スコープ変更時のトリガー
- 03リアクティブな副作用処理
- 04ストリームによるリアルタイム更新
- 05REST エンドポイントのパターン
活用シーン
- 01リアルタイムの ToDo アプリ構築
- 02接続中のクライアントへの状態変更の配信
- 03変更後の集計指標の更新
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ iii-hq/ skills --skill iii-reactive-backendインストール後、Claude Code で/iii-reactive-backendを入力して読み込まれたか確認します。
詳細
リアクティブバックエンド
類似:Convex、Firebase、Supabase、Appwrite
主な概念
タスクに適している場合は、以下の概念を使用します。すべてのリアクティブバックエンドで、ここに示すすべてのトリガーやリアルタイムの仕組みが必要になるわけではありません。
- 状態が「データベース」です —
state::set/get/update/delete/listで CRUD を行います - 状態トリガーは、スコープ内の値が変更されると自動的に発火します
- 副作用(通知、メトリクス、ストリームへのプッシュ)は、命令的ではなくリアクティブに接続します
- ストリームは、接続中のクライアントにリアルタイムの更新を配信します
アーキテクチャ
HTTP CRUD endpoints
→ state::set/update/delete (writes to 'todos' scope)
↓ (automatic state triggers)
→ on-change → stream::send (push to clients)
→ update-metrics → state::update (aggregate counters)
HTTP GET /metrics → reads from 'todo-metrics' scope
WebSocket clients ← stream 'todos-live'
使用する iii プリミティブ
| プリミティブ | 用途 |
|---|---|
registerWorker | ワーカーを初期化し、iii に接続します |
registerFunction | CRUD ハンドラーとリアクティブな副作用 |
trigger({ function_id: 'state::...', payload }) | データベースレイヤー |
registerTrigger({ type: 'state', config: { scope } }) | スコープ内のあらゆる変更に反応します |
trigger({ ..., action: TriggerAction.Void() }) | クライアントへの、応答を待たないストリームプッシュ |
registerTrigger({ type: 'http' }) | REST エンドポイント |
リファレンス実装
../references/reactive-backend.js に、完全に動作する例があります。CRUD エンドポイント、自動変更通知のためのストリーム、リアクティブな集計メトリクスを備えた、リアルタイムの ToDo アプリです。
一般的なパターン
このパターンを使うコードには、関連する場合、一般的に以下が含まれます。
registerWorker(url, { workerName })— ワーカーの初期化trigger({ function_id: 'state::set/get', payload: { scope, key, value } })— state モジュール経由の CRUDregisterTrigger({ type: 'state', function_id, config: { scope } })— 状態変更に対するリアクティブな副作用- リアクティブハンドラーでのイベント引数の分割代入:
async (event) => { const { new_value, old_value, key } = event } trigger({ function_id: 'stream::send', payload, action: TriggerAction.Void() })— クライアントへのライブ更新のプッシュconst logger = new Logger()— ハンドラー内での構造化ログ
このパターンの適用
タスクに当てはまる場合は、以下の適用方法を使用します。
- 状態トリガーはスコープ内のあらゆる変更で発火します —
event引数(new_value、old_value、key)を使って、何が変更されたかを判定します - 複数の関数が、同じスコープにそれぞれ独立して反応できます(on-change と update-metrics がどちらも
todosを監視する場合など) - ストリームクライアントは
ws://host:port/stream/{stream_name}/{group_id}経由で接続します - リアクティブ関数は高速に保ちます — 必要に応じて、負荷の高い処理をキューに移します
パターンの適用範囲
registerFunctionを介した外部またはレガシーな HTTP エンドポイントの登録がリクエストの中心である場合(特に{ path, id }のようなエンドポイントリストと反復処理がある場合)は、iii-http-invoked-functionsを優先します。- 状態スコープ、状態トリガー、ライブストリーム更新が要件の中心である場合は、
iii-reactive-backendを使用します。
使用する場面
- タスクの主な内容が、iii エンジンにおける
iii-reactive-backendの場合に、このスキルを使用します。 - リクエストでこのパターンまたは同等の実装が直接求められた場合に適用します。
適用範囲
- 無関係なタスクに対する汎用的な代替手段として、このスキルを使用しないでください。
- より具体的な iii スキルが適している場合は、このスキルを適用しないでください。
- このスキルの例を適用する前に、必ず環境と安全性の制約を確認してください。
コメント
Markdown 対応