No Results
Search Tips:
- Please consider misspellings
- Try different search keywords
実行ガバナと制限について
Apex はマルチテナント環境で実行するため、Apex ランタイムエンジンは、回避 Apex が共有リソースを独占しないようさまざまな制限事項を強制します。一部の Apex コードが制限を超える場合、関連付けられたガバナは、処理できない実行時例外を発行します。
このトピックでは、コア Apex ガバナ制限に加え、メール制限や転送通知の制限も参照しやすいように、この後に含まれています。
トランザクション単位の Apex 制限
これらの制限は、Apex トランザクション単位でカウントされます。Apex 一括処理の場合、これらの制限は execute メソッドでレコードのバッチの実行ごとにリセットされます。
次の表では、同期 Apex と非同期 Apex (Apex 一括処理と future メソッド) が異なる場合、それぞれの制限を記載しています。制限が同じ場合、表には、同期および非同期 Apex の両方に適用される 1 つの制限のみが記載されます。
- Database.countQuery
- Database.getQueryLocator
- Database.query
- Approval.process
- Database.convertLead
- Database.emptyRecycleBin
- Database.rollback
- Database.setSavePoint
- delete と Database.delete
- insert と Database.insert
- merge および Database.merge
- undelete と Database.undelete
- update と Database.update
- upsert と Database.upsert
- System.runAs
3 insert、update、または delete ステートメントによってトリガを実行しない繰り返し Apex 処理は、1 つのスタックを使用する 1 つの呼び出し内に存在します。それに対し、トリガを実行した繰り返し Apex では、コードを実行した呼び出しとは別の新しい Apex 呼び出しでトリガが発生します。Apex の新しい呼び出しの実行は、1 つの呼び出しでの繰り返しコールよりも手間のかかる操作であるため、これらの種類の繰り返しコールのスタックの深さには、より厳しいトリガ制限があります。
5 CPU 時間は、1 つの Apex トランザクションで発生する Salesforce アプリケーションサーバ上でのすべての実行 (Apex コードや、このコードからコールされるすべてのプロセス (パッケージコードやワークフローなど) の実行) に対して計算されます。CPU 時間は、1 つのトランザクション専用であり、他のトランザクションからは独立しています。アプリケーションサーバの CPU 時間を消費しない操作は、CPU 時間には加算されません。 たとえば、実行時間のうち DML、SOQL、および SOSL 用のデータベースに費やされた時間や、Apex コールアウトの待ち時間はカウントされません。
6 1 つのトランザクションでは、10 個の一意の名前空間のみを参照できます。たとえば、オブジェクトを更新するときに、管理パッケージでクラスを実行するオブジェクトがあるとします。その後、クラスは 2 番目のオブジェクトを更新します。つまり、他のパッケージの他のクラスを実行します。最初に 2 番目のパッケージに直接アクセスしない場合でも、同じトランザクション内で発生するため、1 つのトランザクションでアクセスする名前空間の数に含まれます。
トランザクション単位の認定管理パッケージの制限
認定管理パッケージ (AppExchange のセキュリティレビューに合格した管理パッケージ) には、一部の制限を除き、トランザクション単位の制限に対して独自の制限セットが設けられます。認定管理パッケージは Salesforce ISV パートナーによって開発され、Force.com AppExchange から組織にインストールされ、固有の名前空間を持ちます。
ここでは、DML ステートメントについて、認定管理パッケージに別個に設定される制限の例を説明します。認定管理パッケージをインストールすると、そのパッケージ内のすべての Apex コードには、組織のネイティブコードが実行できる 150 個の DML ステートメントに加え、独自に 150 個の DML ステートメントの制限が設定されます。つまり、管理パッケージのコードとネイティブの組織のコードの両方が実行されると、1 つのトランザクションで 150 個を超える DML ステートメントが実行される可能性があります。同様に、同期 Apex については、認定管理パッケージには組織のネイティブコードの 100 個の SOQL クエリ制限に加え、独自に 100 個の SOQL クエリ制限が設定されます。他の制限についても同様です。
- ヒープの合計サイズ
- 最大 CPU 時間
- 最大トランザクション実行時間
- 固有の名前空間の最大数
これらの制限は、同じトランザクションで実行されている認定管理パッケージの数に関係なく、トランザクション全体に対してカウントされます。
また、Salesforce ISV パートナー以外が作成した未認定の AppExchange からパッケージをインストールする場合、そのパッケージのコードには、別個に独自のガバナ制限数はありません。使用するリソースは、組織の合計数に含まれます。累積リソースメッセージと警告メールも、管理パッケージの名前空間に基づいて生成されます。
Salesforce ISV パートナーパッケージの詳細は、「Salesforce Partner Programs」を参照してください。
Force.com プラットフォームの Apex 制限
次の表の制限は、Apex トランザクションに固有ではなく、Force.com プラットフォームによって適用されます。
1 Apex 一括処理の場合、メソッド実行には、start、execute、および finish メソッドの実行��含まれます。
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 カーソルを同時に開くことができます。
静的 Apex の制限
サイズ固有の 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 クエリはシステムより終了される場合があります。100,000 件を超えるレコードを含むオブジェクトに対してトリガでセレクティブではないクエリを使用すると、エラーメッセージが表示されます。このエラーを回避するには、必ずセレクティブクエリを使用します。「より効率的な SOQL クエリ」を参照してください。
- Chatter in Apex
- ConnectApi 名前空間内のクラスの場合、各書き込み操作が Apex ガバナ制限で 1 回の DML 操作としてカウントされます。ConnectApi メソッドコールも、レート制限の対象となります。ConnectApi レート制限は、Chatter REST API レート制限と同じです。どちらにも、ユーザごと、名前空間ごと、時間ごとのレート制限があります。レート制限を超えると、ConnectApi.RateLimitException が発生します。Apex コードで、この例外をキャッチして処理する必要があります。
- イベントレポート
- システム管理者以外のユーザの場合、イベントレポートが返すレコードの最大数は 20,000 件です。システム管理者の場合、100,000 件です。
- Data.com クリーンアップ
- Data.com クリーンアップ製品とその自動ジョブを使用していて、取引先、取引先責任者、またはリードレコードで実行する SOQL クエリの Apex トリガを設定している場合、それらのオブジェクトでクエリがクリーンアップジョブに干渉する可能性があります。Apex トリガ (合計) は、バッチあたり 200 個以下の SOQL クエリにしてください。この制限を超えると、そのオブジェクトに対するクリーンアップジョブが失敗します。また、トリガが future メソッドをコールする場合は、バッチあたり 10 個の future コールに制限されます。
メール制限
- 受信メール制限
-
1 メールサービスのメールメッセージの最大数は、言語および文字セットによって異なります。メールサービスを定義するときには、次の点に注意してください。
- メールサービスは、そのアドレスの 1 つが受信したメッセージを処理するだけです。
- Salesforce は、[オンデマンドメール-to-ケース] など、すべてのメールサービスを合計した 1 日に処理できるメッセージの総数を制限します。この制限を超えたメッセージは、各メールサービスの失敗時のレスポンス設定に基づいて、戻される、破棄される、あるいは翌日処理するためのキューに入れられます。Salesforce は、ユーザライセンス数 x 1,000 で制限値を算出します。1 日の最大は 1,000,000 件です。たとえば、ライセンス数が 10 の場合、1 日最大 10,000 件のメールメッセージを処理できます。
- sandbox 内に作成したメールサービスアドレスは、本番組織にコピーできません。
- メールサービスごとに Salesforce に通知して、送信者のメールアドレスではなく、特定のアドレスにエラーメールメッセージを送信できます。
- メールが (本文テキスト、本文 HTML および添付ファイルを合わせて) 約 10 MB を超える場合 (言語や文字セットに応じて異なる)、メールサービスはメールメッセージを拒否し、送信者に通知します。
- 送信メール: Apex を使用して送信する単一メールおよび一括メールの制限
API または Apex を使用して、グリニッジ標準時間 (GMT) に基づいて、1 日に最大 1,000 個の外部メールアドレスに単一メールを送信できます。Salesforce アプリケーションを使用して送信する単一メールはこの制限にカウントされません。取引先、取引先責任者、リード、商談、ケース、キャンペーン、カスタムオブジェクトの各ページから、組織の取引先責任者、リード、個人取引先、ユーザに個別のメールを送信する場合は、制限はありません。
単一メールを送信する場合は、次の点に注意してください。グリニッジ標準時間 (GMT) に基づいて、1 組織あたり 1 日に最大 1,000 個の外部メールアドレスに一括メール送信できます。各一括メール送信に含むことのできる外部メールアドレスの最大数は、次のようにエディションに応じて異なります。エディション 一括メール送信あたりの外部アドレス制限 Personal Edition、Contact Manager Edition、および Group Edition 一括メール送信は使用できません Professional Edition 100 Enterprise Edition 500 Unlimited Edition および Performance Edition 1,000
転送通知の制限
| 許容される転送通知の最大数 | 制限 |
|---|---|
| Salesforce によって提供されるモバイルアプリケーション (Salesforce1 など) | アプリケーションごとに 50,000 件/日の通知 |
| 社内の従業員が使用するために組織で開発されたモバイルアプリケーション | アプリケーションごとに 35,000 件/日の通知 |
| AppExchange からインストールされたモバイルアプリケーション | アプリケーションごとに 5,000 件/日の通知 |
配信可能な通知のみがこの制限にカウントされます。たとえば、通知が会社の 1,000 名の従業員に送信されるが、100 名の従業員はまだモバイルアプリケーションをインストールしていない場合を考えます。この制限にカウントされるのは、モバイルアプリケーションをインストールしている 900 名の従業員に送信された通知のみです。
[転送通知をテスト] ページで生成された各テスト転送通知の受信者は 1 名に制限されています。テスト転送通知は、アプリケーションの 1 日の転送通知制限にカウントされます。