Rules
サイト管理者が発生するイベントに基づいて条件付きで実行されるアクションを定義できるビジネスルールエンジン(ECAルール)。
rules
インストール
composer require 'drupal/rules:^4.0'
概要
Rulesモジュールは、Drupalサイトで発生するイベントに基づいてアクションを自動化するための強力で柔軟なフレームワークを提供します。Event-Condition-Action(ECA)パターンを使用して、サイト管理者はコードを書くことなく高度なビジネスロジックを作成できます。
Rulesは2つの主要な概念で動作します:特定のイベント(コンテンツの保存、ユーザーログイン、cron実行など)が発生したときに自動的にトリガーされるリアクションルールと、他のルールから呼び出したりプログラムで実行できる再利用可能なルールセットであるコンポーネントです。
このモジュールは、多数の組み込みイベント(EntityのCRUD、ユーザーアクション、システムイベント)、条件(データ比較、Entityチェック、ユーザーロール検証)、アクション(メール送信、Entity変更、メッセージ表示、ページリダイレクト)を含む広範なPluginシステムを提供します。開発者はカスタムPluginでこれらを拡張できます。
Rulesは型付きデータを使用した洗練されたコンテキストとデータ選択システムを備えており、'node.uid.entity.name.value'のようなセレクターを通じて複雑なデータ操作が可能です。モジュールには画面上のログ記録とシステムログ統合による包括的なデバッグ機能が含まれています。
Features
- Drupalイベント(Entityの保存、削除、ユーザーログイン/ログアウト、cron、ページ表示)でトリガーされるリアクションルールによるイベント駆動型自動化
- AND/ORコンテナ、否定のサポート、複雑なネストされた条件による条件ロジック
- メール送信、EntityのCRUD操作、ユーザー管理、ページリダイレクト、システムメッセージを含む豊富なアクションライブラリ
- 他のルールやプログラムから呼び出せる再利用可能なルールコンポーネント
- 型付きデータパスを使用してネストされたEntityデータにアクセスし操作するためのデータセレクターシステム
- 現在の日付、現在のパス、サイト情報のための組み込みコンテキストプロバイダー
- 設定可能な詳細度とオプションのシステムログ統合によるデバッグログ
- Configuration Managementを介したルールのインポート/エクスポート機能
- コマンドラインからルールを管理するためのDrushコマンド
- Entityイベントのためのバンドル固有のイベントフィルタリング
- カスタムイベント、条件、アクションのための拡張可能なPluginアーキテクチャ
- パフォーマンスのためにEntityの保存をバッチ処理する自動保存機能
Use Cases
ユーザー登録時にウェルカムメールを送信
User Entityにフィルタリングされた'新しいEntityの保存後'でトリガーされるリアクションルールを作成します。'メールを送信'アクションを追加し、'宛先'フィールドに新規ユーザーのメール、ウェルカム件名、[user:display-name]などのTokenを使用したパーソナライズされたメッセージ本文を設定します。
コンテンツ公開時に管理者に通知
Node Entity用の'Entityの更新後'でトリガーされるリアクションルールを作成します。'Nodeが公開済み'条件を追加し、オプションでコンテンツタイプでフィルタリングします。'administrator'ロールをターゲットにした'ロールのユーザーにメールを送信'アクションを追加します。
プロフィールフィールドに基づく自動ユーザーロール割り当て
User Entity用の'Entityの更新後'でリアクションルールを作成します。プロフィールフィールドの値(例:確認ステータス)をチェックする条件を追加します。条件が満たされたときに適切なロールを付与する'ユーザーロールを追加'アクションを追加します。
ロールに基づくログイン後のユーザーリダイレクト
'ユーザーがログインした'でトリガーされるリアクションルールを作成します。異なるロールの'ユーザーがロールを持つ'をチェックする条件を追加します。'ページリダイレクト'アクションを使用して管理者をダッシュボードに、一般ユーザーをプロフィールに送信します。
特定のキーワードを含むコンテンツを非公開
Node Entity用の'Entityの保存前'でリアクションルールを作成します。本文フィールドに禁止ワードが含まれているかをチェックする'テキスト比較'条件を追加します。'コンテンツを非公開'アクションと著者に通知する'メッセージを表示'を追加します。
Cron経由のスケジュールされたコンテンツアクション
'Cronメンテナンスタスクが実行された'でトリガーされるリアクションルールを作成します。'フィールドでEntityを取得'を使用して条件に一致するコンテンツ(例:期限切れの日付)を見つけます。結果をループして非公開や通知送信などのアクションを実行します。
再利用可能な通知コンポーネントを作成
ユーザーとメッセージをContextとして受け入れるRulesコンポーネントを作成します。メール送信と画面上メッセージを表示するアクションを設定します。複数のリアクションルールからこのコンポーネントを参照して一貫した通知動作を維持します。
ログイン失敗後にIPアドレスをBAN
'システムログエントリが作成された'でトリガーされるリアクションルールを作成します。ログメッセージでログイン失敗パターンをチェックする条件を追加します。'IPアドレスをBANする'アクション(Banモジュールが必要)を使用して繰り返し違反者をブロックします。
Tips
- 新しいルールを開発するときはデバッグログを有効にして実行フローを理解する
- Drushコマンドを使用して利用可能なイベント、条件、アクションを素早く一覧表示する
- 一般的なアクションシーケンスのための再利用可能なコンポーネントを作成して一貫性を維持する
- 条件でフィルタリングするよりもパフォーマンスの良いバンドル固有のイベント(例:'Article型のNodeの保存後')を使用する
- データセレクターのオートコンプリートは非常に役立つ - Tabキーを押して利用可能なパスを探索する
- 条件の順序を考慮する:高コストなチェックを短絡するために、素早く評価できる条件を最初に置く
- 'すぐに強制保存'は控えめに使用する - ルール終了時のバッチ保存の方が効率的
- ビジネスロジックをバージョン管理するためにConfiguration Management経由でルールをエクスポートする
- 本番環境にデプロイする前に開発環境でルールを徹底的にテストする
Technical Details
Admin Pages 5
/admin/config/workflow/rules
関連するイベント、ステータス(有効/無効)と共にすべての設定済みリアクションルールを一覧表示し、ルールの追加、編集、削除、有効化、無効化の操作を提供します。Configuration Managementを介したルールのインポートおよびエクスポートへのクイックリンクが含まれます。
/admin/config/workflow/rules/components
すべての再利用可能なルールコンポーネントを一覧表示します。コンポーネントは他のルールから呼び出したりプログラムで実行できるルールセットです。入力コンテキスト要件を定義し、出力コンテキストを提供できます。
/admin/config/workflow/rules/settings
システムログの詳細度や開発用のデバッグログオプションなど、Rulesモジュールのグローバル設定を構成します。
/admin/config/workflow/rules/reactions/add
新しいリアクションルールを作成するフォーム。少なくとも1つのトリガーイベントを選択する必要があります。
/admin/config/workflow/rules/reactions/edit/{rules_reaction_rule}
イベント管理、AND/ORロジックによる条件構築、アクション設定を備えた包括的なルール編集インターフェース。ネストされた条件とドラッグアンドドロップによる順序付けを持つ複数のアクションをサポートします。
権限 5
Hooks 3
hook_rules_action_info_alter
Rules Action Pluginの定義を変更します。
hook_rules_condition_info_alter
Rules Condition Pluginの定義を変更します。
hook_rules_event_info_alter
Rules Event Pluginの定義を変更します。
Drush Commands 10
drush rules:list
サイトのすべてのアクティブおよび非アクティブなルールを一覧表示します。タイプでフィルタリングできます。
drush rules:enable
無効なリアクションルールを有効にします。
drush rules:disable
有効なリアクションルールを無効にします。
drush rules:delete
ルールまたはコンポーネントを完全に削除します。
drush rules:export
単一のルール設定をYAML形式でエクスポートします。
drush rules:revert
ルールを元のモジュール提供の状態に戻します。
drush rules:events
カテゴリ別にグループ化されたすべての利用可能なRulesイベントのリストを表示します。
drush rules:conditions
カテゴリ別にグループ化されたすべての利用可能なRules条件のリストを表示します。
drush rules:actions
カテゴリ別にグループ化されたすべての利用可能なRulesアクションのリストを表示します。
drush rules:expressions
すべての利用可能なRules Expression型のリストを表示します。
Troubleshooting 6
/admin/config/workflow/rules/settingsでデバッグログを有効にして出力を確認します。ルールが有効になっていること、イベントが正しく設定されていること、すべての条件が満たされていることを確認します。エラーメッセージについてシステムログを確認します。
サイトのメールシステムが正しく設定されていることを確認します。メールエラーについてシステムログを確認します。'宛先'フィールドに有効なメールアドレスが含まれていることを確認します。Core Contactモジュールでテストしてメールが機能していることを確認します。
データセレクターフィールドのオートコンプリート機能を使用して利用可能なデータパスを探索します。Contextが期待されるEntityタイプを提供していることを確認します。フィールドが作業中のEntityバンドルに存在することを確認します。
デバッグログを有効にして条件評価の結果を確認します。データセレクターが期待される値を返すことを確認します。型の不一致(文字列と整数の比較)を確認します。否定された条件でテストして評価を確認します。
汎用Entityイベントの代わりにバンドル固有のイベントを使用します。可能な場合は類似のルールを組み合わせます。頻繁にトリガーされるイベントでの高コストな操作を避けます。時間に厳しくないタスクにはCronトリガーのルールの使用を検討します。
Configuration ManagementまたはDrushエクスポートコマンドを使用します。すべての依存設定(参照されるEntityなど)もエクスポートされていることを確認します。設定同期ディレクトリのファイル権限を確認します。
Security Notes 6
- 'Rulesのアクセス制御をバイパス'権限は制限されており、高度に信頼された管理者にのみ付与すべき
- ルールが適切に保護されていない場合、メールアクションはスパムに使用される可能性がある - ルール管理権限を制限する
- ページリダイレクトアクションはフィッシングに使用される可能性がある - リダイレクトルールを慎重に確認する
- データ設定アクションはあらゆるEntityデータを変更できる - このアクションを使用するルールを監査する
- ユーザートリガーイベントで実行されるルールは、レート制限されていない場合、サービス拒否攻撃に悪用される可能性がある
- PHP filterモジュールが存在する場合は無効になっていることを常に確認する - RulesでPHPコードを使用しない