mcpField
I
iii-reactive-backend

iii-reactive-backend

github.com/iii-hq開発219 回インストール
リポジトリ

iii-reactive-backend について

iii エンジンで状態駆動型アプリケーションを構築する開発者向けのリアクティブバックエンドのスキルです。スコープの変更トリガー、リアクティブな副作用、ストリームによるリアルタイム更新を扱います。

主な機能

  1. 01state 操作による CRUD
  2. 02スコープ変更時のトリガー
  3. 03リアクティブな副作用処理
  4. 04ストリームによるリアルタイム更新
  5. 05REST エンドポイントのパターン

活用シーン

  1. 01リアルタイムの ToDo アプリ構築
  2. 02接続中のクライアントへの状態変更の配信
  3. 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 に接続します
registerFunctionCRUD ハンドラーとリアクティブな副作用
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 モジュール経由の CRUD
  • registerTrigger({ 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 スキルが適している場合は、このスキルを適用しないでください。
  • このスキルの例を適用する前に、必ず環境と安全性の制約を確認してください。

コメント