コードをデバッグする
Apex Replay Debugger の設定が完了しました。次は、Apex コードを修正するためのテストとデバッグを行いましょう。
メタデータを組織にリリースする
- Visual Studio Code で、
classesフォルダーを右クリックして、[SFDX: Deploy Source To Org (SFDX: 組織にソースをリリース)] を選択します。

Apex テストを実行する
- Visual Studio Code で [View (表示)] メニューをクリックし、[Command Palette... (コマンドパレット...)] を選択します。または、Ctrl + Shift + P (Windows または Linux) または Cmd + Shift + P (macOS) のキーボードショートカットを使用して、コマンドパレットを開くこともできます。
- 検索ボックスに
apex test(apex テスト) と入力し、[SFDX: Run Apex Tests (SFDX: Apex テストを実行)] を選択します。![[SFDX: Run Apex Tests (SFDX: Apex テストを実行)] コマンドに絞り込まれたコマンドパレット](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/projects/find-and-fix-bugs-with-apex-replay-debugger/apex-replay-debugger-debug-your-code/images/ja-JP/e535327df20641c174c41ba4e6133f74_i.12.jpg)
-
AccountServiceTest を選択します。

- [Output (出力)] パネルにテスト結果が表示されます。残念ながら Apex テストに失敗しました。😯

このエラーメッセージは、取引先の株式コード項目に間違った値が割り当てられたことを示します。コード内にチェックポイントを設定し、テストを再実行してデバッグログを収集し、デバッグログを再生してコードバグを見つけましょう。🐞
ブレークポイントとチェックポイントを設定する
デバッグ時に、ブレークポイントは実行プログラムに特定の行番号で一旦停止するように指示し、開発者はその時点での変数値を調べられます。チェックポイントは、Apex コードのデバッグに固有の機能で、ブレークポイントの一種ですが、ヒープダンプを取得することによってより詳細な情報が得られます。ブレークポイントは何個でも設定できますが、同時に設定できるチェックポイントは 5 個までです。ブレークポイントに比べてチェックポイントは、すべてのローカル変数、静的変数、トリガーコンテキスト変数について、より充実した情報を提供します。
[Debug: Toggle Breakpoint (デバッグ: ブレークポイントを切り替え)] コマンドと [SFDX: Toggle Checkpoint (SFDX: チェックポイントを切り替え)] コマンドを使用して、それぞれブレークポイントとチェックポイントをオンまたはオフに切り替えます。ブレークポイントとチェックポイントを設定すると、行番号の横にインジケーターが表示されます。ブレークポイントとチェックポイントを区別するために、ブレークポイントは塗りつぶされた赤いドットで表示され、チェックポイントは中心に線が入った赤い円で表示されます。
- Visual Studio Code で
AccountService.clsファイルを開きます。
-
Account newAcct = new Account(が含まれる行の行番号の左側をクリックしてブレークポイントを設定します。
-
return newAcct;ステートメントが含まれる行にカーソルを置きます。
- コマンドパレットを開きます。
- 検索ボックスに
sfdx checkpoint(sfdx チェックポイント) と入力し、[SFDX: Toggle Checkpoint (SFDX: チェックポイントを切り替え)] を選択します。![[SFDX: Toggle Checkpoint (SFDX: チェックポイントを切り替え)] コマンドに絞り込まれたコマンドパレット](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/projects/find-and-fix-bugs-with-apex-replay-debugger/apex-replay-debugger-debug-your-code/images/ja-JP/a6a798b93c121b430fac963dbc3f042c_i.16.png)
チェックポイントが設定されたことを示すインジケーターが行番号の横に表示されます。
- コマンドパレットを開き、検索ボックスに
sfdx checkpoint(sfdx チェックポイント) と入力し、[SFDX: Update Checkpoints in Org (SFDX: 組織のチェックポイントを更新)] を選択します。Apex コードが実行されたときにヒープダンプが収集されるように、Salesforce にチェックポイントについて通知する必要があります。Apex コードを変更したり、チェックポイントを切り替えたりしたときには、もう一度このコマンドを実行して同期を保ちます。![[SFDX: Update Checkpoints (SFDX: チェックポイントを更新)] コマンドに絞り込まれたコマンドパレット](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/projects/find-and-fix-bugs-with-apex-replay-debugger/apex-replay-debugger-debug-your-code/images/ja-JP/3c2a66a04e54890031966f424c3159ed_i.18.png)
Apex テストを実行してデバッグログを取得する
ブレークポイントとチェックポイントが設定されたため、次は Apex テストを再実行して再生対応デバッグログを生成しましょう。
- Visual Studio Code で [View (表示)] メニューをクリックし、[Command Palette... (コマンドパレット...)] を選択します。または、Ctrl + Shift + P (Windows または Linux) または Cmd + Shift + P (macOS) のキーボードショートカットを使用して、コマンドパレットを開くこともできます。
- 検索ボックスに
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 テストを呼び出す)] コマンドに絞り込まれたコマンドパレット](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/projects/find-and-fix-bugs-with-apex-replay-debugger/apex-replay-debugger-debug-your-code/images/ja-JP/6739b4bae1262c4279a298717b5b6dfc_i.19.png)
- コマンドパレットを開き、検索ボックスに
apex test(apex テスト) と入力し、[SFDX: Run Apex Tests (SFDX: Apex テストを実行)] を選択します。![[SFDX: Run Apex Tests (SFDX: Apex テストを実行)] コマンドに絞り込まれたコマンドパレット](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/projects/find-and-fix-bugs-with-apex-replay-debugger/apex-replay-debugger-debug-your-code/images/ja-JP/2e82d3ab44f3a1dea7b83d9c9c4dc538_i.20.png)
-
AccountServiceTest を選択します。

- Apex コードは変更していないため、テストは再び失敗するはずです。変わった点は、今回はバグを見つけて修正するのに役立つ再生対応デバッグログとチェックポイントがあるということです。🐞

- コマンドパレットを開き、検索ボックスに
sfdx get(sfdx 取得) と入力し、[SFDX: Get Apex Debug Logs... (SFDX: Apex デバッグログを取得...)] を選択します。数秒後、ダウンロードするデバッグログを選択するように求められます。![[SFDX: Get Apex Debug Logs (SFDX: Apex デバッグログを取得)] コマンドに絞り込まれたコマンドパレット](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/projects/find-and-fix-bugs-with-apex-replay-debugger/apex-replay-debugger-debug-your-code/images/ja-JP/803f525d2a78dfac0d2158282ea7f8f9_i.23.png)
- 最近の Apex テスト実行に関連付けられたデバッグログを選択します。通常、これはリストの最初のエントリです。数秒後、ダウンロードされたデバッグログが Visual Studio Code で開きます。

Apex デバッグログを再生する
このステップでは最近ダウンロードしたデバッグログを再生します。ただし、チームの別の開発者が生成して共有したデバッグログを再生することも簡単にできます。
- Visual Studio Code で、前のステップでダウンロードしたデバッグログがまだ開いていない場合は開きます。ダウンロードした他のデバッグログは Visual Studio Code の
.sfdx/tools/debug/logsフォルダーにあります。
- デバッグログ内の任意の行を右クリックし、[SFDX: Launch Apex Replay Debugger with Current File (SFDX: 現在のファイルで Apex Replay Debugger を起動)] を選択します。数秒後、Visual Studio Code で [Debug (デバッグ)] サイドバーが開き、コードを順に実行していくことができます。

- デバッグツールバーの
をクリックして最初のブレークポイントまで続行します。複数のブレークポイントを設定した場合は、デバッガーが AccountService.cls の return newAcct;ステートメントのチェックポイントに到達するまで
のクリックを繰り返します。
- Apex Replay Debugger は、前のステップで設定したチェックポイントがある AccountService.cls の
return newAcct;ステートメントを含む行で一時停止します。[Debug (デバッグ)] サイドバーに範囲内の現在の変数値が表示されます。createAccountメソッドに渡されたtickerSymbol引数が、期待される値である「CRM」になっていることを確認できるため、コードがメソッドに正しい値を渡していることがわかります。ここまでは問題ないですね。🙂
- [Debug (デバッグ)] サイドバーで newAcct 変数を展開すると、
TickerSymbolプロパティ値の「SFDC」が、createAccountメソッドに渡されたtickerSymbol引数値の「CRM」と一致していません。これはおかしいですね。🤔
- AccountService.cls コードを調べると、誤字があることがわかります。コードは、
TickerSymbol = accountNumberと間違った引数を割り当てています。バグが見つかりました。🐞
- デバッグツールバーの
をクリックしてデバッグセッションを終了します。
修正したメタデータを組織にリリースする
-
tickerSymbol引数をTickerSymbol項目に割り当てるように AccountService.cls のコードを修正します。TickerSymbol = tickerSymbol
- ファイルを保存します。
- ファイル内の任意の行を右クリックし、[SFDX: Deploy This Source to Org (SFDX: このソースを組織にリリース)] を選択します。
Apex テストを実行して修正を検証する
更新したコードをリリースしたら、Apex テストを再実行して修正を検証しましょう。
- コマンドパレットを開きます。
- 検索ボックスに
apex test(apex テスト) と入力し、[SFDX: Run Apex Tests (SFDX: Apex テストを実行)] を選択します。![[SFDX: Run Apex Tests (SFDX: Apex テストを実行)] コマンドに絞り込まれたコマンドパレット](https://res.cloudinary.com/hy4kyit2a/f_auto,fl_lossy,q_70/learn/projects/find-and-fix-bugs-with-apex-replay-debugger/apex-replay-debugger-debug-your-code/images/ja-JP/2e82d3ab44f3a1dea7b83d9c9c4dc538_i.34.png)
-
AccountServiceTest を選択します。

- [Output (出力)] パネルにテスト結果が表示されます。今度は Apex テストに合格しました。🥳

これで完了です。ここでは、Apex Replay Debugger と Visual Studio Code 向け Salesforce 拡張機能を使用して Apex の開発、テスト、デバッグを行いました。
[Verify Step (ステップを確認)] をクリックすると、ハンズオン組織でデバッグセッションを確認し、バッジを獲得できます。
リソース
- 外部サイト: Apex Replay Debugger for Visual Studio Code (Visual Studio Code 向け Apex Replay Debugger)
- 動画: YouTube: Banish the Bugs with the Apex Replay Debugger (Apex Replay Debugger でバグを排除する)
- 動画: YouTube: Salesforce Development with Visual Studio Code (Visual Studio Code を使用した Salesforce 開発)
- 動画: YouTube: Be An Efficient Salesforce Developer with VS Code (VS Code を使用した Salesforce 開発の効率向上)
- Apex 開発者ガイド: Apex のデバッグ
- ヘルプ: デバッグログの設定
- 外部サイト: Debugging in Visual Studio Code (Visual Studio Code でのデバッグ)
