Q1.ある組織に、ユーザーが選択した選択リスト値の組み合わせによるカスタムフィルターでレコードを表示する Apex コントローラーと Visualforce ページがあります。
一部の入力組み合わせでは結果表示に時間がかかり、別の入力では「最大ビュー状態サイズの制限を超えました」という例外が発生します。
この問題を解決するために、開発者はどの手順を実行すべきですか。
A. 選択リスト値で絞り込むコードはインデックス化されていないため、そのコードを調整する。
B. ビュー状態エラーを避けるため、Apex コントローラーから transient キーワードの使用箇所を削除する。
C. 一度に表示するレコード数を制限するため、Apex コントローラーで StandardSetController または SOQL の LIMIT を使用する。
D. 1つ目の Visualforce ページで絞り込みを行い、同じ Apex コントローラーを使って2つ目のページでレコード一覧を表示する。
回答
- C. 一度に表示するレコード数を制限するため、Apex コントローラーで StandardSetController または SOQL の LIMIT を使用する。
-
この問題の本質は、対象レコードを一度に持ちすぎることで ビュー状態が肥大化する点 と、取得件数が多いため 表示処理そのものが遅くなる点 にあります。
Salesforce 公式では Visualforce のビュー状態サイズ上限が定められており、一覧表示では StandardSetController を使ったレコードセット管理が可能です。
そのため、SOQL の LIMIT や StandardSetController により一度に扱う件数を減らすのが適切です。
B は逆で、transient はビュー状態に保持しないため、削除すると改善ではなく悪化要因になり得ます。
A や D はこの設問の直接解決策としては不十分です。
なお、Apex、Visualforce、StandardSetController は現行の Salesforce 用語です。
StandardSetController クラス
ビジュアルフォースの制限
Q2.Universal Containers(UC)は翻訳ワークベンチを有効化し、選択リスト値を翻訳しています。
UC には、Account オブジェクト上にカスタムの複数選択選択リスト項目 Product__c があり、営業担当者がその取引先がすでに所有している UC の製品を指定できるようになっています。
開発者は、Product__c 項目を含む Account レコードを取得する Apex メソッドを作成する必要があります。
Products__c の値を現在のユーザーの言語で取得するには、開発者はどうすべきですか。
A. SOQL クエリの項目リストで toLabel(Product__c) を使用する。
B. SOQL の結果リスト内の各レコードにロケールを設定する。
C. SOQL の結果リスト内の各レコードに対して translate メソッドを呼び出す。
D. SOQL クエリで Locale 句を使用する。
回答
- A. SOQL クエリの項目リストで toLabel(Product__c) を使用する。
-
この問題は、翻訳ワークベンチが有効な環境で選択リスト値をユーザー言語で取得する方法を問うものです。
SOQL では toLabel() 関数を使用することで、選択リストや参照項目の表示ラベルをユーザーの言語に応じて取得できます。
つまり API 値ではなく翻訳済みラベルを返す仕組みが toLabel() です。
これにより、多言語環境でも適切な表示が可能になります。B や C のように取得後に変換する仕組みは存在せず、D のような Locale 句も SOQL にはありません。
したがって SOQL 実行時に変換する toLabel() の利用が正解です。
toLabel()
Q3.Cloud Kicks の Salesforce 管理者は、米国内のすべての郵便番号と、その郵便番号が属する Cloud Kicks の営業地域を保存するために、Region__c というカスタムオブジェクトを作成しました。
Cloud Kicks は、リードの郵便番号に基づいて Region を設定するため、Lead に対するトリガーを必要としています。
この要件を最も効率的に満たすコードセグメントはどれですか。



A. Option A
B. Option B
C. Option C
D. Option D
回答
- D. Option D
-
この設問では、トリガー処理を一括対応(Bulkification)できているかが重要です。最も効率的なのは D です。
まず Trigger.new から郵便番号を Set に集め、次に 1 回の SOQL で該当する Region__c を取得し、最後に Map で Lead の PostalCode から Region を引けるようにしています。
これにより SOQL をループ内で実行しないため、ガバナ制限に強い実装になります。
また、B はクエリ回数は抑えていますが二重ループのため件数増加時に非効率です。
C は典型的な SOQL in loop で不適切です。
したがって 1 回の取得結果を Map に載せて各 Lead に割り当てる D が最も効率的です。
なお、Lead、Apex Trigger、SOQL はいずれも現行の Salesforce 用語です。
バルクトリガー
トリガーおよびバルクリクエストのベストプラクティス
Q4.CreateOneAccount クラスが 1 件の Account を作成し、Queueable インターフェースを実装しているとします。
この Apex コードを正しくテストする構文はどれですか。

A. Option A
B. Option B
C. Option C
D. Option D
回答
- B. Option B
-
Queueable Apex は非同期処理であるため、テストでは Test.startTest() と Test.stopTest() を使用して強制的に実行させる必要があります。
特に Test.stopTest() のタイミングで非同期処理が実行される点が重要です。
そのため、enqueueJob は startTest() の後に呼び出し、stopTest() の後に結果を検証する必要があります。
また 非同期処理の結果は stopTest() 後に SOQL で再取得して検証するのが正しい手順です。
A や D は非同期処理の完了前に検証してしまうため不正確であり、C のような方法は一般的な検証手法ではありません。
limits、startTest 、および stopTest を用いる
キュー可能な頂点
Q5.ある開発者は、時々変更される設定データを保存するためにカスタム設定(Custom Settings)を使用していました。
しかし、最近リフレッシュされた一部のサンドボックスでテストが失敗するようになりました。
今後この問題を解消するためには、何を行うべきですか。
A. カスタム設定のタイプをリスト(List)に設定する。
B. カスタム設定を静的リソースに置き換える。
C. カスタム設定のタイプを階層(Hierarchy)に設定する。
D. カスタム設定をカスタムメタデータに置き換える。
回答
- D. カスタム設定をカスタムメタデータに置き換える。
-
この問題は、環境間でのデータの一貫性とテスト実行時の可用性がポイントです。
カスタム設定はデータとして扱われるため、サンドボックスリフレッシュ時に内容が変わったり欠落する可能性があります。
一方でカスタムメタデータはメタデータとして管理され、デプロイ可能でありテストでも常に参照できます。
つまり 環境間で同一データを保証できる点がカスタムメタデータの大きな利点です。
また テスト時にデータ作成不要で参照可能な点も安定性向上に寄与します。
そのため、将来的な安定運用の観点からカスタムメタデータへの移行が最適解です。
Apex 開発者ガイド
ユニット内の組織データからのテストデータの分離 テスト
Q6.開発者は、リード情報を収集するために lightning-record-edit-form を使用した Lightning Web コンポーネントを作成しました。
ユーザーから、リードレコード保存時に入力エラーが発生すると、エラーメッセージが一度に1件しか表示されないという苦情が出ています。
複数フィールドに対する検証を行い、最小限の JavaScript で複数のエラーメッセージを同時に表示するための推奨アプローチはどれですか。
A. try/catch/finally ブロック
B. 外部 JavaScript ライブラリ
C. 検証ルール(Validation Rules)
D. Apex トリガー
回答
- C. 検証ルール(Validation Rules)
-
この問題のポイントは「最小限の JavaScript」で複数エラーを同時表示することです。
Salesforce では検証ルールを使用することで、複数フィールドに対する条件チェックを宣言的に実装できます。
特に 検証ルールは複数条件を定義でき、複数エラーメッセージを同時に返すことが可能です。
また lightning-record-edit-form は標準で検証ルールのエラー表示に対応しているため、追加の JavaScript 実装が不要です。
A や B は不要に複雑であり、D はサーバー側処理でリアルタイムなUIエラー表示には適しません。したがって最適解は検証ルールです。
オーラコンポーネントの紹介
このクイックリファレンスについて
Q7.次のクエリと条件を考慮してください。
・Account レコードは 200,000 件以上存在する
・これらのレコードにはソフト削除(ごみ箱内)が含まれる
・Account には External ID としてマークされた項目が2つある(Customer_Number__c と ERR_Key__c)
大規模データボリュームに対して最適化されているクエリを2つ選択してください。
A. SELECT Id FROM Account WHERE Name != NULL
B. SELECT Id FROM Account WHERE Name != ” AND Customer_Number__c = ‘ValueA’
C. SELECT Id FROM Account WHERE Id IN :aListVariable
D. SELECT Id FROM Account WHERE Name != ” AND IsDeleted = false
回答
- B. SELECT Id FROM Account WHERE Name != ” AND Customer_Number__c = ‘ValueA’
D. SELECT Id FROM Account WHERE Name != ” AND IsDeleted = false -
大規模データでは「選択性(selectivity)」とインデックス利用が重要です。
External ID 項目は自動的にインデックス化されるため、これを条件に含むクエリは高速化されます。
したがって Customer_Number__c(External ID)を条件に含む B はインデックスが利用され最適です。
また D は IsDeleted = false により対象を絞り込み、不要な削除済みデータを除外することで効率が向上します。
A はインデックスを使わず非効率であり、C はリストサイズに依存し選択性が保証されません。
よって インデックス利用とデータ絞り込みの観点で B と D が適切です。
Apex 開発者ガイド
非常に大きなSOQLクエリの扱い
Q8.開発者が「Maximum Trigger Depth Exceeded」というエラーを受け取りました。
このエラーメッセージが発生する原因として考えられるものはどれですか。
A. トリガーが16回以上再帰的に呼び出されている。
B. SOQL のガバナ制限に達している。
C. トリガー内で多数の DML 操作が実行されている。
D. フロートリガーが過剰に含まれている。
回答
- A. トリガーが16回以上再帰的に呼び出されている。
-
このエラーはトリガーの再帰呼び出しが制限を超えた場合に発生します。
Salesforce では無限ループ防止のため、トリガーのネスト(再帰)回数に上限があり、最大16回までと定められています。
そのため 同一トリガーまたは関連トリガーが更新処理を繰り返し呼び出すと、この制限に達します。
典型的には after update で別オブジェクト更新→元オブジェクト更新のような循環構造が原因です。
したがって 再帰防止フラグや設計見直しでトリガーの再実行を制御することが重要です。
B や C は別のガバナ制限エラーとなり、本エラーの直接原因ではありません。
トリガーと実行順序
トリガー
Q9.開発者は、Salesforce からデータを取得し、そのデータを record プロパティに割り当てる Lightning Web コンポーネントを作成しています。
コンポーネントで Salesforce からデータを取得するには何を行う必要がありますか。


A. Option A
B. Option B
C. Option C
回答
- A. Option A
-
Lightning Web コンポーネントでは、データ取得に wire サービスを使用します。
getRecord を利用する場合、recordId と取得対象フィールドの両方を指定する必要があります。
そのため @wire(getRecord, { recordId: ‘$recordId’, fields: ‘$fields’ }) のように fields を含めて指定することが必須です。
これにより指定レコードの必要な項目データが取得されます。
また @wire はリアクティブに動作し、recordId や fields が変更されると自動的に再取得される点も重要です。
B は構文誤りであり、C は fields 指定がないため不完全です。
ワイヤーサービスの理解getRecord
Q10.Apex トリガーは、営業担当者が商談(Opportunity)を受注したときに毎回 Order__c レコードを作成します。
最近、このトリガーが2つの注文を作成しています。
この問題をトラブルシューティングするために、2人の開発者が取るべき最適な手法はどれですか。
A. すべてのフローを無効化し、どれが原因か特定するために1つずつ再有効化する。
B. Apex トリガーのテストクラスを実行し、コードカバレッジが十分であることを確認する。
C. すべての営業担当者に対してデバッグログを設定し、ログ内のエラーや例外を監視する。
D. コードに System.debug() を追加し、Developer Console のログを使用して処理を追跡する。
回答
- D. コードに System.debug() を追加し、Developer Console のログを使用して処理を追跡する。
-
この問題は、トリガーが複数回実行されている、または他の自動化(フローやワークフロー)と干渉している可能性を調査する必要があります。
そのためにはログベースの詳細なトレースが最も有効です。
特に System.debug() を使って処理の実行順序や回数を可視化することが重要です。
また Developer Console のログを確認することで、トリガーの再実行や他の自動化の影響を特定できます。
A は切り分けとして有効な場合もありますが非効率であり、B は問題解決に直接関係せず、C は範囲が広すぎて特定が困難です。したがって最適解は D です。
Apexのデバッグ
Apex 開発者ガイド

