0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Apex入門シリーズ】データ操作編1:sObject / DML / ガバナ制限

Last updated at Posted at 2025-07-27

1. sObjectの概念

sObject は Salesforce のオブジェクト(取引先、取引先責任者、商談など)を総称する言葉
これらを扱うためのデータ型が sObject型

オブジェクト Apexでの型 説明
取引先 Account 標準オブジェクト
取引先責任者 Contact 標準オブジェクト
カスタムオブジェクト CustomObject__c 名前の末尾が __c

✅ sObject変数の作成方法

sObject(例えば取引先)を扱うには、以下の2パターンで値を設定する。

//1. コンストラクタで項目を指定
Account acc = new Account(Name='Acme');

//2. ドット表記で後から項目を指定
 Account acct = new Account();
 acct.Name = 'Acme';

2. 汎用sObject データ型

image.png
オブジェクトを固定せずに、sObject という基盤型を使うと、どんな Salesforce オブジェクトでも、1つの変数で扱える。

✅ 特徴

• どのオブジェクトかを実行時に決めたいときに便利
• 項目は .put() や .get() でアクセス

🔹 put() / get() 例

// 汎用 sObject 型で取引先 (Account) を作成
sObject myAccount = new Account();

// 項目を .put() で設定
myAccount.put('Name', 'サンプル株式会社');
myAccount.put('Industry', 'IT');

// 項目を .get() で取得
String nameValue = (String)myAccount.get('Name');
String industryValue = (String)myAccount.get('Industry');

// 結果をログに出力
System.debug('Name: ' + nameValue);       // => サンプル株式会社
System.debug('Industry: ' + industryValue); // => IT

⚠️ 特定の sObject 型と汎用型の違い

image.png

特定の sObject 型 で宣言された変数は、同じデータ型のレコードしか参照できない

3. DML操作まとめ 〜 insert / update / delete / upsert

DML (Data Manipulation Language) とは、Apex でレコードを 登録・更新・削除 する機能

🔹 基本のDML操作

// insert:レコード作成
Account acc = new Account(Name='Acme Inc.');
insert acc;

// update:レコード更新
acc.Name = 'Acme Japan';
update acc;

// delete:レコード削除
acc.Name = 'Acme Japan';
update acc;

// delete:レコード削除
delete acc;

// upsert:存在すれば更新、なければ作成
Account acc = new Account(External_Id__c='A-1001', Name='New Name');
upsert acc External_Id__c;

⚠️ DML 実行時のガバナ制限

Apex にはマルチテナント環境のため、DMLの回数や処理件数に上限がある!

項目 制限内容
DML ステートメント数 1トランザクション内で最大 150 回
DML 処理件数 1回の DML で最大 10,000 件

🔑 ガバナ制限対策のポイント

🔹 バルク処理(一括 DMLの使用)

ループ内で insert や update を繰り返すのではなく、List に溜めて一括DMLを実行

❌ 悪い例(ループで毎回 DML)

for (Integer i = 0; i < 100; i++) {
    Account acc = new Account(Name = 'Name-' + i);
    insert acc;  // ← DML を100回実行 → 上限超えの原因!
}

✅ 良い例(一括 DML)

List<Account> accList = new List<Account>();

for (Integer i = 0; i < 100; i++) {
    accList.add(new Account(Name = 'Name-' + i));
}

// 1回の insert でまとめて登録!
insert accList;

4. 重要ポイントまとめ

項目 内容
sObject とは? Salesforce のあらゆるレコードを表す基盤のデータ型
特定の sObject 型 例:Account Contact CustomObject__c
型安全で項目にドットでアクセスできる
汎用 sObject 型 オブジェクトを動的に扱いたいときに使う
put() / get() で項目を操作
DML とは? データの登録(insert)、更新(update)、削除(delete)、Upsert(insert + update)を行う処理
ガバナ制限 大量データをまとめて効率的に処理する全体設計

📚 参考資料

Salesforceのオブジェクト型sObjectの基礎
Apexの構文やベストプラクティスを網羅した公式ガイド
Apexでのデータ操作(DML)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?