デバッグと診断の実行
学習の目的
この単元を完了すると、次のことができるようになります。
- Lightning プラットフォームで使用可能なデバッグ機能について理解する
- 開発者コンソールのログインスペクターを使用してデバッグログを調べる
一緒にトレイルを進みましょう
エキスパートの説明を見ながらこのステップを実行したい場合は、次の動画をご覧ください。これは「Trail Together」(一緒にトレイル) シリーズの一部です。
(この動画は 40:30 の時点から始まります。戻して手順の最初から見直す場合はご注意ください。)
Force.com でのデバッグについて
Lightning プラットフォームのデバッグは Visual Studio と同じくらい簡単だと言うつもりはありません。正直なところ、似てさえいません。マルチテナントクラウド環境のデバッグには特有の課題があります。だからといって、Lightning プラットフォームでデバッグや診断作業ができないわけではありません。これまで馴染んでいたデバッグとは異なるだけです。よい知らせとして、この分野で Salesforce は最近大きな進歩を遂げており、リリースごとに機能が強化されています。
頼れる味方、デバッグログ
Lightning プラットフォーム環境では、コードのデバッグと分析に必要な情報のほとんどがデバッグログで見つかります。デバッグログへの出力方法についてはすでに説明しました。次のような方法で出力します。
System.debug('My Debug Message');
次のいずれかのログレベルを指定することもできます。
- NONE
- ERROR
- WARN
- INFO
- DEBUG
- FINE
- FINER
- FINEST
上記のレベルは低い順であり、各レベルには下位のレベルが含まれます。つまり FINEST レベルを選択すると、ERROR、WARN、INFO などのメッセージがすべてログに記録されます。複数のデバッグログカテゴリもあり、ログレベルに応じてログに記録される情報量が決まります。さまざまなユーザーのデバッグについての詳細は、「リソース」のリンクを参照してください。
では、なぜこのすべてを知ることがそれほど重要なのでしょうか?
制限についてはすでに多くを説明していますが、成功するうえで制限を理解することは不可欠であるため、もう少しお付き合いください。各デバッグログは最大 20 MB です。この量を超えると、必要な情報を参照できなくなることがあります。さらに、各組織が保持できるデバッグログは最大 1,000 MB です。最も古いログから上書きされます。
デバッグログは、アプリケーションに関するデバッグ情報を取得する主要な手段であるため、これらの制限を超えないようにする必要があります。エラーメッセージを参照できなければ、問題に対処しようがありません。この種の問題を避ける方法についてのヒントは、「リソース」にある高度な Apex のデバッグおよびベストプラクティスに関するリンクを参照してください。
ログインスペクターを使用する
開発者コンソールは、過去数回のリリースでかなり拡張されました。より便利になった機能の 1 つがログインスペクターです。そのしくみを確認するために、手順に従い、匿名コードを実行して結果を表示してみましょう。
- [設定] で、[<あなたの名前>] > [開発者コンソール]あなたの名前> をクリックして開発者コンソールを開きます。
- [Debug (デバッグ)] > [Change Log Levels (ログレベルの変更)] を選択します。
- [General Trace Setting for You (全般トレース設定)] で [Add/Change (追加/変更)] リンクをクリックします。
- すべての列のデバッグレベルとして [INFO (情報)] を選択します。
- [完了] をクリックします。
- [完了] をクリックします。
- [Debug (デバッグ)] > [Perspective Manager (パースペクティブマネージャー)] を選択します。
- [All (Predefined) (すべて (定義済み))] を選択し、[Set Default (デフォルトの設定)] をクリックします。
- これをデフォルトのパースペクティブに変更するには、[Yes (はい)] をクリックします。
- 開発者コンソールの [Perspective (パースペクティブ)] ウィンドウを閉じます。
- [Debug (デバッグ)] > [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] を選択します。
- 既存のコードを削除して、次のスニペットを挿入します。
System.debug(LoggingLevel.INFO, 'My Info Debug Message'); System.debug(LoggingLevel.FINE, 'My Fine Debug Message'); List<Account> accts = [SELECT Id, Name FROM Account]; for(Account a : accts) { System.debug('Account Name: ' + a.name); System.debug('Account Id: ' + a.Id); }
- [Open Log (ログを開く)] が選択されていることを確認し、[Execute (実行)] をクリックします。
- [Debug (デバッグ)] > [Switch Perspective (パースペクティブを切り替え)] > [All (Predefined) (すべて (定義済み))] を選択します。
- [Timeline (タイムライン)] タブと [Executed Units (実行単位)] タブで結果を調べます。
- [Execution Log (実行ログ)] で、[Filter (検索条件)] オプションを選択し、「FINE」(詳細) と入力します。Apex コードのデバッグレベルを INFO (情報) に設定しているため、結果は表示されません。
- [Debug (デバッグ)] > [Change Log Levels (ログレベルの変更)] を選択します。
- [General Trace Setting for You (全般トレース設定)] で [Add/Change (追加/変更)] リンクをクリックします。
- ApexCode と Profiling の DebugLevel を 「FINEST (最も詳細)」 に変更します。
- [完了] をクリックします。
- [完了] をクリックします。
- [Debug (デバッグ)] > [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] を選択します。
- 既存のコードはそのままにして [Execute (実行)] をクリックします。
- [Execution Log (実行ログ)] で、[Filter (検索条件)] オプションを選択し、「FINE」(詳細) と入力します。検索条件では、大文字と小文字が区別されます。これで「My Fine Debug Message」が表示されます。[Logs (ログ)] タブで 2 つの最新ログ間のサイズの違いも確認します。
チェックポイントを設定する
.NET 開発者の皆さんなら、アプリケーションにブレークポイントを設定することには慣れていらっしゃると思います。ただし、全ユーザーがリソースを共有するクラウドベースのマルチテナント環境で、誰でも実行を停止してデータベース接続を開いたままにできるようにすると壊滅的な事態になります。
チェックポイントは、コード行に関して多くの詳細な実行情報を明らかにするという点ではブレークポイントに似ています。ただ、その行で実行を停止しません。
そのしくみを確認するために、手順に従って前の「実行コンテキストの理解」単元で作成したコード行にチェックポイントを設定してみましょう。AccountTrigger のハンドラーおよびトリガーコードをまだ作成していない場合は、続行する前にこの単元に戻って該当するセクションを完了してください。
- [設定] で、[<あなたの名前>] > [開発者コンソール]あなたの名前> をクリックして開発者コンソールを開きます。
- [File (ファイル)] > [Open (開く)] を選択します。
- エンティティ種別として [Classes (クラス)]、エンティティとして [AccountHandler] を選択します。
- [Open (開く)] をクリックします。
- カーソルを 10 行目の左余白の上に置いて 1 回クリックします。行番号の横に赤いドットが表示されます。
- [Logs (ログ)] パネルで最新のエントリをダブルクリックしてデバッグログを開きます。
- [Debug (デバッグ)] > [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] を選択します。
- 既存のコードを削除して、次のスニペットを挿入します。
Account acct = new Account( Name='Test Account 3', Phone='(415)555-8989', NumberOfEmployees=30, BillingCity='San Francisco'); insert acct;
- [Open Log (ログを開く)] が選択されていることを確認し、[Execute (実行)] をクリックします。
- [Checkpoints (チェックポイント)] タブをクリックし、表示された最初のエントリをダブルクリックします。チェックポイントインスペクターが表示されます。
- [Symbols (記号)\] タブで、実行ツリー内のノードを展開します。[Key (キー)\] 列と [Value (値)] 列を確認します。
- [Heap (ヒープ)] タブをクリックします。[Count (件数)] 列と [Total Size (合計サイズ)] 列を確認します。
次のステップ
これで Apex の基本が理解できました。Salesforce ジャーニーを続けていきましょう。既存の開発スキルを活かして Salesforce アプリケーションクラウドですばやくアプリケーションを構築するには、開発者向け初級トレイルを進めてください。
リソース
- 『Apex コード開発者ガイド』の「デバッグログ」
- 『Apex コード開発者ガイド』の「ログの操作」
- ログインスペクターの使用例
- Apex コードへのチェックポイントの設定