> ## Documentation Index
> Fetch the complete documentation index at: https://docs-dev-actions-triggers-prototype.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# ルールのテストに関するベストプラクティス

> Auth0環境のテストとデバッグに関するベストプラクティスについて説明します。

<Warning>
  RulesとHooksのサポート終了（EOL）日は**2026年11月18日** であり、**2023年10月16** 日の時点で作成された新しいテナントは使用できなくなります。Hooksが有効な既存のテナントは、サポート終了までHooksを利用できます。

  今後はActionsに移行して、Auth0の機能を拡張することを強くお勧めします。Actionsを使用すると、豊富な情報やインラインドキュメント、パブリック`npm`パッケージにアクセスして、外部統合を使って全体的な拡張エクスペリエンスを強化することができます。Actionsの詳細については、「[Auth0 Actionsの仕組みを理解する](/docs/ja-jp/customize/actions/actions-overview)」をお読みください。

  当社では、移行の参考資料として、[RulesからActionsへの移行](/docs/ja-jp/customize/actions/migrate/migrate-from-rules-to-actions)と[HooksからActionsへの移行](/docs/ja-jp/customize/actions/migrate/migrate-from-hooks-to-actions)に関するガイドを提供しています。また、専用の「[Actionsへの移行](https://auth0.com/extensibility/movetoactions)」ページでは、機能の比較や[Actionsのデモ](https://www.youtube.com/watch?v=UesFSY1klrI)、その他のリソースを掲載して、円滑な移行をサポートしています。

  RulesとHooksの廃止の詳細については、当社のブログ記事「[RulesとHooksの提供終了について](https://auth0.com/blog/preparing-for-rules-and-hooks-end-of-life/)」をお読みください。
</Warning>

<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-0" href="/docs/ja-jp/glossary?term=auth0-dashboard" tip="Auth0 Dashboard: サービスを構成するためのAuth0の主製品。" cta="用語集の表示">Auth0 Dashboard</Tooltip>には、ルールをテストしてデバッグするために、ルールを`TRY`（試す）機能があります。この機能では、モックの`user`と`context`オブジェクトを定義し、ルールに渡して実行することができます。ルールの実行が完了すると、結果の出力（コンソールのログを含む）が表示されます。これはルールの単体テストを一目で分かりやすいものにする反面、手動での作業がメインとなるため、[Mocha](https://mochajs.org/)や[rewire](https://www.npmjs.com/package/rewire)などのテスト自動化ツールは活用できません。

ベストプラクティスとして、また、SDLC（Software Development Life Cycle：ソフトウェア開発ライフサイクル）の推奨される対応として、運用環境への導入前にルールやルールの変更をテストする際には、Auth0で別のテスト用テナントを使用してください。

## 自動化

多少のボイラープレートを使用すれば、ルールがAuth0テナントに導入・実行され、変更することなく、CI/CD（継続的インテグレーションと継続的デプロイ）の自動化（単体）テスト環境で使用されるように実装できます。

```javascript lines theme={null}
const vm = require('vm');
  const fs = require('fs');
  var user = {
      "name":        "jdoe@foobar.com",
      "email":       "jdoe@foobar.com",
      "user_id":     "auth0|0123456789",
          .
          .
    };
  var context = {
      "clientID":            "123456789",
      "clientName":          "MyWebApp",
      "connection":          "MyDbConn",
      "connectionStrategy":  "auth0",
      "protocol":            "oidc-basic-profile",
          .
          .
    };

  global.configuration = {
    DEBUG: true
  };

  vm.runInThisContext(
      "(()=>{return " + fs.readFileSync('./rules/Normalized Profile Claims.js') + " })();", {
        // filename for stack traces
        filename: 'Normalized Profile Claims.js',
        displayErrors: true
      }
  )(
    user,
    context,
    function callback() {
      console.log("Complete");
    }
  );
```

上の例が示すように、Node.jsの[VM](https://www.w3schools.com/nodejs/ref_vm.asp)を使用すると、（独立したノードモジュールに）何らかの比較的単純なテストを実装して、ルールをテスト実行することができます。この例では、「Normalized Profile Claims（正規化プロファイルクレーム）」という名前のルールがファイルから読み込まれ、ルールの（JavaScript）コードの周りにボイラープレートが追加されて実行されます（ボイラープレートとは、ルールのコードを含んだ[ファイルを読み込む](https://nodejs.org/api/fs.html#fs_fs_readfilesync_path_options)ファイルシステム呼び出しの前後に追加される文字列です）。

`runInThisContext`の呼び出しに渡されたオプションオブジェクトは、例外エラーが発生した際のデバッグに役立つ情報を提供します。この関数の呼び出しについては、Node.jsの[ドキュメント](https://node.readthedocs.io/en/stable/api/vm/)を参照してください。

ルールのテスト中に渡された最初の2つのオブジェクトは`user`と`context`を表すオブジェクトです。これらはAuth0 Dashboardの`TRY`（試す）機能と同様に、スタブで代用することができます。第3パラメーターの`callback`関数は、パイプライン継続を模倣するように実装できるため、結果的に順序を追って後続のルールが実行されます。

渡される`callback`関数の中でテストを行うか、アサーションを検証することで、コールバック関数が少なくとも1回呼び出されることを検証できます。また、ルールがコールバックを複数回呼び出していないことを確認する実装を提供することもお勧めします。

さらに、Node.jsの`global`オブジェクトを使って、構成オブジェクトと、必要であれば`auth0`オブジェクトのインスタンスにもアクセスすることができます。上の例では、（上のセクションでも説明したように）推奨基準に沿って、デバッグに役立つグローバルな`configuration`オブジェクトが定義されています。

また、上の例では、Auth0 Deploy CLIが提供するファイルシステムのディレクトリ構造を利用しています。Auth0 Deploy CLIはルールを導入するのに便利です。
