こんにちは。ROBOT PAYMENTでセールスフォースプラットフォーム課で、請求管理ロボ for Salesforce のApp Exchange開発チームに所属している木村です。
今回は、Salesforceプラットフォーム開発で利用されるデバッグ方法をいくつかご紹介したいと思います。
Salesforceの『デバッグログ』について
Salesforceにはデバッグログという標準のログ出力機能が備わっており、組織で発生するイベントを追跡できます。Salesforceプラットフォーム開発でのデバッグにあたっては、当デバッグログを使用することになります。イベントログは、データベース操作、システムプロセス、トランザクション実行時またはシステムプロセス中に発生するエラーなどが記録されます。
デバッグログの生成はユーザーが追跡フラグを設定している場合、その開始日から終了日までの間に開始するトランザクションをユーザーが実行するたびに、システムがデバッグログを作成します。
デバッグログの設定方法の詳細について今回は割愛致しますが、デバッグログには以下のカテゴリとログレベルがあり、 それぞれのカテゴリに合わせてログレベルを設定します。例えば、デバッグログ上でApexコードについて最も詳細なレベルでログを取りたい場合には、Apex コードのカテゴリにてFINESTを設定します。
デバッグログレベル
レベルの低い順に並んでいます。
* NONE
* ERROR
* WARN
* INFO
* DEBUG
* FINE
* FINER
* FINEST
デバッグ方法
当デバッグログを確認する方法として基本的には以下の3つがあります。
1. Salesforce設定画面上にてログを確認する
2. 開発者コンソールにてログを確認する
3. Apex Replay Debugger を使用しVisual Studio Code上で確認する
1. デバッグログを設定して、Salesforce設定画面上にてログを確認するデバッグ方法
Salesforceの設定画面にてデバッグログの確認ができます。有効なユーザー追跡フラグがある場合に、添付画像デバッグログ配下にログを出力します。
ある時点での変数の中身を確認したいなどの時は、System.debug(変数名)を各所に埋め込んで、当画面のデバッグログから『USER_DEBUG』を確認する必要があります。ちなみに、この方法は手間なので普段の開発業務中には使いません。
2. 開発者コンソールにてログを確認する
Salesforceの開発者コンソールは、Salesforce 組織のアプリケーションの作成、デバッグ、およびテストに使用できる一連のツールを備えた統合開発環境になります。右上歯車マークの設定から、開発者コンソールを開くことができます。
以下の画像が実際の開発者コンソール画面です。
画面下の『Logs』タブから、デバッグログ確認ができます。当方法では、上記1の方法でご紹介したように、 有効なユーザー追跡フラグの設定からデバッグログ取得時間の設定をしなくても、画面操作のログがリアルタイムに出力されます。個人的にはこちらの方法でログ確認することが多いです。
また、開発者コンソール上でApexクラスファイルを開き任意の行にチェックポイントをおくことで、その行に到達した時点でのメモリやプロパティの状態を確認することができます。
3. Apex Replay Debugger を使用しVisual Studio Code上で確認する
基本的にVisual Studio Code上で作業することが多いのでこの方法でデバッグすることも多いです。
事前準備はTrailheadにてご確認いただけます。
https://trailhead.salesforce.com/ja/content/learn/projects/find-and-fix-bugs-with-apex-replay-debugger
Apex Replay Debugger とは
Visual Studio Codeの拡張機能で、デバッグログファイルからログ出力時のApex実行を再現できるツールになります。上記2つのデバッグログ確認方法と違い Visual Studio Code上でステップ実行や、チェックポイントを置いたりなどの馴染みのデバッグが可能になります。
基本的な確認手順は以下になります。
- ソースコード上の任意の行にチェックポイントを置く
- チェックポイントを組織に反映
- Apexの実行
- デバッグログの取得
- Visual Studio Code上でデバッグログファイルを開きApex Replay Debuggerを起動
- ステップ確認
ソースコード上の任意の行にチェックポイントを置く まず初めに、Apex Reply Debuggerを組織に対して有効化するため次のコマンドを実行します。
SFDX: Turn On Apex Debug Log for Replay Debugger
処理を中断したりその時点での変数の状態を確認したい行にカーソルを置き、次のコマンドを実行します。
SFDX: Toggle Checkpoint
チェックポイントを組織に反映
チェックポイントをSalesforce組織に反映する必要がありますので、次のコマンドを実行します。
SFDX: Update Checkpoints in Org
Apexの実行
チェックポイントをおいたApexファイルを実行しデバッグログを取得します。画面もしくは、テストコードがあれば該当テストの実行でも取得可能です。取得されたデバッグログログファイルは、.../tools/debug/logs配下に溜まっていきます。デバッグログの取得 次のコマンドで、ログの取得をします。
SFDX: Get Apex Debug Logs
Visual Studio Code上でデバッグログファイルを開きApex Replay Debuggerを起動
デバッグログファイル上で、右クリックから下記コマンドを選択し実行できます。
SFDX: Launch Apex Replay Debugger with Current File
ステップ確認 5にてコマンド実行すると、該当のApexクラスファイルが開き、ステップにて変数など確認可能です。
まとめ
このように、Salesforceプラットフォームでの開発のデバッグ方法は、基本的にデバッグログを頼りにしていくことになります。
Visual Studio Codeで完結するApex Replay Debuggerの使用を個人的には好んでいますが、こちらの利用についてもあくまで過去取れたデバッグログのファイルからログ出力時のApex実行を再現できるのみです。
一般的なWebアプリケーション開発時のような処理途中のブレークポイントからステップを進めていくデバッグ方法とは少し異なるところがもどかしいですが、うまくやっていけたらと思います!
We are hiring!!
ROBOT PAYMENTでは一緒に働く仲間を募集しています!!!
speakerdeck.com
www.robotpayment.co.jp