Skip to main content
Join the Agentforce Hackathon on Nov. 18-19 to compete for a $20,000 Grand Prize. Sign up now. Terms apply.

コードをデバッグする

メモ

メモ

日本語で受講されている方へ
Challenge は日本語の Trailhead Playground で開始し、かっこ内の翻訳を参照しながら進めていってください。Challenge での評価は英語データを対象に行われるため、英語の値のみをコピーして貼り付けるようにしてください。日本語の組織で Challenge が不合格だった場合は、(1) この手順に従って [Locale (地域)] を [United States (米国)] に切り替え、(2) [Language (言語)] を [English (英語)] に切り替えてから、(3) [Check Challenge (Challenge を確認)] ボタンをクリックしてみることをお勧めします。

翻訳版 Trailhead を活用する方法の詳細は、自分の言語の Trailhead バッジを参照してください。

Apex Replay Debugger の設定が完了しました。次は、Apex コードを修正するためのテストとデバッグを行いましょう。

メタデータを組織にリリースする

  1. Visual Studio Code で、classes フォルダーを右クリックして、[SFDX: Deploy Source To Org (SFDX: 組織にソースをリリース)] を選択します。
メモ

[SFDX: Deploy Source To Org (SFDX: 組織にソースをリリース)] オプションを使用できない場合、前の手順に従って Salesforce CLI で組織として Trailhead Playground を承認したことを確認してください。

Apex テストを実行する

  1. Visual Studio Code で [View (表示)] メニューをクリックし、[Command Palette... (コマンドパレット...)] を選択します。または、Ctrl + Shift + P (Windows または Linux) または Cmd + Shift + P (macOS) のキーボードショートカットを使用して、コマンドパレットを開くこともできます。
  2. 検索ボックスに apex test (apex テスト) と入力し、[SFDX: Run Apex Tests (SFDX: Apex テストを実行)] を選択します。
    [SFDX: Run Apex Tests (SFDX: Apex テストを実行)] コマンドに絞り込まれたコマンドパレット
  3. AccountServiceTest を選択します。
    Visual Studio Code から呼び出す Apex テストクラス
  4. [Output (出力)] パネルにテスト結果が表示されます。残念ながら Apex テストに失敗しました。😯
    Visual Studio Code で失敗メッセージが表示されている Apex テスト結果

このエラーメッセージは、取引先の株式コード項目に間違った値が割り当てられたことを示します。コード内にチェックポイントを設定し、テストを再実行してデバッグログを収集し、デバッグログを再生してコードバグを見つけましょう。🐞

ブレークポイントとチェックポイントを設定する

デバッグ時に、ブレークポイントは実行プログラムに特定の行番号で一旦停止するように指示し、開発者はその時点での変数値を調べられます。チェックポイントは、Apex コードのデバッグに固有の機能で、ブレークポイントの一種ですが、ヒープダンプを取得することによってより詳細な情報が得られます。ブレークポイントは何個でも設定できますが、同時に設定できるチェックポイントは 5 個までです。ブレークポイントに比べてチェックポイントは、すべてのローカル変数、静的変数、トリガーコンテキスト変数について、より充実した情報を提供します。

[Debug: Toggle Breakpoint (デバッグ: ブレークポイントを切り替え)] コマンドと [SFDX: Toggle Checkpoint (SFDX: チェックポイントを切り替え)] コマンドを使用して、それぞれブレークポイントとチェックポイントをオンまたはオフに切り替えます。ブレークポイントとチェックポイントを設定すると、行番号の横にインジケーターが表示されます。ブレークポイントとチェックポイントを区別するために、ブレークポイントは塗りつぶされた赤いドットで表示され、チェックポイントは中心に線が入った赤い円で表示されます。

  1. Visual Studio Code で AccountService.cls ファイルを開きます。
  2. Account newAcct = new Account( が含まれる行の行番号の左側をクリックしてブレークポイントを設定します。
    Visual Studio Code で AccountService.cls の行に設定されているブレークポイント
  3. return newAcct; ステートメントが含まれる行にカーソルを置きます。
    Visual Studio Code で AccountService.cls ファイルのチェックポイントを追加する行に置かれたカーソル
  4. コマンドパレットを開きます。
  5. 検索ボックスに sfdx checkpoint (sfdx チェックポイント) と入力し、[SFDX: Toggle Checkpoint (SFDX: チェックポイントを切り替え)] を選択します。
    [SFDX: Toggle Checkpoint (SFDX: チェックポイントを切り替え)] コマンドに絞り込まれたコマンドパレット
    チェックポイントが設定されたことを示すインジケーターが行番号の横に表示されます。
    Visual Studio Code で AccountService.cls の行に設定されているチェックポイント
  6. コマンドパレットを開き、検索ボックスに sfdx checkpoint (sfdx チェックポイント) と入力し、[SFDX: Update Checkpoints in Org (SFDX: 組織のチェックポイントを更新)] を選択します。Apex コードが実行されたときにヒープダンプが収集されるように、Salesforce にチェックポイントについて通知する必要があります。Apex コードを変更したり、チェックポイントを切り替えたりしたときには、もう一度このコマンドを実行して同期を保ちます。
    [SFDX: Update Checkpoints (SFDX: チェックポイントを更新)] コマンドに絞り込まれたコマンドパレット
メモ

ブレークポイントは何個でも設定できますが、同時に設定できるチェックポイントは 5 個までです。このプロジェクトでは、少なくとも上記のチェックポイントを AccountService.cls に設定する必要があります。

チェックポイントを更新したら速やかにデバッグログを生成し、Apex Replay Debugger で再生してください。チェックポイントは 30 分で失効し、ヒープダンプは 1 日で失効します。

Apex テストを実行してデバッグログを取得する

ブレークポイントとチェックポイントが設定されたため、次は Apex テストを再実行して再生対応デバッグログを生成しましょう。

  1. Visual Studio Code で [View (表示)] メニューをクリックし、[Command Palette... (コマンドパレット...)] を選択します。または、Ctrl + Shift + P (Windows または Linux) または Cmd + Shift + P (macOS) のキーボードショートカットを使用して、コマンドパレットを開くこともできます。
  2. 検索ボックスに sfdx replay (sfdx 再生) と入力し、[SFDX: Turn On Apex Debug Log for Replay Debugger (SFDX: Replay Debugger 用の Apex デバッグログを有効化)] を選択します。これにより、再生対応デバッグログを 30 分間生成する追跡フラグが作成されます。時間は [Debug Logs (デバッグログ)] ページの [Setup (設定)] で変更できます。
    [SFDX: Invoke Apex Tests (SFDX: Apex テストを呼び出す)] コマンドに絞り込まれたコマンドパレット
  3. コマンドパレットを開き、検索ボックスに apex test (apex テスト) と入力し、[SFDX: Run Apex Tests (SFDX: Apex テストを実行)] を選択します。
    [SFDX: Run Apex Tests (SFDX: Apex テストを実行)] コマンドに絞り込まれたコマンドパレット
  4. AccountServiceTest を選択します。
    Visual Studio Code から呼び出す Apex テストクラス
  5. Apex コードは変更していないため、テストは再び失敗するはずです。変わった点は、今回はバグを見つけて修正するのに役立つ再生対応デバッグログとチェックポイントがあるということです。🐞
    Visual Studio Code で失敗メッセージが表示されている Apex テスト結果
  6. コマンドパレットを開き、検索ボックスに sfdx get (sfdx 取得) と入力し、[SFDX: Get Apex Debug Logs... (SFDX: Apex デバッグログを取得...)] を選択します。数秒後、ダウンロードするデバッグログを選択するように求められます。
    [SFDX: Get Apex Debug Logs (SFDX: Apex デバッグログを取得)] コマンドに絞り込まれたコマンドパレット
  7. 最近の Apex テスト実行に関連付けられたデバッグログを選択します。通常、これはリストの最初のエントリです。数秒後、ダウンロードされたデバッグログが Visual Studio Code で開きます。
    ダウンロードするデバッグログ

Apex デバッグログを再生する

このステップでは最近ダウンロードしたデバッグログを再生します。ただし、チームの別の開発者が生成して共有したデバッグログを再生することも簡単にできます。

メモ

デバッグログを再生するときには、デバッグログを生成した Apex ソースコードと同じものが Salesforce DX プロジェクトに含まれていることを確認してください。そうしないと、デバッガーが参照する行番号や変数について混乱が生じ、バグを発見できない可能があります。デバッグログは、ログカテゴリが Visualforce の場合はログレベル FINER または FINEST、ログカテゴリが Apex コードの場合はログレベルが FINEST で生成する必要があります。

  1. Visual Studio Code で、前のステップでダウンロードしたデバッグログがまだ開いていない場合は開きます。ダウンロードした他のデバッグログは Visual Studio Code の .sfdx/tools/debug/logs フォルダーにあります。
    保存したデバッグログへの移動
  2. デバッグログ内の任意の行を右クリックし、[SFDX: Launch Apex Replay Debugger with Current File (SFDX: 現在のファイルで Apex Replay Debugger を起動)] を選択します。数秒後、Visual Studio Code で [Debug (デバッグ)] サイドバーが開き、コードを順に実行していくことができます。
    Visual Studio Code での Apex Replay Debugger の起動
  3. デバッグツールバーの デバッグツールバーの [Continue (続行)] ボタン をクリックして最初のブレークポイントまで続行します。複数のブレークポイントを設定した場合は、デバッガーが AccountService.cls の return newAcct; ステートメントのチェックポイントに到達するまで デバッグツールバーの [Continue (続行)] ボタン のクリックを繰り返します。
    Visual Studio Code で開始されたデバッグセッション
  4. Apex Replay Debugger は、前のステップで設定したチェックポイントがある AccountService.cls の return newAcct; ステートメントを含む行で一時停止します。[Debug (デバッグ)] サイドバーに範囲内の現在の変数値が表示されます。createAccount メソッドに渡された tickerSymbol 引数が、期待される値である「CRM」になっていることを確認できるため、コードがメソッドに正しい値を渡していることがわかります。ここまでは問題ないですね。🙂
    Visual Studio Code で AccountService.cls 内の行で一時停止しているデバッグセッション
  5. [Debug (デバッグ)] サイドバーで newAcct 変数を展開すると、TickerSymbol プロパティ値の「SFDC」が、createAccount メソッドに渡された tickerSymbol 引数値の「CRM」と一致していません。これはおかしいですね。🤔
    Visual Studio Code で AccountService.cls 内の行で一時停止しているデバッグセッション
  6. AccountService.cls コードを調べると、誤字があることがわかります。コードは、TickerSymbol = accountNumber と間違った引数を割り当てています。バグが見つかりました。🐞
  7. デバッグツールバーの デバッグツールバーの [Stop (停止)] ボタン をクリックしてデバッグセッションを終了します。

修正したメタデータを組織にリリースする

  1. tickerSymbol 引数を TickerSymbol 項目に割り当てるように AccountService.cls のコードを修正します。
    TickerSymbol = tickerSymbol
  2. ファイルを保存します。
  3. ファイル内の任意の行を右クリックし、[SFDX: Deploy This Source to Org (SFDX: このソースを組織にリリース)] を選択します。

Apex テストを実行して修正を検証する

更新したコードをリリースしたら、Apex テストを再実行して修正を検証しましょう。

  1. コマンドパレットを開きます。
  2. 検索ボックスに apex test (apex テスト) と入力し、[SFDX: Run Apex Tests (SFDX: Apex テストを実行)] を選択します。
    [SFDX: Run Apex Tests (SFDX: Apex テストを実行)] コマンドに絞り込まれたコマンドパレット
  3. AccountServiceTest を選択します。
    Visual Studio Code から呼び出す Apex テストクラス
  4. [Output (出力)] パネルにテスト結果が表示されます。今度は Apex テストに合格しました。🥳
    Visual Studio Code に表示されている Apex テスト結果の合格メッセージ

これで完了です。ここでは、Apex Replay Debugger と Visual Studio Code 向け Salesforce 拡張機能を使用して Apex の開発、テスト、デバッグを行いました。

[Verify Step (ステップを確認)] をクリックすると、ハンズオン組織でデバッグセッションを確認し、バッジを獲得できます。

リソース

Salesforce ヘルプで Trailhead のフィードバックを共有してください。

Trailhead についての感想をお聞かせください。[Salesforce ヘルプ] サイトから新しいフィードバックフォームにいつでもアクセスできるようになりました。

詳細はこちら フィードバックの共有に進む