Loading
ただいま大変多くのお問い合わせをいただいており、ご連絡までにお時間を頂戴しております続きを読む

実行ガバナ制限の超過 - エラー: System.LimitException: Too many SOQL queries: 101

公開日: May 29, 2026
説明

以下のエラーは、SOQL クエリの Apex 実行ガバナ制限を超過した場合に表示されます。

 

System.LimitException: Too many SOQL queries: 101

 

Salesforce プラットフォームにおける Apex は、すべてのお客様が同じコンピューティングリソースを共有する、共有のマルチテナントプラットフォーム上で動作します。単一のお客様のコードが共有リソースを独占しないようにするため、Salesforce はガバナ制限を適用します。

SOQL クエリのガバナ制限は、1 つのトランザクションコンテキストにつき 100 クエリまでに制限されています。これには、その単一コンテキスト内のトリガー、クラス、フロー、API 呼び出しによって実行されるすべての SOQL クエリが含まれます。この制限を超過すると、Salesforce は上記のような LimitException のエラーを返します。

 

例:

取引先 (Account) オブジェクトの Apex トリガーが、バッチ内の各取引先に関連する取引先責任者 (Contact) をクエリします。このとき、もし 1 回のトランザクションで 101 個の取引先が処理され、トリガーが取引先レコードごとに (FOR ループ内で) 1 つの SOQL クエリを実行すると、101 個目の取引先で制限を超過し、トランザクションは失敗します。

 

注意点:

  • 1 つの呼び出し、またはコンテキストから実行されたトリガー内のすべての SOQL クエリは、100 回の制限にカウントされます。

  • Salesforce ではガバナ制限を引き上げたり、無効にすることはできません。



 
解決策
​「Too many SOQL queries: 101」エラーを解決する

この問題を修正するには、単一のトランザクションコンテキスト内で実行される SOQL クエリの総数が 100 回未満になるように Apex コードをリファクタリング (再構築) する必要があります。現在のコンテキストでの制限を回避するためにコードを非同期で実行する必要がある場合は、@future アノテーションを使用します。これにより、独自のガバナ制限の割り当てを持つ、独立した非同期トランザクションでコードが実行されます。
 

ガバナ制限の超過を回避するベストプラクティス

Apex はマルチテナントプラットフォーム上で動作するため、Apex ランタイムエンジンはコードが共有リソースを独占しないように制限を厳密に適用します。100 クエリの制限内に収まるように、以下のベストプラクティスに従ってください。

 

  • FOR ループ内での SOQL クエリの実行を避ける: レコードを反復処理するループ内に SOQL クエリを配置しないでください。代わりに、まずレコード ID を収集し、ループの外で 1 つの SOQL クエリを実行して、IN 句を使用してすべての ID を指定します。

  • Apex コードをバルク化 (一括処理化) する: レコードを 1 つずつ処理するのではなく、1 回のトランザクションで複数のレコードを処理 (一括処理) できるようにトリガーとクラスを設計します。

  • Apex コードのベストプラクティスを確認する: Salesforce Apex 開発者ガイドの主要なコーディング原則に従っていることを確認します。

  • トリガーと一括要求に関するベストプラクティスを確認する: トリガーと Bulk API リクエストのベストプラクティスに関する Salesforce ドキュメントを確認します。

ナレッジ記事番号

000386220

 
読み込み中
Salesforce Help | Article