Skip to main content

チェックポイントでのオブジェクトの検査

学習の目的

この単元を完了すると、次のことができるようになります。
  • Apex コードにチェックポイントを設定する。
  • チェックポイントインスペクターを使用してメモリ内のオブジェクトを分析する。
メモ

メモ

このバッジのハンズオン Challenge は日本語、スペイン語 (LATAM)、ポルトガル語 (ブラジル) に対応しています。Playground の言語を変更するには、こちらの指示に従ってください。日本語等、翻訳された言語と英語に差異がある可能性があります。英語以外の言語での指示に従って Challenge に合格できなかった場合は、[言語] と [地域] をそれぞれ [English]、[アメリカ合衆国] に切り替えてからもう一度お試しください。

Apex コードへのチェックポイントの設定

宇宙船がシステムエラーのアラームを発した瞬間に、ログに目をやり、どこでどのような問題が生じたのか見極める必要があります。

同様に、Apex コードでエラーが発生した場合、パフォーマンスの問題が生じた場合、想定した結果が得られない場合も、最初のステップは、デバッグログを確認して問題を特定することです。ログ全体を 1 行ずつ見ていく作業はかなり面倒です。そこで役に立つのがチェックポイントです。チェックポイントは、実行中の特定の時点における Apex コードの状態のスナップショットを表示します。

Apex コードにはチェックポイントを 5 つまで設定できます。Visualforce マークアップではチェックポイントを使用できません。

では、以前に作成した EmailMissionSpecialist クラスにチェックポイントを設定してみましょう。
  1. [File (ファイル)] | [Open (開く)] を選択して、EmailMissionSpecialist クラスを開きます。
  2. [Debug (デバッグ)] | [Change Log Levels (ログレベルの変更)] を選択します。
  3. [General Trace Setting for You (全般トレース設定)] セクションで、[Add/Change (追加/変更)] をクリックします。
  4. ApexCode のログレベルを [FINEST (最も詳細)] に設定します。
    メモ: チェックポイントを設定するには、「すべてのデータの参照」ユーザー権限が必要です。チェックポイントを使用して結果を生成するには、実行匿名を使用してコードを実行するか、自分で DEVELOPER_LOG 追跡フラグを設定します。追跡フラグは、Apex のログレベルが INFO 以上でなければなりません。
  5. 変更を保存するには、[Done (完了)] をクリックします。
  6. [Change Log Levels (ログレベルの変更)] ダイアログボックスを終了するには、[Done (完了)] をクリックします。

ソースコードエディターにコードを表示すると、左側に行番号が示されます。inspectResults(results); の行番号をクリックします。チェックポイントが作成されたことを示す赤いドット (1) が示されます。

チェックポイントの設定

これで、コードを実行し、[Checkpoints (チェックポイント)] タブを使用して分析することができます。

[Checkpoints (チェックポイント)] タブ

[Checkpoints (チェックポイント)] タブを使用すると、コード実行のどこに問題があり、その時点のオブジェクトの値が何かを正確に把握することができます。次のコードを実行して、チェックポイントの動作を見てみましょう。

[Debug (デバッグ)] | [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] を選択します。次のコードを入力して実行します。Enter your email address を自身のメールアドレスに置き換えます。

EmailMissionSpecialist em = new EmailMissionSpecialist();
em.sendMail('Enter your email address', 'Flight Path Change', 
   'Mission Control 123: Your flight path has been changed to avoid collision '
   + 'with asteroid 2014 QO441.');

Apex コードが正常に実行されたら、デバッグログを開き、[Checkpoints (チェックポイント)] タブをクリックして結果を確認します。

[Checkpoints (チェックポイント)] タブ
  • [Checkpoints (チェックポイント)] テーブルに、各チェックポイントの名前空間、クラス、行番号が示されます。また、各チェックポイントが作成された日時も示されます。
  • [Checkpoint Locations (チェックポイントの場所)] テーブルには、選択したチェックポイントで捕捉されたファイル名、行番号、反復が示されます。

[Checkpoints (チェックポイント)] テーブルのチェックポイントをダブルクリックして、チェックポイントインスペクターで捕捉された結果を確認します。お楽しみはこれからです!

チェックポイントインスペクター

チェックポイントインスペクターには、[Heap (ヒープ)] と [Symbols (記号)] の 2 つのタブがあります。
  • Heap (ヒープ) — チェックポイントが設定されたコード行の実行時点でメモリ内に存在するすべてのオブジェクトが表示されます。
  • Symbols (記号) — メモリ内にあるすべての記号がツリービューで示されます。

[Heap (ヒープ)] タブ

[Heap (ヒープ)] タブには、[Types (種別)] パネルなどデバッグ用のパネルがいくつかあります。[Types (種別)] パネルには、インスタンス化されたオブジェクトの数とメモリの使用量 (バイト単位) が示されます。では、設定したチェックポイントで捕捉された詳細を見てみましょう。
  1. [Types (種別)] で、[Messaging.SingleEmailMessage] をクリックします。
  2. [Instances (インスタンス)] で、このオブジェクト種別の任意のインスタンスをクリックします。
  3. [State (状態)] で、オブジェクトの項目とその値を参照します。
チェックポイントインスペクターの [Heap (ヒープ)] タブ

[Symbols (記号)] タブ

[Symbols (記号)] タブは、任意のチェックポイントにおける各種オブジェクトの状態をすばやく簡単に確認する手段です。記号は、特定のオブジェクトを参照する一意の名前です。このタブには、メモリ内のすべての記号がツリービューで示されます。

チェックポイントインスペクターの [Symbols (記号)] タブ
司令官であるあなたには、システムが順調に動作しているかどうかを確認するだけでなく、エラーを追跡することも求められます。ここで、チェックポイントインスペクターを使用すれば、コードをより的確に把握できることを見ていきましょう。
  1. タブのチェックポイントの結果をクリアするには、[Debug (デバッグ)] | [Clear (クリア)] | [Checkpoint Results Panel (チェックポイントの結果パネル)] を選択します。
  2. [Debug (デバッグ)] | [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] を選択します。
  3. 今回は無効なメールアドレス (testingemail など) を使用して、EmailMissionSpecialist クラスをもう一度実行します。
    EmailMissionSpecialist em = new EmailMissionSpecialist();
    em.sendMail('testingemail', 'Flight Path Change', 
       'Mission Control 123: Your flight path has been changed to avoid collision '
       + 'with asteroid 2014 QO441.');
  4. コードを実行したら、[Checkpoints (チェックポイント)] タブをクリックします。

[Checkpoints (チェックポイント)] タブには結果が何も表示されません。コード実行が、チェックポイントが設定された行番号まで達していないためです。

[Checkpoints (チェックポイント)] タブの結果
次に、以前のチェックポイントをコードに追加して、コードが testingemail のエラーに達する前に、新しいチェックポイントで情報を捕捉できるようにしてみましょう。
  1. [File (ファイル)] | [Open (開く)] を選択して、EmailMissionSpecialist クラスを開きます。
  2. String[] toAddresses = new String[] {address} の左側の行番号をクリックします。
  3. [Debug (デバッグ)] | [Clear (クリア)] | [Checkpoint Results Panel (チェックポイントの結果パネル)] を選択します。
  4. [Debug (デバッグ)] | [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] を選択します。
  5. 無効なメールアドレス (testingemail など) を使用して、EmailMissionSpecialist クラスをもう一度実行します。
    EmailMissionSpecialist em = new EmailMissionSpecialist();
    em.sendMail('testingemail', 'Flight Path Change', 
       'Mission Control 123: Your flight path has been changed to avoid collision '
       + 'with asteroid 2014 QO441.');
  6. [Checkpoints (チェックポイント)] タブをクリックします。

[Checkpoints (チェックポイント)] タブに新しいエントリが表示されます。今回は、チェックポイントインスペクターを使用して、メモリ内のオブジェクトを分析することができます。

[Checkpoints (チェックポイント)] タブの結果
無料で学習を続けましょう!
続けるにはアカウントにサインアップしてください。
サインアップすると次のような機能が利用できるようになります。
  • 各自のキャリア目標に合わせてパーソナライズされたおすすめが表示される
  • ハンズオン Challenge やテストでスキルを練習できる
  • 進捗状況を追跡して上司と共有できる
  • メンターやキャリアチャンスと繋がることができる