Circuitは、実行の各段階で構造化された検証とデータ保護を適用するため、スキーマ駆動型アーキテクチャに従います。
Circuitでは、JSON Schemaを使用して以下を定義します。
想定される項目とデータ型
検証ルールと制約
入力と出力の構造
項目レベルのデータ保護ポリシー
これにより、一貫性があり、安全で、コンプライアンスに準拠したワークフロー処理が可能になります。
スキーマは2つのレベルで設定できます。
Circuit入力スキーマ:実行開始前に受信JSONを検証します。検証に失敗した場合、Circuitは開始されません。
各ステートでは、以下に対応しています。
ステート入力スキーマ:ステートの実行前にステート入力JSONを検証します
ステート結果スキーマ:次のステートに渡す前にステート出力を検証します
検証に失敗した場合、ステートの実行は失敗し、エラーが実行ログに記録されます。
これらの制御は項目レベルで動作し、実行中に自動的に適用されます。
hide: true
APIレスポンスから項目を完全に削除します
保護の優先度が最も高くなります
内部システム項目や識別子に適しています
encrypt: true
データベースに保存する前に値を暗号化します
RetryまたはRerun時のみ復号されます
機密性の高い識別子、トークン、規制対象データを保護します
redact: true
値を固定のプレースホルダー(例:[REDACTED])に置き換えます
元の値は安全に保持されます
監査ログには、秘匿解除を実行したユーザーが記録されます
厳格に保護すべきPIIや機密データに適しています
mask: true
値を部分的に非表示にします(例:****)
機密データを保護しながら、制御された表示設定を可能にします
同じ項目に複数の保護ルールが適用されている場合、以下の順序で適用されます。
非表示 → 暗号化 → 秘匿化 → マスク
これにより、複数のルールが設定されている場合でも、予測可能で安全な動作が確保されます。
すべての実行コンテキストデータは、保存時の暗号化によって保護されます。
'encrypt': trueが指定された項目は、保存前に暗号化されます。
RetryまたはRerun時のみ復号されます。
アイドル状態および通常の実行状態でも、データは保護されたままです。
実行コンテキストはワークフローインスタンスごとに分離されます。
このアーキテクチャにより、機密データが不要に公開されることを防ぎます。
JSONデータからのスキーマ生成(自動生成)
プロパティ名の横にある展開アイコンをクリックして、次の追加の検証設定を行います。タイトルと説明
最小値/最大値
形式(例:メール)
列挙値
初期値
データ保護方法:非表示、暗号化、墨消し、マスク
入力で項目が指定されておらず、スキーマに初期値が定義されている場合、処理を続行する前に、システムがその項目に初期値を自動的に割り当てます。
これにより、次のことが保証されます。
不足している任意項目に、定義済みの値が設定されます
入力が不足していても、ワークフローが中断されずに継続します
プロパティを追加した後、変更をクライアントレベルで適用するには、[保存]をクリックします。
保存済みのプロパティを変更するには、編集してから[更新]をクリックします。
既存のすべてのプロパティを破棄して最初からやり直すには、[リセット]をクリックします。
確定したら、スキーマをデータベースに保持するために、サーキットで[保存]をクリックします。
スキーマのプロパティパネル内の[保存]をクリックしても、変更はクライアントレベルにのみ適用されます。設定を永続的に保存するには、サーキットでも[保存]をクリックする必要があります。
必須としてマークされたプロパティのみが、検証時に必須として扱われます。
この例では、最上位レベルでデータ保護が適用された従業員の主要項目を示します。
{'type': 'object','required': ['employeeId', 'fullName', 'メール', 'department'],'properties': {'employeeId': { 'type': 'integer', 'title': 'Employee ID', 'mask': true },'fullName': { 'type': 'string', 'title': 'Full Name' },'メール': { 'type': 'string', 'title': 'Work メール', 'encrypt': true },'department': { 'type': 'string', 'title': 'Department', 'redact': true },'salary': { 'type': 'number', 'title': 'Annual Salary', 'redact': true }}}
{'employeeId': '100423','fullName': 'Sarah Mitchell','department': 'Engineering','salary': '95000'}
{'employeeId': '######','fullName': 'Sarah Mitchell','メール': '[ENCRYPTED]','department': '[REDACTED]','salary': '[REDACTED]'}
この例では、従業員データ内の入れ子オブジェクトとして個人情報を設定し、両方のレベルにデータ保護を適用しています。
{'type': 'object','properties': {'fullName': { 'type': 'string', 'title': 'Full Name' },'メール': { 'type': 'string', 'title': 'Work メール', 'encrypt': true },'personalDetails': {'type': 'object','title': 'Personal Details','properties': {'phone': { 'type': 'string', 'title': 'Phone Number', 'hide': true },'address': { 'type': 'string', 'title': 'Home Address', 'redact': true }}}}}
{'fullName': 'Sarah Mitchell','personalDetails': {'phone': '+1-555-987-6543','address': '42 Maple Street, Austin, TX 78701'}}
}
{'fullName': 'Sarah Mitchell','メール': '[ENCRYPTED]','personalDetails': {'address': '[REDACTED]'}}
もしサーキットレベルのスキーマ検証に失敗すると、実行は開始されません。
確認事項。
必須項目
入力データの構造
データ型
もしステート入力スキーマの検証に失敗すると、ステートは実行されません。
確認事項。
ステートに渡された入力
入力パスの設定
必須項目
もしステートの出力がスキーマと一致しない場合、次のステートにデータを渡す前に失敗します。
確認事項。
出力の構造
項目名と型
結果パス
サーキットレベルの失敗→実行は開始されません
ステート入力の失敗→ステートは実行されません
ステート出力の失敗→データを渡す前にステートが失敗します
すべての失敗はデバッグ用にログに記録されます。
サーキットレベルのスキーマ→実行開始前に入力を検証します
ステートレベルのスキーマ→各ステップでデータを検証します
これにより、失敗が発生した場所を特定できます。
すべての検証エラーは実行ログで確認できます。
ログで確認できること。
失敗した項目の特定
不正なデータの追跡
「必須」として設定されている場合→検証に失敗します
「初期値」がある場合→自動的に適用されます
いいえ。「必須」として設定された項目のみが必須です。
よくある問題。
データ型が正しくない
必須項目が入力されていない
形式または値が無効