Quip終了に伴うデータエクスポートでお困りの方へ

Apexのデバッグで役に立つ2つの手法

いつもご愛読いただきありがとうございます。 今回は、Apexのデバッグで役に立つ2つの手法を説明させていただきます。
  • Apexでデバッグ文の出力を制御する方法
  • ApexでSOQLの発行回数を確認する方法
目次

Apexでデバッグ文の出力を制御する方法

Apexでデバッグ文の出力を制御する方法について、説明させていただきます。 Apexで開発を行う場合、以下のようにデバッグ文を記述して、テストを行うのはよくあることだと思います。
System.debug('Hello World!')。
しかし、開発したプログラムを本番環境にリリースする際には、どうしていますか。 デバッグ文を削除してから、本番l環境にリリースしている方も多いのではないでしょうか。 では、本番環境で不具合が発生した場合は、どうでしょうか。 エラーの原因がわからない場合、再度デバッグ文を追加して、調査を行うようなこともあるのではないでしょうか。 本番環境で不具合が発生した場合、緊急で対応する必要がありますが、デバッグ文を追加して再度リリースするとなると、プログラムチェックやリリース許可が必要となり、結果、不具合対応に時間がかかってしまうことにもなりかねません。 そこで、本章では、デバッグレベルを指定して、デバッグ文を出力する方法をご紹介させていただきたいと思います。 デバッグレベルをデバッグ文の記述にデバッグレベルを追加することにより、デバッグログの出力を制御することができます。 デバッグログの出力時に、Apexで措定できるデバッグレベルは、以下の8種類となります。   デバッグ文でデバッグレベルを指定する場合の構文は、以下の通りです。
System.debug(デバッグレベル, 'Hello World!');
指定するデバッグレベルは、以下の値で指定します。 ※以下の値は、累積になります。
  •  Logginglevel.WARNを指定すると、デバッグログのログレベルで、「警告」から「最も詳細」を指定した場合に、デバッグログが出力されます。
  •  Logginglevel.DEBUGを指定すると、デバッグログのログレベルで、「デバッグ」から「最も詳細」までを指定した場合に、デバッグログが出力されます。
値 説明
Logginglevel.NONE ログを記録しない。
Logginglevel.ERROR エラーと例外のログを記録。
Logginglevel.WARN 警告のログを記録。
Logginglevel.INFO 通知のログを記録。
Logginglevel.DEBUG ユーザーが指定したデバッグのログを記録。
Logginglevel.FINE 高レベルのログを記録。
Logginglevel.FINER FINE より高レベルのログを記録。
Logginglevel.FINEST 最高レベルのログを記録。
例えば、エラーが発生した時のみ、デバッグ文を出力したい場合は、以下のように記述して、デバッグログのログレベルで、「エラー」を指定します。
System.debug(Logginglevel.ERROR, 'Hello World!');
また、以下のように、なしを指定すれば、デバッグ文が出力されることはなくなります。

System.debug(Logginglevel.NONE, 'Hello World!');
以上のように、デバッグ文にデバッグレベルをあらかじめ指定しておけば、デバッグログのデバッグレベルを切り替えることにより、デバッグ文の出力を制御することができます。 デバッグログの出力時に、デバッグレベルを指定できるため、不具合調査時に、デバッグ文を入れて再度リリースするというような作業が不要になりますので、ぜひ試してみてください。

ApexでSOQLの発行回数を確認する方法

Apexでよく発生するエラーに「Too many SOQL queries」があります。 SOQLの発行回数が、ガバナ制限を超えた場合に発生するエラーです。 このエラーを回避するためには、SOQLの発行回数を削減するしかありません。 ※非同期にするという方法もあります。 しかし、複雑なプログラムの場合、どこでSOQLを多く発行しているかの調査に時間がかかったりします。 その際に役に立つのが、「Limits.getQueries()」です。 「Limits.getQueries()」を使用すると、その時点でのSOQLの発行回数がわかります。 各メソッドの最初と最後にデバッグ文を記述しておけば、どのメソッドで、SOQLを多く発行しているのかがわかるのです。 きっと、「Too many SOQL queries」エラーの解消に役立つことでしょう。 デバッグ文で「Limits.getQueries()」を記述する場合の例は、以下の通りです。
System.debug('メソッド名:Start:SOQL発行回数 = ' + Limits.getQueries());
・
・
・
System.debug('メソッド名:End:SOQL発行回数 = ' + Limits.getQueries());
デバッグ文を出力する際に、追加するだけですので、使用してみてください。

最後に

本記事では、Apexのデバッグで役に立つ2つの手法についてご紹介させていただきました。 サンブリッジでは、構築から運用・保守、技術支援サービスまで、さまざまなサービスを提供しています。 「既存の環境を改修したいが対応できる人がいない」「もっとSalesforceを活用したいがどの機能から手を付けてよいかわからない」などお困りの際は、ぜひ、サンブリッジにご相談ください! 最後までお読みいただきありがとうございました。
Salesforce一体型の名刺管理「SmartVisca」

Salesforce一体型の名刺管理「SmartVisca」

SmartViscaはSalesforce上に構築されているので、取り込んだ名刺をそのまま取引先・取引先責任者・リードに登録。ツールの二重管理や同期の待ち時間も発生しません。
もちろん、Salesforceへの連携費用は一切かかりません。

SlackやTeamsからの名刺取り込みも可能です。Salesforceのライセンスがない方もどなたでもご利用いただけます。

サービス・ソリューションに関するお問い合わせ

Salesforce・AWSなど、ご支援に関してご不明な点やご相談はこちらからお問い合わせください。

貴社のビジネス課題を発見し、解決にむけてコンサルタントがご提案いたします。

この記事を書いた人

Salesforce認定コンサルタントのアバター Salesforce認定コンサルタント 認定Service Cloudコンサルタント/認定Sales Cloudコンサルタント

SaaS・SFA/CRMやMAツールの黎明期から業界の変遷を見つめてきたSalesforce活用のプロフェッショナル。

これまでに数多くの企業でシステム導入・定着化を成功させ、現場の業務改善から売上拡大まで伴走支援してきた実績を持つ。

本ブログでは、豊富な実務経験に基づく「現場で本当に役立つSalesforce活用ノウハウ」や最新トレンドを分かりやすく発信中。

<保有資格>
認定Service Cloudコンサルタント
認定Sales Cloudコンサルタント

目次