IT・情報処理 / Salesforce認定

Salesforce認定 Platform デベロッパー上級の無料問題集・例題・出題範囲

Lightningプラットフォームの高度なプログラム開発スキルを証明する資格。60問 / 120分 / 合格スコア63% / 前提条件: Platform デベロッパー必須。筆記試験に加えSuperbadge×4取得が必要

  • 313問
  • 5分野
  • 解説つき・無料で演習
  • 問題の最終更新:

出題範囲(5分野)

  • 上級デベロッパーの基本60問
  • ロジックとプロセスの自動化64問
  • ユーザインターフェース65問
  • テスト、デバッグ、リリース60問
  • パフォーマンス64問

Salesforce認定 Platform デベロッパー上級の例題(6問・解説つき)

スキルサートのAIが出題範囲に沿って作成した演習問題です(過去問ではありません)。アプリでは毎週新しい問題が追加されます。

例題1上級デベロッパーの基本

大規模なデータセット(LDV)を扱うSalesforce組織において、カスタムオブジェクトに対するレポートとSOQLクエリのパフォーマンスを向上させる必要があります。標準インデックスやカスタムインデックスを使用しても解決しない場合、Salesforceのエンジニアリングチームに有効化を依頼することで、クエリ対象のテーブルから不要な列を除外して検索効率を高めるアーキテクチャ上の機能はどれですか。

  1. Skinny Tables
  2. 外部オブジェクト(External Objects)
  3. ディビジョン(Divisions)
  4. カスタム設定のリスト型
  5. ビッグオブジェクト(Big Objects)
解答と解説を見る

正解: Skinny Tables

正解は『Skinny Tables』です。Skinny Tables(スキニーテーブル)は、頻繁に使用されるフィールドを含むカスタムテーブルを別途作成することで、レポートやSOQLのパフォーマンスを向上させる機能です。標準のオブジェクトテーブルには含まれるがクエリには不要なフィールド(監査フィールドなど)を除外することで、データベースレベルでのフルスキャンや結合操作を削減します。この機能は開発者が直接作成することはできず、Salesforceサポートに依頼して有効化する必要があります。1,000万件を超えるような大規模データ(LDV)環境でのパフォーマンス改善に非常に有効です。

例題2ロジックとプロセスの自動化

Queueable Apexを実行する際、ガバナ制限などの回復不能なエラーが発生した場合でも、実行状態を監視し、必要に応じてクリーンアップ処理や再試行のロジックを実行するための最も適切な手法はどれですか。

  1. Batchableインターフェースのfinishメソッド内で、失敗したレコードを特定して再実行する。
  2. System.Finalizerインターフェースを実装したクラスを作成し、Queueableジョブにアタッチする。
  3. try-catchブロックを使用してLimitExceptionを捕捉し、catch内で再度ジョブをエンキューする。
  4. Futureメソッドをチェーン化し、各ステップの終了時にカスタムオブジェクトにログを書き込む。
  5. トリガー内で静的変数を使用してジョブの実行状態を管理し、エラー時にProcess Builderを起動する。
解答と解説を見る

正解: System.Finalizerインターフェースを実装したクラスを作成し、Queueableジョブにアタッチする。

正解は「System.Finalizerインターフェースを実装したクラスを作成し、Queueableジョブにアタッチする。」です。Transaction Finalizersを使用すると、Queueableジョブが正常に終了したか制限エラーなどで異常終了したかに関わらず、実行後のアクションを定義できます。LimitExceptionはApexの標準的なtry-catchでは捕捉できませんが、Finalizerは制限エラー時にも実行されるため、ログの記録や再試行のスケジュールを確実に行うことが可能です。

例題3ユーザインターフェース

Lightning Web コンポーネント (LWC) で @wire を使用してデータを取得している場合、命令的なメソッド呼び出しによってレコードを更新した後に、キャッシュを無効化して wired プロパティを最新の状態に更新するための標準的な手法はどれですか?

  1. 取得したデータの data プロパティのみを refreshApex に渡す
  2. wired メソッドの success コールバックを再実行する
  3. 更新されたレコードの ID を getRecordNotifyChange に渡す
  4. ワイヤサービスの結果オブジェクト全体を refreshApex に渡す
  5. コンポーネントを window.location.reload() で再読み込みする
解答と解説を見る

正解: ワイヤサービスの結果オブジェクト全体を refreshApex に渡す

Lightning Web Components (LWC) で @wire でデコレートされたプロパティや関数を最新化するには、refreshApex 関数を使用します。この関数の引数には、@wire から受け取った結果オブジェクト(data と error を含むオブジェクト全体)を渡す必要があります。これにより、キャッシュされたデータが期限切れとしてマークされ、新しいデータがサーバーから再取得されます。正解は『ワイヤサービスの結果オブジェクト全体を refreshApex に渡す』です。

例題4テスト、デバッグ、リリース

ある開発者が、複雑なビジネスロジックを持つ Apex クラスの単体テストを作成しています。このクラスは、複数の外部 Web サービスを呼び出し、データベースに対して多数の更新を行います。開発者は、外部サービスへの実際の依存を排除し、特定の実行パスをテストするためにモックオブジェクトを使用したいと考えています。実行時に依存関係を動的に置き換えるための最も柔軟な手法はどれですか。

  1. WebServiceMock インターフェースを使用して、SOAP サービスの呼び出しをシミュレートする。
  2. テスト実行時に Test.isRunningTest() を使用して、条件分岐によりモックデータを挿入する。
  3. Test.loadData() を使用して、静的リソースからテスト用データをデータベースに事前にロードする。
  4. HttpCalloutMock インターフェースを実装して、静的なレスポンスを返すクラスを作成する。
  5. System.StubProvider インターフェースを実装するクラスを作成し、Test.createStub() を使用してモックオブジェクトを生成する。
解答と解説を見る

正解: System.StubProvider インターフェースを実装するクラスを作成し、Test.createStub() を使用してモックオブジェクトを生成する。

正解は『System.StubProvider インターフェースを実装するクラスを作成し、Test.createStub() を使用してモックオブジェクトを生成する』です。Apex Stub API(StubProvider)を使用すると、定義済みのインターフェースやクラスのメソッド呼び出しを動的にインターセプトし、カスタムの振る舞いを定義できます。これにより、HttpCalloutMock や WebServiceMock よりも広範なロジックのモック化が可能になり、複雑な依存関係を持つクラスの単体テストにおいて、外部サービスだけでなく内部メソッドの動作も分離してテストできるようになります。Test.isRunningTest() による分岐はコードの可読性を下げ、密結合を招くため、Stub API の利用が推奨されます。

例題5パフォーマンス

大規模なデータセットを扱うVisualforceページにおいて、ビューステート(View State)のサイズ制限を超過するエラーが発生しました。この制限を回避し、ページのパフォーマンスを向上させるために、開発者が検討すべき最も適切なアプローチはどれですか。

  1. カスタムコントローラの代わりに標準コントローラのみを使用するようにページを書き換える
  2. 計算結果や一時的なデータ保持に transient キーワードを使用する
  3. ページで使用される全ての変数を public から private に変更する
  4. コントローラ拡張を実装してSOQLクエリを複数のメソッドに分割する
  5. VisualforceタグをすべてHTMLタグとJavaScriptリモート処理に置き換える
解答と解説を見る

正解: 計算結果や一時的なデータ保持に transient キーワードを使用する

正解は「transient キーワードを使用する」です。Visualforceのビューステートは、リクエスト間でページの状態を維持するためにサーバーとクライアント間で転送されるデータ量ですが、これには135KBの制限があります。transientキーワードを変数宣言に付与することで、その変数はシリアライズされず、ビューステートに含まれなくなるため、制限の回避に非常に効果的です。計算結果、一時的なコレクション、あるいはページ更新のたびに再計算・再取得が可能なデータに対して適用することが推奨されます。

例題6上級デベロッパーの基本

Queueable Apexを使用して非同期処理を実装しています。ガバナ制限の超過や予期せぬ例外によってジョブが失敗した場合でも、確実にリソースのクリーンアップやエラーログの保存を実行したいと考えています。この要件を満たすために使用すべき最適な手法はどれですか。

  1. Transaction Finalizers(System.Finalizerインターフェース)の実装
  2. プラットフォームイベントの即時公開
  3. Batch Apexへの書き換えとfinishメソッドの利用
  4. Futureメソッドへの移行と例外ログオブジェクトの作成
  5. Queueableクラス内でのtry-catch-finallyブロックの単純な使用
解答と解説を見る

正解: Transaction Finalizers(System.Finalizerインターフェース)の実装

正解は『Transaction Finalizers(System.Finalizerインターフェース)の実装』です。Transaction Finalizersは、Queueableジョブの結果に関わらず(成功、未捕捉の例外、制限超過による失敗など)、ジョブの完了後に特定のアクションを実行できる機能です。通常のtry-catchブロックでは、LimitException(ガバナ制限超過)などの致命的なエラーを補足できませんが、Finalizerを使用することで、そのような状況下でも後続の処理や通知、リトライロジックを安全に実行することが可能になります。これにより、非同期処理の信頼性とメンテナンス性が大幅に向上します。

Salesforce認定 Platform デベロッパー上級の重要用語

カスタムメタデータ型
アプリケーションの構成設定を保存するために使用されるレコードです。カスタムオブジェクトとは異なり、メタデータとして扱われるため、SOQLクエリを発行してもガバナ制限の件数にカウントされず、サンドボックスや本番環境への移行も容易です。ビジネスロジック内で動的に値を参照する際に非常に有効で、開発の柔軟性とメンテナンス性を向上させます。
Batch Apex
大量のレコードを数千件単位の小さなチャンクに分割して非同期に処理する仕組みです。Database.Batchableインターフェースを実装し、start、execute、finishの3つのメソッドで構成されます。ガバナ制限を回避しながら、数百万件規模のデータ更新や複雑な計算を行う際に利用され、共有制限やヒープサイズ制限の緩和に寄与します。
Lightning Web Components (LWC)
現代のWeb標準に基づいて構築されたプログラミングモデルです。Web Components標準に準拠しており、軽量で高速なパフォーマンスを提供します。PDII試験では、Auraとの相互運用性や、JavaScriptの標準機能を用いたコンポーネント開発、ライフサイクルメソッド(connectedCallback、renderedCallback等)の適切な利用方法が問われます。
Test.startTest() / Test.stopTest()
Apexテストにおいてガバナ制限をリセットし、非同期処理を強制的に実行するためのメソッドです。startTestからstopTestの間で実行されるコードには独立した制限が適用され、stopTestが呼ばれた時点で、その間の@futureやQueueableなどの非同期処理が完了します。これにより、非同期処理の結果を後続のAssertで確実に検証できるようになります。
クエリプランツール
SOQLクエリの実行効率を分析し、インデックスの使用状況や相対的なコストを可視化する開発者コンソールのツールです。パフォーマンスの低いクエリを特定し、最適化するために不可欠です。各クエリプランのコストを確認し、最も効率的なプラン(通常は1.0未満のコスト)を選択するための指標として活用されます。
動的なApex
実行時にオブジェクト名やフィールド名を決定して処理を行う手法です。Schemaクラスを使用したメタ情報の取得や、Database.queryメソッドでの動的SOQL構築などが含まれます。汎用的なコンポーネントや、特定のオブジェクトに依存しないロジックを開発する際に必須となる技術であり、コードの再利用性を高め、複雑な要件に柔軟に対応するために使用されます。
Queueable Apex
futureメソッドの機能を拡張した非同期処理手法です。IDatabase.QueryLocatorではなく特定のジョブIDを返し、ジョブの監視や連鎖実行が可能です。引数にsObjectやカスタムApex型などの複雑なデータ型を渡せる点がfutureメソッドとの大きな違いです。非同期処理の実行順序を制御したい場合や、動的な処理フローが必要な場面で推奨されます。
Lightning Message Service (LMS)
LWC、Aura、Visualforceの間でメッセージを送受信するための標準的な通信フレームワークです。異なるフレームワークで構築されたコンポーネントが同一ページに混在する場合でも、パブリッシュ/サブスクライブモデルを通じて疎結合な通信を可能にします。複数の技術スタックを統合する高度なUI開発に不可欠な機能です。

よくある質問

Salesforce認定 Platform デベロッパー上級の問題はスキルサートで何問解けますか?
全313問・5分野の問題を用意しています。問題は出題範囲に沿って随時追加しています。
無料で使えますか?
無料プランで週10回の演習(1回10問)と、毎日の「今日の1問」を利用できます。解説を読み、わからない点はAIに質問できます。
ここの問題は過去問ですか?
過去問ではありません。出題範囲に沿ってAIが作成した演習問題です。すべて解説つきで、間違えた問題は繰り返し解けます。

Salesforce認定 Platform デベロッパー上級の対策はアプリで

AIが毎週生成する新作問題・ランクマッチ・週次ランキング・AI診断で「続けられる」資格学習を。無料で始められます。