この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

実行ガバナと制限

Apex はマルチテナント環境で実行するため、Apex ランタイムエンジンは、回避 Apex コードまたはプロセスが共有リソースを独占しないよう制限事項を強制します。一部の Apex コードが制限を超える場合、関連付けられたガバナは、処理できない実行時例外を発行します。

このトピックでは、コア Apex ガバナ制限に加え、メール制限転送通知の制限も参照しやすいように、この後に含まれています。

トランザクション単位の Apex 制限

これらの制限は、Apex トランザクション単位でカウントされます。Apex 一括処理の場合、これらの制限は execute メソッドでレコードのバッチの実行ごとにリセットされます。

次の表では、同期 Apex と非同期 Apex (Apex 一括処理と future メソッド) が異なる場合、それぞれの制限を記載しています。制限が同じ場合、表には、同期および非同期 Apex の両方に適用される 1 つの制限のみが記載されます。

説明 同期制限 非同期制限
発行される SOQL クエリの合計数1 (この制限はカスタムメタデータ型には適用されません。1 つの Apex トランザクション内で、カスタムメタデータレコードの SOQL クエリは無制限です)。 100 200
SOQL クエリによって取得されるレコードの合計数 50,000
Database.getQueryLocator によって取得されるレコードの合計数 10,000
発行される SOSL クエリの合計数 20
1 つの SOSL クエリによって取得されるレコードの合計数 2,000
発行される DML ステートメントの合計数2 150
DML ステートメントの結果として処理されるレコードの合計数Approval.process、または database.emptyRecycleBin 10,000
insertupdate、または delete ステートメントによって繰り返しトリガする Apex 呼び出しのスタックの深さの合計数 3 16
トランザクション内のコールアウト (HTTP 要求または Web サービスコール) の合計数 100
トランザクション内のすべてのコールアウト (HTTP 要求または Web サービスコール) の最大タイムアウト値 120 秒
Apex 呼び出し 1 回につき許可される future アノテーションを持つメソッドの最大数 50
System.enqueueJob によってキューに追加される Apex ジョブの最大数 50
許可される sendEmail メソッドの合計数 10
ヒープの合計サイズ 4 6 MB 12 MB
Salesforce サーバの最大 CPU 時間5 10,000 ミリ秒 60,000 ミリ秒
Apex トランザクションごとの最大実行時間 10 分
Apex トランザクションごとに許容される転送通知メソッドコールの最大数 10
各転送通知メソッドコールで送信できる転送通知の最大数 2,000
1 親-子リレーションのサブクエリを使用する SOQL クエリでは、各親-子リレーションは追加クエリとしてカウントされます。これらのクエリタイプは、最上位クエリ数の 3 倍に制限されています。これらのリレーションクエリの行数は、全体のコード実行の行数に加算されます。静的 SOQL ステートメントの他、次のメソッドへのコールは、要求内で発行された SOQL ステートメント数としてカウントされます。
  • Database.countQuery
  • Database.getQueryLocator
  • Database.query
2 次のメソッドへのコールは、要求内で発行された DML クエリ数としてカウントされます。
  • Approval.process
  • Database.convertLead
  • Database.emptyRecycleBin
  • Database.rollback
  • Database.setSavePoint
  • deleteDatabase.delete
  • insertDatabase.insert
  • merge および Database.merge
  • undeleteDatabase.undelete
  • updateDatabase.update
  • upsertDatabase.upsert
  • System.runAs

3 insertupdate、または delete ステートメントによってトリガを実行しない繰り返し Apex 処理は、1 つのスタックを使用する 1 つの呼び出し内に存在します。それに対し、トリガを実行した繰り返し Apex では、コードを実行した呼び出しとは別の新しい Apex 呼び出しでトリガが発生します。Apex の新しい呼び出しの実行は、1 つの呼び出しでの繰り返しコールよりも手間のかかる操作であるため、これらの種類の繰り返しコールのスタックの深さには、より厳しいトリガ制限があります。

4 メールサービスのヒープサイズは 36 MB です。

5 CPU 時間は、1 つの Apex トランザクションで発生する Salesforce アプリケーションサーバ上でのすべての実行に対して計算されます。CPU 時間は、Apex コードや、このコードからコールされるすべてのプロセス (パッケージコードやワークフローなど) の実行に対して計算されます。CPU 時間は、1 つのトランザクション専用であり、他のトランザクションからは独立しています。アプリケーションサーバの CPU 時間を消費しない操作は、CPU 時間には加算されません。たとえば、実行時間のうち DML、SOQL、および SOSL 用のデータベースに費やされた時間や、Apex コールアウトの待ち時間はカウントされません。

  • 制限は、各 testMethod に対して個別に適用されます。
  • 実行中にコードのコード実行制限を決定するには、Limits メソッドを使用します。たとえば、プログラムによってすでにコールされた DML ステートメント数を決定するには、getDMLStatements メソッドを使用できます。または、コードに使用できる DML ステートメントの合計数を決定するには、getLimitDMLStatements メソッドを使用できます。

メモ

トランザクション単位の認定管理パッケージの制限

認定管理パッケージ (AppExchange のセキュリティレビューに合格した管理パッケージ) には、ほとんどのトランザクション単位の制限に対して独自の制限セットが設けられます。認定管理パッケージは Salesforce ISV パートナーによって開発され、Force.com AppExchange から組織にインストールされ、固有の名前空間を持ちます。

ここでは、DML ステートメントについて、認定管理パッケージに別個に設定される制限の例を説明します。認定管理パッケージをインストールすると、そのパッケージ内のすべての Apex コードには、独自に 150 個の DML ステートメントの制限が設定されます。これらの DML ステートメントは、組織のネイティブコードが実行できる 150 個の DML ステートメントに追加されます。この制限の緩和によって、管理パッケージのコードとネイティブの組織のコードの両方が実行されると、1 つのトランザクションで 150 個を超える DML ステートメントが実行される可能性があります。同様に、同期 Apex については、認定管理パッケージには組織のネイティブコードの 100 個の SOQL クエリ制限に加え、独自に 100 個の SOQL クエリ制限が設定されます。

1 つのトランザクションで呼び出せる認定名前空間の数は無制限です。ただし、各名前空間で実行できる操作の数は、トランザクションあたりの制限を超えることはできません。トランザクション内の全名前空間で実行できる累積操作数にも制限があります。この累積制限は、名前空間あたりの制限の 11 倍です。たとえば、SOQL クエリの名前空間あたりの制限が 100 だとすると、1 つのトランザクションで実行できる SOQL クエリは最大 1,100 個です。この場合、累積制限は名前空間あたりの制限 100 の 11 倍です。これらのクエリは、いずれかの名前空間のクエリが 100 を超えない限り、無制限の数の名前空間で実行できます。累積制限は、すべての名前空間で共有される制限 (最大 CPU 時間の制限など) に影響しません。

これらのクロス名前空間制限は、認定管理パッケージの名前空間にのみ適用されます。認定されていないパッケージの名前空間には、別個に独自のガバナ制限がありません。使用するリソースは、組織のカスタムコードで使用されるのと同じガバナ制限に対してカウントされます。

メモ

次の表では、累積クロス名前空間制限について説明します。

説明 累積クロス名前空間制限
発行される SOQL クエリの合計数 1,100
Database.getQueryLocator によって取得されるレコードの合計数 110,000
発行される SOSL クエリの合計数 220
発行される DML ステートメントの合計数 1,650
トランザクション内のコールアウト (HTTP 要求または Web サービスコール) の合計数 1,100
許可される sendEmail メソッドの合計数 110
認定管理パッケージでは、次を除くすべてのトランザクション単位の制限は別個にカウントされます。
  • ヒープの合計サイズ
  • 最大 CPU 時間
  • 最大トランザクション実行時間
  • 固有の名前空間の最大数

これらの制限は、同じトランザクションで実行されている認定管理パッケージの数に関係なく、トランザクション全体に対してカウントされます。

また、Salesforce ISV パートナー以外が作成した未認定の AppExchange からパッケージをインストールする場合、そのパッケージのコードには、別個に独自のガバナ制限はありません。使用するリソースは、組織の合計ガバナ制限数に含まれます。累積リソースメッセージと警告メールも、管理パッケージの名前空間に基づいて生成されます。

Salesforce ISV パートナーパッケージの詳細は、「Salesforce パートナープログラム」を参照してください。

Force.com プラットフォームの Apex 制限

次の表の制限は、Apex トランザクションに固有ではなく、Force.com プラットフォームによって適用されます。

説明 制限
24 時間あたりの非同期 Apex メソッド実行 (Apex 一括処理、future メソッド、キュー可能 Apex、およびスケジュール済み Apex) の最大数1 250,000 か、組織内のユーザライセンス数 × 200 の大きい方の値
組織ごとの、5 秒を超える長時間の要求に対する同期同時要求数 2 10
同時にスケジュールされる Apex クラスの最大数 100。Developer Edition 組織の制限は 5 です。
Apex Flex キューに入っている Holding 状況の Apex 一括処理ジョブの最大数 100
同時にキューに入っているか有効な Apex 一括処理ジョブの最大数3 5
Apex 一括処理ジョブの start メソッドの最大同時実行数4 1
1 つのテストの実行で送信可能な一括処理ジョブの最大数 5
24 時間あたりのキュー可能なテストクラスの最大数 (Developer Edition 以外の本番組織)5 500 または組織のテストクラス数の 10 倍の大きい方
24 時間あたりのキュー可能なテストクラスの最大数 (Sandbox 組織および Developer Edition 組織)5 500 または組織のテストクラス数の 20 倍の大きい方
ユーザごとに同時に開くクエリカーソルの最大数6 50
Apex 一括処理の start メソッドでユーザごとに同時に開くクエリカーソルの最大数 15
Apex 一括処理の execute および finish メソッドでユーザごとに同時に開くクエリカーソルの最大数 5
コールアウト要求に同じホストを使用する URL への最大同時要求数7

外部エンドポイントへの要求: 20

Salesforce 組織のドメイン内のエンドポイントへの要求: 制限なし

1 Apex 一括処理の場合、メソッド実行には、startexecute、および finish メソッドの実行が含まれます。これは組織全体の制限で、他のすべての非同期 Apex (Apex 一括処理、キュー可能 Apex、スケジュール済み Apex、および future メソッド) と共有されます。使用可能な非同期 Apex 実行の数を確認するには、REST API limits リソースに対して要求を実行します。『Force.com REST API 開発者ガイド』「組織の制限をリストする」を参照してください。この制限のカウント対象となるライセンスは、Salesforce フルユーザライセンスまたは Force.com アプリケーションサブスクリプションのユーザライセンスです。Chatter Free、Chatter カスタマーユーザ、カスタマーポータルユーザ、およびパートナーポータルユーザライセンスは含まれません。

2 10 個の長時間の要求が実行されている間に追加の要求を行うと、要求は拒否されます。

3 一括処理ジョブが送信されると、処理用にシステムキューに移動されるまで、Flex キューに保持されます。

4 キュー内のまだ開始されていない一括処理ジョブは、開始されるまで保持されます。複数のジョブが実行されている場合は、この制限により一括処理ジョブが失敗することはなく、Apex の一括処理ジョブの execute メソッドが並行して実行されます。

5 この制限は、テストの非同期実行に適用されます。このテストグループには、開発者コンソールを含め、Salesforce ユーザインターフェースから開始するテストが含まれます。

6 たとえば、50 個のカーソルが開いていて、同じユーザとしてログインしたままのクライアントアプリケーションが新しいカーソルを開こうとすると、50 個のカーソルのうち最も古いカーソルが解放されます。異なる Force.com 機能のカーソル制限は個別に追跡されます。たとえば、50 個の Apex クエリカーソル、Apex 一括処理の start メソッドに 15 個のカーソル、Apex 一括処理の execute および finish メソッドにそれぞれ 5 個のカーソル、および 5 個の Visualforce カーソルを同時に開くことができます。

7ホストは、URL の一意のサブドメインで定義されます。たとえば、www.mysite.comextra.mysite.com は 2 つの異なるホストです。この制限は、同じホストにアクセスするすべての組織で計算されます。この制限を超過すると、CalloutException が発生します。

静的 Apex の制限

説明 制限
トランザクション内のコールアウト (HTTP 要求または Web サービスコール) のデフォルトのタイムアウト値 10 秒
コールアウト要求または応答 (HTTP 要求または Web サービスコール) の最大サイズ 1 同期 Apex の場合は 6 MB、非同期 Apex の場合は 12 MB
SOQL クエリの最大実行時間。この時間を超えると、Salesforce によってトランザクションがキャンセルされます。 120 秒
Apex リリース内のクラスとトリガの最大コードユニット数 5,000
ループリストのバッチサイズ用 200
Database.QueryLocator の 1 回の Apex 一括処理のクエリで返される最大レコード数 5000 万

1 HTTP 要求のサイズおよび応答のサイズは、ヒープサイズの合計にカウントされます。

サイズ固有の Apex 制限

説明 制限
クラスの最大文字数 100 万
トリガの最大文字数 100 万
組織内のすべての Apex コードで使用されるコードの最大量1 3 MB
メソッドのサイズ制限 2 コンパイル形式で 65,535 バイトコード命令

1 この制限は、AppExchange からインストールされた認定管理パッケージ (AppExchange Certified とマークされたアプリケーション) には適用されません。これらのパッケージタイプのコードは、組織のコードとは異なる独自の名前空間に属しています。AppExchange Certified パッケージについての詳細は、Force.com AppExchange オンラインヘルプを参照してください。この制限は、@isTest アノテーションで定義されたクラスに含まれるコードにも適用されません。

2 制限を超える大規模なメソッドはコードの実行中に例外が発生する場合があります。

その他の Apex の制限

SOQL クエリのパフォーマンス
最高のパフォーマンスを得るためには、特にトリガ内のクエリに対しては、セレクティブ SOQL クエリを使用する必要があります。実行時間が長くなるのを避けるために、システムはセレクティブ以外の SOQL クエリを終了できます。200,000 件を超えるレコードを含むオブジェクトに対してトリガでセレクティブではないクエリを使用すると、エラーメッセージが表示されます。このエラーを回避するには、必ずセレクティブクエリを使用します。「より効率的な SOQL クエリ」を参照してください。
Chatter in Apex
ConnectApi 名前空間内のクラスの場合、各書き込み操作が Apex ガバナ制限で 1 回の DML 操作としてカウントされます。ConnectApi メソッドコールも、レート制限の対象となります。ConnectApi レート制限は、Chatter REST API レート制限と同じです。どちらにも、ユーザごと、名前空間ごと、時間ごとのレート制限があります。レート制限を超えると、ConnectApi.RateLimitException が発生します。Apex コードで、この例外をキャッチして処理する必要があります。
イベントレポート
システム管理者以外のユーザの場合、イベントレポートが返すレコードの最大数は 20,000 件です。システム管理者の場合、100,000 件です。
Data.com Clean
Data.com Clean 製品とその自動ジョブを使用していて、取引先、取引先責任者、またはリードレコードで SOQL クエリを実行する Apex トリガを設定している場合、それらのオブジェクトでクエリがクリーンアップジョブに干渉する可能性があります。Apex トリガ (合計) は、バッチあたり 200 個以下の SOQL クエリにしてください。この制限を超えると、そのオブジェクトに対するクリーンアップジョブが失敗します。また、トリガが future メソッドをコールする場合は、バッチあたり 10 個の future コールに制限されます。

メール制限

受信メール制限
メールサービス: 処理するメールメッセージの最大数

(オンデマンドメール-to-ケースの制限を含む)

ユーザライセンス数 × 1,000、最大数 1,000,000
メールサービス: メールメッセージの最大サイズ (本文および添付ファイル) 10 MB1
オンデマンドメール-to-ケース: メールの添付ファイルの最大サイズ 25 MB
オンデマンドメール-to-ケース: 処理するメールメッセージの最大数

(メールサービスの制限に対してカウントする)

ユーザライセンス数 × 1,000、最大数 1,000,000
1 メールサービスのメールメッセージの最大数は、言語および文字セットによって異なります。メールメッセージのサイズには、メールヘッダー、本文、添付ファイル、エンコードが含まれます。そのため、添付ファイルが 25 MB のメールは、ヘッダー、本文、エンコードを考慮すると、メールメッセージのサイズ制限 25 MB を超える可能性があります。.
メールサービスを定義するときには、次の点に注意してください。
  • メールサービスは、そのアドレスの 1 つが受信したメッセージを処理するだけです。
  • Salesforce は、[オンデマンドメール-to-ケース] など、すべてのメールサービスを合計した 1 日に処理できるメッセージの総数を制限します。この制限を超えたメッセージは、各メールサービスの失敗時のレスポンス設定に基づいて、戻される、破棄される、あるいは翌日処理するためのキューに入れられます。Salesforce では、制限値は、ユーザライセンス数 x 1,000 で算出され、最大値は 1,000,000 です。たとえば、ライセンス数が 10 の場合、1 日最大 10,000 件のメールメッセージを処理できます。
  • Sandbox 内に作成したメールサービスアドレスは、本番組織にコピーできません。
  • メールサービスごとに Salesforce に通知して、送信者のメールアドレスではなく、特定のアドレスにエラーメールメッセージを送信できます。
  • メールが (本文テキスト、本文 HTML および添付ファイルを合わせて) 約 10 MB を超える場合 (言語や文字セットに応じて異なる)、メールサービスはメールメッセージを拒否し、送信者に通知します。
送信メール: Apex を使用して送信する単一メールおよび一括メールの制限

API または Apex を使用して、グリニッジ標準時 (GMT) に基づき 1 日に最大 5,000 個の外部メールアドレスに単一メールを送信できますSalesforce の Email Author やコンポーザを使用して送信した単一メールは、この制限に含まれません。取引先、取引先責任者、リード、商談、ケース、キャンペーン、カスタムオブジェクトの各ページから、組織の取引先責任者、リード、個人取引先、ユーザに個別のメールを直接送信する���合は、制限はありません。

単一メールを送信する場合は、次の点に注意してください。
  • SingleEmailMessage[宛先] 項目には最大 100 名の受信者、CC および BCC 項目には最大 25 名の受信者を指定できます。
  • SingleEmailMessage を使用して組織の内部ユーザにメールを送信するときに setTargetObjectId でユーザ ID を指定すると、メールが 1 日あたりの制限値にカウントされません。ただし、setToAddresses で内部ユーザのメールアドレスを指定すると、制限値にカウントされます。

グリニッジ標準時 (GMT) に基づいて、1 組織あたり 1 日に最大 5,000 個の外部メールアドレスに一括メール送信できます。

  • 単一メールおよび一括メールの制限では、アドレスが一意であるかどうかは考慮されません。たとえば、メールに johndoe@example.com が 10 回含まれている場合、制限に対して 10 とカウントされます。
  • ポータルユーザを含め、組織の内部ユーザに送信できるメールには制限はありません。
  • 一括メールは、取引先責任者、個人取引先、リード、および組織の内部ユーザにのみ送信できます。
  • Developer Edition 組織とトライアルで Salesforce を評価中の組織では、1 日あたり 10 個を超える外部メールアドレスに一括メール送信できません。この低い制限は、組織が Winter '12 リリースより前に作成されており、一括メール送信がすでに高い制限で有効になっている場合は適用されません。また、組織は 1 日あたり最大 15 個のメールアドレスに単一メールを送信できます。

メモ

転送通知の制限

Salesforce 組織に関連付けられた各モバイルアプリケーションで許容される転送通知の最大数は、アプリケーションの種別によって異なります。
モバイルアプリケーション種別 アプリケーションごとの 1 日の最大通知数
Salesforce により提供されたモバイルアプリケーション (Salesforce1 など) 50,000
内部の社員向けに自社開発されたモバイルアプリケーション 35,000
AppExchange からインストールされたモバイルアプリケーション 5,000

配信可能な通知のみがこの制限にカウントされます。たとえば、通知が会社の 1,000 名の従業員に送信されるが、100 名の従業員はまだモバイルアプリケーションをインストールしていない場合を考えます。この制限にカウントされるのは、モバイルアプリケーションをインストールしている 900 名の従業員に送信された通知のみです。

[転送通知をテスト] ページで生成された各テスト転送通知の受信者は 1 名に制限されています。テスト転送通知は、アプリケーションの 1 日の転送通知制限にカウントされます。