ルールのデバッグ

console.log()consoleOutプロパティは、アクション、ルール、フック、拡張機能、DBスクリプトを通じてAuth0プラットフォーム内で顧客が生成するログ出力です。Auth0は、テストとデバッグ目的でのみconsoleOutconsole.log()プロパティの使用を推奨しています。個人データやその他の機密データをウェブコンソールにログ出力しないでください。ログ出力にそのようなデータが含まれてしまいます。
通常、標準では、ルールを実行時にデバッグすることができます。これはconsole.logconsole.log()機能を使用してコンソールログを出力することで行います。詳細については、MDN Web DocsのconsoleLog()に関するドキュメントを参照してください。Auth0プラットフォーム内でルールのインタラクティブなデバッグは利用できません(ただし、以下で説明するテスト自動化技術を外部のインタラクティブなソースデバッグ機能と組み合わせて使用することは可能です。詳細については、ルールテストのベストプラクティスを参照してください)。

行コメントを追加する

十分な行(つまり、////)またはブロック(つまり、/* *//* */)コメントをルールに追加することは、特に明白でない機能の周りで、コードのデバッグと理解の両方に非常に価値があります。特に、ルールの最初の実装者が、将来的にそれを維持する責任を負う人物と同じでない場合が多いためです。

リアルタイムWebtaskログ

デフォルトでは、通常の実行中にコンソールログ出力は表示できません。ただし、リアルタイムWebtaskログ拡張機能を使用して、ルールを含むAuth0テナント内のすべての実装された拡張性のすべてのコンソールログをリアルタイムで表示できます。この拡張機能が提供するリアルタイムコンソールログ表示には、すべてのconsole.logconsole.log()console.errorconsole.warn()console.exceptionconsole.error()出力が含まれます。詳細については、MDN Web DocsのconsoleError()に関するドキュメントを参照してください。

デバッグログの有効化と無効化

本番環境では、デバッグログを常時有効にすることは望ましくありません。ルールに関連するパフォーマンスの考慮事項を考えると、常時有効にすることは賢明ではありません。詳細については、パフォーマンスのベストプラクティスを参照してください。 しかし、開発またはテスト環境では、より継続的にデバッグログを有効にするオプションがはるかに望ましいです。さらに、過剰なデバッグログは大量の「ノイズ」を生成し、問題の特定をより困難にする可能性があります。 環境に応じてデバッグログを有効または無効にするようにルールを変更することは、煩雑でエラーが発生しやすくなります。詳細については、ルール環境のベストプラクティスを参照してください。代わりに、環境設定オブジェクトを利用して、以下のような方法で条件付き処理を実装できます:
function NPClaims(user, context, callback) {
    /*
     * This rule (https://auth0.com/docs/rules) is used to derive
     * effective claims associated with the Normalized User Profile:
     *   https://auth0.com/docs/user-profile/normalized/auth0
     */
    var LOG_TAG = '[NORMALIZED_PROFILE_CLAIMS]: ';
    var DEBUG = configuration.DEBUG ? console.log : function () {};
    DEBUG(LOG_TAG, "identities=", user.identities);
    user.user_metadata = user.user_metadata || {};

    //
    user.family_name =
      user.family_name ||
      user.identities.filter(function(identity) {
        /* Filter out identities which do not have anything synonymous with
         * Family Name
         */
        return(
          identity.profileData &&
          identity.profileData.family_name);
      }).map(function(identity) {
        return identity.profileData.family_name;
      })[0];
    DEBUG(LOG_TAG, "Computed user.family_name as '", user.family_name, "'");
      .
      .

    //
    return callback(null, user, context);
  }
上記の例では、DEBUG 環境設定変数が作成されており、これは true または false に設定できます。これは実行環境(例:本番、テスト、開発)に応じて設定されます。この変数の設定は、デバッグログがいつ実行されるかを決定するために使用されます。さらに、DEBUGLEVEL 環境configuration 変数を作成することができ、これはデバッグログレベル(例:詳細、中程度、簡潔)を制御するために使用できます。 上記の例は、名前付き関数の宣言も示しています。便宜上、コンパクトでユニークな命名規則を使用して関数名を提供することで、診断分析に役立ちます。匿名関数を使用すると、例外的なエラー状況の結果として生成されるコールスタックを解釈するのが難しくなりますが、ユニークな関数名を提供することでこの問題に対処できます。詳細については、エラー処理のベストプラクティスをお読みください。

静的解析

Auth0 Dashboardのルールエディタはは、基本的な構文チェックとルールのセマンティクス分析を提供します。しかし、上書き検出、ループ検出、脆弱性検出などのより複雑な静的コード分析の機能は提供されていません。これに対処するために、JSHintSonarJS、またはCoverityなどのサードパーティツールの使用を検討し、デプロイメント自動化プロセスの一部としてルールテストと組み合わせて使用することを検討してください。詳細については、デプロイメントのベストプラクティスをお読みください。