ECA: Event - Condition - Action
イベント、条件、アクションをグラフィカルなBPMNモデラーインターフェースで組み合わせ、条件付きで実行されるアクションセットを構築できる、Drupal向けの強力なノーコードルールエンジンです。
eca
インストール
composer require 'drupal/eca:^3.0'
composer require 'drupal/eca:^2.1'
概要
ECA(Event - Condition - Action)は、Drupal向けの強力で汎用性が高く、ユーザーフレンドリーなルールエンジンです。サイト管理者がコードを書くことなく、複雑な自動化ワークフローを構築できるようにします。コアモジュールは、イベント・条件・アクションのプラグインを検証し実行するプロセッサです。
グラフィカルユーザーインターフェースBPMN.iOと統合されたECAは、条件付きで実行されるアクションセットを構築するための堅牢なシステムを提供します。ECAはすべてのDrupalイベントに対してトリガーされ、設定されたモデルに対してこれらのイベントを検証し、現在のイベントに一致するすべてのモデルを処理します。Drupal Rulesと同様に、ECAはDrupal Coreの既存コンポーネント(イベントとアクション)を活用しながら、条件用の独自のプラグインマネージャーを提供します。
3つのコンポーネント(イベント、条件、アクション)はすべてプラグインとして利用可能で、他のモジュールによって簡単に拡張できます。ECAモデルは設定として保存されるため、管理UI、Drush、または設定管理を通じてインポート・エクスポートが可能です。
Features
- モデラー、イベント、条件、アクション用のプラグインマネージャーと拡張可能なアーキテクチャ
- 視覚的なワークフロー設計のためのBPMN.iOグラフィカルモデラーとの統合
- すべてのDrupal CoreアクションおよびContribモジュールアクションとの完全な統合
- すべてのイベント、条件、アクション設定における広範なTokenサポート
- 複雑なデータ構造を扱うためのTypedDataサポート
- ワークフロー実行における無限ループを防ぐ組み込みの再帰防止機能
- 頻繁にトリガーされるイベントのパフォーマンス向上のためのキャッシュサポート
- リクエスト間で永続的なデータを保持するためのStateおよびKey-Valueストレージ操作
- 遅延実行およびスケジュールされたタスク実行のためのQueue操作
- 動的なルート/URL処理のためのカスタムエンドポイント作成
- イベントの特性付けと整理のためのタグ付けシステム
- エクスポート/インポートやバージョン管理が容易な設定エンティティとして保存されるモデル
- 特定のユーザーアカウントとしてモデルを実行するサポート
- 特権操作のためのサービスアカウント切り替え
- Cron形式の頻度表記によるCronイベントサポート
- ECAアクションによるカスタムフォームのレンダリングと操作
- エンティティ参照およびオプションフィールドの選択カスタマイズ
Use Cases
自動コンテンツ公開ワークフロー
コンテンツがレビュー用に送信されたときに自動的にメール通知を送信し、コンテンツタイプに基づいてレビュアーを割り当て、承認後にコンテンツを公開するワークフローを作成します。コンテンツエンティティイベント(presave、update)をユーザーロール条件およびメール送信アクションと組み合わせて使用します。
動的フォーム変更
ユーザーロールやフィールド値に基づいてフォームを変更します。例えば、匿名ユーザーに対して特定のフォームフィールドを非表示にしたり、カスタムバリデーションルールを追加したり、他のフィールド値に基づいてフィールドを自動入力したりします。Form APIイベントと条件を使用します。
カスタムAPIエンドポイント
Endpointサブモジュールを使用して、コードを書かずにRESTライクなカスタムエンドポイントを作成します。JSONデータを返すルート、フォーム送信を処理するルート、外部サービスと統合するルートを定義します。アクセス制御とレスポンス構築はすべてECAモデルで行います。
スケジュールされたコンテンツ操作
頻度表記付きのCronイベントを使用して、ダイジェストメールの送信、古いコンテンツのアーカイブ、統計の更新、外部システムとのデータ同期などのスケジュールされたタスクを実行します。
エンティティアクセス制御
Drupalの標準パーミッションを超える複雑なアクセス制御ロジックを実装します。フィールド値、ユーザープロパティ、時間帯、またはカスタム条件に基づいてエンティティへのアクセスを許可または拒否します。
ユーザー登録の自動化
ウェルカムメール、登録データに基づくロール割り当て、プロファイル完了リマインダー、外部CRMシステムとの統合を含むユーザー登録ワークフローを自動化します。
コンテンツモデレーション通知
コンテンツの状態が変更されたときに、遷移タイプと関係するユーザーに基づいてカスタマイズされたメッセージで、コンテンツ作成者と編集者に通知を送信します。
動的メニュー生成
Menuサブモジュールを使用して、ユーザーコンテキスト、コンテンツの可用性、または外部条件に基づいてメニュー項目を変更します。
Cache管理
関連コンテンツが変更されたときに特定のCacheをクリアするインテリジェントなCache無効化戦略を実装し、コンテンツの鮮度を確保しながらサイトパフォーマンスを向上させます。
Queueベースの処理
重い処理タスクをバックグラウンド実行用のQueueにオフロードし、バッチインポートや一括更新などの操作でのタイムアウト問題を防ぎ、ユーザーエクスペリエンスを向上させます。
Tips
- ほとんどのユースケースではECA BaseとECA Contentサブモジュールから始め、必要に応じて他を追加してください。
- 開発中は詳細な実行情報を確認するためにデバッグログレベル(7)を使用してください。
- 本番環境にデプロイする前に、開発環境でECAモデルをテストしてください。
- モデルを設定としてエクスポートし、適切なデプロイのためにバージョン管理にコミットしてください。
- 保守性を向上させるために、モデル内のイベント、条件、アクションに意味のあるラベルを使用してください。
- カスタムイベントシステムを活用して、複雑なワークフローを複数のECAモデルにモジュール化してください。
- ワークフロー内のアクション間でデータを渡すために、一貫してTokenを使用してください。
- タイムアウト問題を防ぐために、長時間実行されるタスクにはQueue操作の使用を検討してください。
- https://ecaguide.org のECA Guideでは、包括的なドキュメント、チュートリアル、サンプルモデルが提供されています。
Technical Details
Admin Pages 1
/admin/config/workflow/eca/settings
ログレベル、ドキュメントドメイン、ユーザー実行設定、依存関係計算オプションを含むECAのグローバル設定を構成します。
権限 1
Hooks 1
hook_eca_token_data_provider
ECAにカスタムTokenデータを提供するためのTokenデータプロバイダを登録します。
Drush Commands 3
drush eca:subscriber:rebuild
サブスクライブされたイベントの状態を再構築します。ECAモデルがイベントに正しく反応しない場合に使用します。
drush eca:doc:plugins
すべてのECAプラグイン(イベント、条件、アクション)のドキュメントをエクスポートします。開発モジュール専用。
drush eca:doc:models
モデルファイルとレシピを含むすべてのECAモデルのドキュメントをエクスポートします。開発モジュール専用。
Troubleshooting 6
「drush eca:subscriber:rebuild」を実行してイベントサブスクリプション状態を再構築します。また、ECAモデルが有効であること、イベントが正しいエンティティタイプ/バンドルで正しく設定されていることを確認してください。
ECAには組み込みの再帰防止機能があります。再帰エラーが発生する場合は、循環イベントトリガー(例:保存イベントが別の保存をトリガー)がないかモデルを確認してください。条件を使用してサイクルを断ち切るか、再帰しきい値パラメータ'eca.max_recursion_level'を増やしてください。
Tokenが角括弧で正しくフォーマットされていることを確認してください。現在のコンテキストにTokenが存在することを確認してください。デバッグログ(ログレベル7)を有効にして、各実行ステップで利用可能なTokenを確認してください。
ECAログでエラーメッセージを確認してください。すべての必要な条件が満たされていることを確認してください。依存するTokenがアクション設定で使用される前に値を持っていることを確認してください。
Endpointサブモジュールが有効であることを確認してください。エンドポイントにはアクセスイベント(アクセスを許可する)とレスポンスイベント(コンテンツを構築する)の両方が必要です。エンドポイントモデルを作成した後、すべてのCacheをクリアしてください。
Cron頻度の構文がCron表記に従っていることを確認してください。Drupal Cronが実行されていることを確認してください。最初の実行はモデルが保存された後にスケジュールされるため、新しいモデルはすぐには実行されません。
Security Notes 6
- 「administer eca」パーミッションは大きな権限を付与します - 信頼できる管理者にのみ割り当ててください。
- 特定のユーザーとして実行されるモデル(設定経由)は通常のパーミッションチェックをバイパスします - 注意して使用してください。
- サービスアカウント機能は、必要なパーミッションのみを持つ専用アカウントを使用すべきです。
- カスタムエンドポイントには明示的なアクセス設定が必要です - デフォルトで保護されていると仮定しないでください。
- ログ内のToken値には機密データが含まれる可能性があります - ECAログへのアクセスを適切に制限してください。
- 本番サイトでインポートしたモデルを有効にする前に、慎重に確認してください。