Salesforceのガバナ制限とは?基本からバッチ処理でのエラーの回避方法まで紹介
IT・技術関連
更新日:2024.09.05


ガバナ制限とは?
ガバナ制限とは、特定のユーザーがサーバリソースを大きく使用し占有してしまい、他ユーザーへ影響が及んでしまうことを防ぐことを目的として行われている、リソース利用に関しての様々な制限のことをいいます。
Salesforceでの開発には、「Apex」と呼ばれるSalesforce独自のオブジェクト指向のプログラミング言語を使用して機能を実装し、Salesforceのプラットフォーム上で実行させます。Apexは、「マルチテナント環境」で実行されるため、複数の顧客ユーザーがリソースを共有しています。
そのため、それぞれのユーザーが自由にリソースを使用すると、一部のユーザーが大幅にリソースを使ってしまい、他のユーザーは残ったわずかなリソースを分け合うといった事態が起こりかねません。そういった事態を避けることを目的して、ガバナ制限は存在しています。
マルチテナント環境とは?
マルチテナント環境とは、互いに無関係な複数のユーザーが同じサーバーやデータベースといった、システムやサービスを共有して利用する方式のことです。 このマルチテナント環境の大きなメリットとして、事業者が事前に用意したシステムなどを利用するため、迅速に利用を開始することができることと、様々なユーザーと共有することで安価に利用することができるということが挙げられます。 デメリットとしては、それぞれのユーザーに合わせたカスタマイズができない、もしくは限定的であることと、各ユーザーに対しリソースを保証できず、「リソースの偏り」が生まれやすいことが挙げられます。 Salesforceでは、マルチテナント環境の大きなデメリットである、「リソースの偏り」を解消するために、ガバナ制限を設けています。制限の対象

トランザクション単位とは
トランザクション単位とは、簡単に説明すれば、一連の複数の処理を一つのものとして処理する時の、一つのまとまりのことを指します。 トランザクションが必要となる場合を、「銀行口座を利用したお金の移動」を例にして説明します。 Aさんが自分の銀行口座である「口座A」から、友人の銀行口座である「口座B」へ1万円の送金を行うとします。ここで行われる処理は、「1.口座Aの残高から1万円を引く」「2.口座Bの残高を1万円増やす」という2つの処理になります。 これらの処理を別々に行ってしまうと、もし1つ目の処理のみが成功し、2つ目の処理が失敗した時、口座Aから引かれた1万円は口座Bへ入ることなく消えてしまい、2つの口座で不整合が起きてしまいます。当然ですがこのような不具合があれば問題となります。 そこでトランザクション単位で処理をすることにより、この問題を解決します。 トランザクション単位では、「口座Aの残高から1万円を引く」と「口座Bの残高を1万円増やす」という2つの処理を一つのものと考えます。そのため、2つの口座の間に不整合が起こらなくなるのです。バッチ処理を利用したガバナ制限エラーの回避方法

Salesforce「Database.Batchableインターフェース」の実装
Database.Batchableインターフェースには、これから紹介する3つのメソッドが含まれています。startメソッド
startメソッドは、Database.QueryLocatorオブジェクトや、Iterableオブジェクトの中でも、ジョブに渡すレコードやオブジェクトが含まれるものを返すものです。 このメソッドは、レコードやオブジェクトを、インターフェースメソッドであるexcuteに渡す際、Apex一括処理ジョブのはじめに利用されます。 SELECTなどの単純なクエリを使用し、一括処理ジョブのオブジェクトの範囲を生成するには、Database.QueryLocatorオブジェクトを使用します。 このオブジェクトを使用することで、SOQLクエリにより取得されるレコード合計数に対してガバナ制限はスルーされるため、リソースの確保に大いに貢献します。global (Database.QueryLocator | Iterable) start(Database.BatchableContext bc) {}
excuteメソッド
excuteメソッドは、メソッドに渡すレコードのバッチごとにコールされ、Database.BatchableContextオブジェクトへの参照や、sObjectsのリストやパラメータ化された型のリストなどを取得します。 このメソッドは、データの処理単位ごとに必要な処理を実行する時に利用されます。global void execute(Database.BatchableContext BC, list
){}
finishメソッド
finishメソッドは、確認メールの送信などの操作を行う場合に使用されます。 このメソッドには注意点が一つあり、すべてのバッチが処理された後に、このメソッドがコールされる、ということです。global void finish(Database.BatchableContext BC){}
ガバナ制限について理解を深め、リソースの確保を!

この記事の監修者・著者

- AWSパートナー/Salesforce認定コンサルティングパートナー 認定企業
-
ITエンジニア派遣サービス事業を行っています。AWSやSalesforceなど専門領域に特化したITエンジニアが4,715名在籍し、常時100名以上のITエンジニアの即日派遣が可能です。
・2021年:AWS Japan Certification Award 2020 ライジングスター of the Year 受賞
・2022年3月:人材サービス型 AWSパートナー認定
・AWS認定資格保有者数1,154名(2024年6月現在)
・Salesforce認定コンサルティングパートナー
・Salesforce認定資格者276名在籍(2024年5月現在)
・LPIC+CCNA 認定資格者:472 名(2024年6月時点)
最新の投稿
- 2024-12-27営業インタビュー情報共有の活性化の中心に。SP企画部の新たな取り組み
- 2024-07-01営業インタビュー最短で当日にご提案可能。 OPE営業の対応が早い3つの理由
- 2024-07-01営業インタビュー研修見学ツアーが高評価!「お客様のOPEに対する期待を高め、継続に貢献できればと思います。」
- 2024-07-01営業インタビュー信頼関係を構築し、エンジニアの長期就業へ
ITエンジニアの派遣を利用したい企業様へ

- 求人・転職サイトや自社採用サイトを使っているが、自社に合ったITエンジニアが応募してこない…
- すぐに採用したいが、応募がぜんぜん集まらない
こんな悩みをお持ちの採用・人事担当者の方は、
オープンアップITエンジニアをご検討ください!
オープンアップITエンジニアをご検討ください!
当社のITエンジニア派遣サービスは
- 派遣スピードが速い!(最短即日)
- 4,500名のエンジニアから貴社にマッチした人材を派遣
- 正社員雇用も可能
こんな特長があり、貴社の事業やプロジェクトに合った最適なITエンジニアを派遣可能です。
まずは下記ボタンから無料でご相談ください。