問題
新しく採用された開発者は、ケースオブジェクトに複数のトリガーがあることを発見しました。トリガーを使用する際に開発者は何を考慮すべきですか。
- 開発者はトリガーの実行順序を決めなければなりません。
- トリガーの実行順序は作成日時に基づいています。
- 単体テストではテストするトリガーを指定する必要があります。
- 同じsObjectに対するトリガーは実行順序が保証されません。
正解
- 開発者はトリガーの実行順序を決めなければなりません。
- トリガーの実行順序は作成日時に基づいています。
- 単体テストではテストするトリガーを指定する必要があります。
- 同じsObjectに対するトリガーは実行順序が保証されません。
解説
Salesforceの同じオブジェクトに複数のトリガーがある場合、どのトリガーが先に動くかは予測できません。例えば、あるケース(Caseオブジェクト)に対して2つのトリガーが設定されており、どちらも新しいケースが追加されたとき(before insert)に動作するとします。このとき、2つのトリガーの実行される順番は一定ではありません。そのため、開発者はトリガーの順番に依存しないようなコードを書く必要があり、複数のトリガーが同時に動作することを想定した設計を心がけるべきです。もし、トリガーの実行順を明確にする必要がある場合は、特定のデザインパターンを使用して管理することが推奨されます。
参考:トリガーと実行の順序
それぞれの選択肢の理由について説明します。
□ 開発者はトリガーの実行順序を決めなければなりません。
これは不正解です。 開発者はSalesforceのトリガーに対する実行順序を直接制御することはできません。代わりに、一つのトリガーの中で複数の処理を管理したり、ベストプラクティスとしてトリガーのロジックをヘルパークラスに分割することで、処理の流れをより制御できるようになります。
□ トリガーの実行順序は作成日時に基づいています。
これは不正解です。Salesforceでは、複数のトリガーがある場合、それらが実行される順序は保証されておらず、作成日時に基づくものではありません。実行順序が重要な場合は、ロジックを適切に設計する必要があります。
□ 単体テストではテストするトリガーを指定する必要があります。
これは不正解です。 単体テストでは特定のトリガーを指定してテストすることはできません。テスト中に特定の操作(例えばレコードの挿入や更新)を行った際に、関連する全てのトリガーが自動的に発火します。テストクラスは、その結果としてトリガーによる副作用も含めてシステムの振る舞いを検証する必要があります。
□ 同じsObjectに対するトリガーは実行順序が保証されません。
これは正解です。Salesforceでは同一のオブジェクトに複数のトリガーがある場合、その実行順序は保証されていません。そのため、開発者はトリガー間で依存関係を持たせないように注意深く設計する必要があります。また、必要であればトリガーのロジックを一つのクラスに集約して、実行順序をコード内で管理する手法を取ることが推奨されます。
コメント