用語解説
Salesforceガバナーリミットとは、マルチテナントアーキテクチャ上でリソースを公平に分配するためにSalesforceが設けたApexコード・API処理に関する上限制約の総称です。
代表的なリミットには1トランザクションあたりのSOQL発行数(100回)・DML処理件数(150件)・ヒープサイズ(6MB)・CPU時間(10秒)などがあります。リミットを超えるとLimitExceptionがスローされ処理が中断するため、バルク処理パターンとリミット管理の設計が必須です。
どんな場面で活用するか
- Apexトリガーでループ内にSOQLを書いたところ「Too many SOQL queries」エラーが発生した
- 大量レコードのバッチ処理でDMLリミットを超えてエラーになるケースを設計段階から回避したい
- 複数のフロー・トリガー・Process Builderが同時実行されて「CPU time limit exceeded」が発生した
よくある誤解
「小さなデータ量のテストでは問題なかったので本番でもエラーは出ない」は誤りです。ガバナーリミットはデータ量に関係なく1トランザクション内の処理回数に課されます。テスト時は1件でも本番で200件が同時更新されるとリミットに抵触する典型的なパターンに注意が必要です。
判断のヒント
設計ポイントLimits クラスのメソッド(Limits.getQueries()等)をApexコード内で使い、デバッグ中にリミット消費量をリアルタイムで確認することが重要です。また、Batch Apex・Queueable Apexを活用して処理をトランザクション分割することでリミット回避が可能です。