mcpField
I
iii-trigger-conditions

iii-trigger-conditions

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

iii-trigger-conditions について

iii エンジンのトリガーに真偽値の条件チェックを加えるスキルです。ハンドラー実行前にイベントを絞り込み、対応する各種トリガーで利用できます。

主な機能

  1. 01真偽値を返す条件関数
  2. 02全トリガータイプに対応
  3. 03条件が偽なら通知なくスキップ
  4. 04JavaScript、Python、Rust の例

活用シーン

  1. 01処理前のキューメッセージ選別
  2. 02HTTP トリガーでの認可確認
  3. 03状態イベントへの業務ルール適用

インストール

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

$npx skills add https://github.com/iii-hq/skills --skill iii-trigger-conditions

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

詳細

トリガー条件

類似例:ミドルウェアのガード、イベントフィルター

主な概念

タスクに合う場合は、以下の概念を使用してください。すべてのトリガーに条件が必要なわけではありません。

  • 条件関数は、ブール値(true または false)を返す登録済みの関数です。
  • エンジンはハンドラーの実行前に条件関数を呼び出します。true の場合にのみハンドラーが実行されます。
  • トリガー設定の condition_function_id を指定すると、どのトリガータイプにも条件を追加できます。
  • 条件関数は、ハンドラーが受け取るものと同じイベントデータを受け取ります。
  • http、queue、cron、state、stream、subscribe のすべてのトリガータイプで使用できます。

アーキテクチャ

トリガーが発火すると、エンジンはまずイベントデータを条件関数に渡して呼び出します。条件が true を返した場合、ハンドラーは通常どおり実行されます。false の場合、エラーや再試行を発生させずにハンドラーがスキップされます。

iii のプリミティブ

プリミティブ用途
registerFunction({ id }, handler)(条件)条件関数を登録します(ブール値を返します)
registerFunction({ id }, handler)(ハンドラー)ハンドラー関数を登録します
registerTrigger({ type, function_id, config: { condition_function_id } })条件ゲート付きのトリガーをバインドします

参照実装

完全な動作例(条件ゲート付きトリガー)については、../references/trigger-conditions.js を参照してください。

Python 版もあります:../references/trigger-conditions.py

Rust 版もあります:../references/trigger-conditions.rs ビジネスルール関数を使って、ハンドラーが処理する前にイベントをフィルタリングします。

よくあるパターン

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

  • registerFunction({ id: 'conditions::is-high-value' }, async (input) => input.new_value?.amount >= 1000) — 条件関数
  • registerFunction({ id: 'orders::notify-high-value' }, async (input) => { ... }) — ハンドラー関数
  • registerTrigger({ type: 'state', function_id: 'orders::notify-high-value', config: { scope: 'orders', key: 'status', condition_function_id: 'conditions::is-high-value' } }) — 条件付きでバインドします
  • 条件が true を返す — ハンドラーが実行されます
  • 条件が false を返す — ハンドラーが通知なくスキップされます
  • 条件関数 ID を整理しやすくするため、conditions:: プレフィックスを使用します

このパターンの応用

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

  • 条件ロジックをビジネスルール(しきい値の確認、ロールの検証、フィーチャーフラグ)に置き換えます。
  • 条件はすべてのトリガータイプで使用できます。HTTP トリガーでは認証ガードに、キュートリガーではメッセージのフィルタリングに使用します。
  • 条件関数はトリガーが発火するたびに実行されるため、軽量かつ高速に保ちます。
  • 条件を連鎖させるのではなく、複数のビジネスルールを1つの条件関数にまとめます。
  • 条件関数の内部で trigger() を呼び出し、状態やほかの関数を確認できます。

パターンの適用範囲

  • 関数やトリガーを一般的に登録する場合は、iii-functions-and-triggers を優先してください。
  • 状態変更トリガーに特化する場合は、iii-state-reactions を優先してください。
  • 呼び出しモード(sync/void/enqueue)については、iii-trigger-actions を優先してください。
  • 条件チェックによるトリガー実行のゲート制御が主な課題である場合は、iii-trigger-conditions を使用してください。

使用する場面

  • タスクの主な内容が、iii エンジンの iii-trigger-conditions に関する場合にこのスキルを使用します。
  • リクエストでこのパターン、または同等の実装が直接求められている場合に使用します。

適用範囲

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

コメント