mcpField
I
iii-state-management

iii-state-management

github.com/iii-hqデータ・データベース220 回インストール
リポジトリ

iii-state-management について

iii エンジンの開発者向けに、スコープ付きの共有キーバリューデータを扱うスキルです。状態の設定、取得、部分更新、一覧表示、削除の方法を説明します。

主な機能

  1. 01スコープ付き状態の読み書き
  2. 02スコープ内のキー一覧表示
  3. 03状態エントリーの削除
  4. 04ops による部分更新
  5. 05ファイルベースまたは Redis アダプター

活用シーン

  1. 01関数間での永続状態の共有
  2. 02セッションや注文データの管理
  3. 03非同期ジョブ完了後の結果保存

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/iii-hq/skills --skill iii-state-management

インストール後、Claude Code で/iii-state-managementを入力して読み込まれたか確認します。

詳細

状態管理

類似サービス:Redis、DynamoDB、Memcached

主な概念

タスクに適している場合は、以下の概念を使用してください。すべての状態操作で、すべての概念が必要とは限りません。

  • 状態は、組み込みのトリガー関数を介してアクセスするスコープ付きのキーと値のストアです
  • state::setは値を書き込み、state::getは値を読み取ります(キーが見つからない場合はnullを返します)
  • state::listはスコープ内のすべてのキーを取得し、state::deleteはキーを削除します
  • state::updateは、細かな変更を行うためのops配列を使用して部分マージを実行します
  • ペイロードでは、状態エントリーを指定するためにscope、key、valueを使用します
  • 状態はすべての関数間で共有されます。衝突を避けるため、意味のあるスコープ名を使用してください

アーキテクチャ

Function
  → trigger('state::set', { scope, key, value })
  → trigger('state::get', { scope, key })
  → trigger('state::update', { scope, key, ops })
  → trigger('state::delete', { scope, key })
  → trigger('state::list', { scope })
    → StateModule → KvStore / Redis adapter

使用する iii プリミティブ

プリミティブ目的
trigger({ function_id: 'state::set', payload })状態に値を書き込む
trigger({ function_id: 'state::get', payload })状態から値を読み取る
trigger({ function_id: 'state::list', payload })スコープ内のすべてのキーを一覧表示する
trigger({ function_id: 'state::delete', payload })状態からキーを削除する
trigger({ function_id: 'state::update', payload: { ops } })操作配列を使用して部分マージする

参照実装

共有スコープ内の状態エントリーを読み取り、書き込み、更新、削除する関数を含む、動作する完全な例については、../references/state-management.jsを参照してください。

Python版も利用できます:../references/state-management.py

Rust版も利用できます:../references/state-management.rs

よくあるパターン

このパターンを使用するコードには、該当する場合、通常次の要素が含まれます。

  • registerWorker(url, { workerName }) — ワーカーの初期化
  • trigger({ function_id: 'state::set', payload: { scope, key, value } }) — 状態を書き込む
  • trigger({ function_id: 'state::get', payload: { scope, key } }) — 状態を読み取る(見つからない場合はnullを返します)
  • trigger({ function_id: 'state::update', payload: { scope, key, ops } }) — 部分マージ
  • trigger({ function_id: 'state::list', payload: { scope } }) — キーを列挙する
  • trigger({ function_id: 'state::delete', payload: { scope, key } }) — エントリーを削除する
  • const logger = new Logger() — 構造化ログ

このパターンの適用

タスクに該当する場合は、以下の適用方法を使用してください。

  • ドメインに基づいてスコープに名前を付けます(例:user-sessions、order-data、config)
  • nullチェックを伴うstate::getを使用して、キーが見つからない場合に適切に処理します
  • 読み取り・変更・書き込みのサイクルの代わりに、opsを使用したstate::updateで部分更新を行います
  • iii-queue-processingと組み合わせて、非同期ジョブの完了後に結果を永続化します

エンジンの設定

StateModuleをiii-config.yamlで有効にし、KvStoreアダプター(ファイルベースまたはRedis)を設定する必要があります。注釈付きの完全な設定リファレンスについては、../references/iii-config.yamlを参照してください。

パターンの適用範囲

  • 状態変更時のリアクティブな副作用が必要なタスクでは、iii-state-reactionsを優先してください。
  • データ更新時のリアルタイムなクライアントプッシュが必要なタスクでは、iii-realtime-streamsを優先してください。
  • 主なニーズが永続的なキーと値のデータの読み取りと書き込みである場合は、iii-state-managementを使用してください。

使用する場面

  • タスクの主な内容がiiiエンジンにおけるiii-state-managementに関するものであれば、このスキルを使用してください。
  • リクエストでこのパターンまたは同等の実装が直接求められた場合に適用されます。

適用範囲

  • 無関係なタスクに対する汎用的なフォールバックとして、このスキルを使用しないでください。
  • より適切な iii スキルがある場合、このスキルを適用してはいけません。
  • このスキルの例を適用する前に、必ず環境と安全上の制約を確認してください。

コメント