iii-state-management について
iii エンジンの開発者向けに、スコープ付きの共有キーバリューデータを扱うスキルです。状態の設定、取得、部分更新、一覧表示、削除の方法を説明します。
主な機能
- 01スコープ付き状態の読み書き
- 02スコープ内のキー一覧表示
- 03状態エントリーの削除
- 04ops による部分更新
- 05ファイルベースまたは Redis アダプター
活用シーン
- 01関数間での永続状態の共有
- 02セッションや注文データの管理
- 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 スキルがある場合、このスキルを適用してはいけません。
- このスキルの例を適用する前に、必ず環境と安全上の制約を確認してください。
コメント
Markdown 対応