> ## 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.

# カスタムデータベースアクションスクリプト環境のベストプラクティス

> カスタムデータベースアクションスクリプト環境のベストプラクティスについて説明します。

アクションスクリプトは、サーバーレスWebtaskコンテナーのインスタンスでJavaScript関数を呼び出すことにより実行されます。これに関して、WebtaskコンテナーとAuth0認証サーバー（ご利用のAuth0テナント）による各種のアーティファクトと共に、特定の環境が提供されます。

## npmモジュール

Auth0のサーバーレスWebtaskコンテナーでは、さまざまな[`npm`](https://www.npmjs.com/)モジュールを利用することができます。`npm`モジュールはアクションスクリプトのコード実装で総サイズを低減するだけでなく、予め構築された幅広い機能を活用できるようにします。

デフォルトでは、公開されている多数の`npm`モジュールがすぐに使用できる状態でサポートされています。このリストは、潜在的なセキュリティ関連の懸念を調査した上でまとめられています。サポートされている`npm`モジュールを確認するには、「[以下を必要：Auth0の拡張性](https://auth0-extensions.github.io/canirequire/)」をお読みください。

すぐに使用できる状態でサポートされていない`npm`モジュールが必要な場合は、[Auth0拡張性ポータル](https://auth0-extensions.github.io/canirequire/)またはAuth0担当者を通じてリクエストを行うことができます。Auth0は、リクエストを評価して適合性を判断します。未解決のリクエストをエスカレーションする必要がある場合は、[Auth0サポートポータル](https://support.auth0.com/)からサポートチケットを開いてください。プライベートリポジトリで提供されている`npm`モジュールについては、その使用に関して、Auth0は現在サポートを提供していません。

## 変数

Auth0アクションスクリプトは、グローバルに利用可能な`configuration`オブジェクトとして定義されているものを介してアクセスされる環境変数の概念をサポートします。`configuration`オブジェクトは読み取り専用として扱い、外部IDストアにアクセスするための資格情報やAPIキーなどの機密情報を保存するために使用される必要があります。これにより、アクションスクリプトにセキュリティ上重要な値がハードコードされることが軽減されます。

`configuration`オブジェクトを使用すると、テナント固有の値を持つ変数を定義できるため、[複数の環境の設定](/docs/ja-jp/get-started/auth0-overview/create-tenants/set-up-multiple-environments)など、採用するソフトウェア開発ライフサイクル（SDLC）のベストプラクティス戦略をサポートするためにも使用できます。これにより、アクションスクリプト内のハードコードされた値が軽減されます。この値は、どのテナントがそれを実行しているかによって変わる可能性があります。

## globalオブジェクト

Auth0サーバーレスWebtaskコンテナは、各Auth0テナントに関連付けられたプールからプロビジョニングされます。各コンテナインスタンスはグローバルオブジェクトを利用可能にし、そのオブジェクトにはコンテナインスタンス内で実行されるすべてのアクションスクリプトからアクセスできます。グローバルオブジェクトは、コンテナーに固有のグローバル変数として機能し、コンテナーインスタンス内で実行されるすべてのアクションスクリプトで使用できる情報（または関数）を定義するために使用できます。

つまり、リソースがユーザー固有でない限り、グローバルオブジェクトを使用して高価なリソースをキャッシュできます。たとえば、ユーザー固有ではない機能を提供するサードパーティAPI（ログ記録など）のアクセストークンを保存できます。または、Auth0で定義され、クライアントの資格情報フローを使用して取得された、ユーザー固有ではない独自のAPIへのアクセストークンを保存するために使用することもできます。

<Warning>
  アクションスクリプトは、すでに実行中のコンテナインスタンスだけでなく、新規作成され、続いてプールに追加される可能性のあるコンテナインスタンスでも実行できます。Auth0でのアクションスクリプトの実行には、コンテナアフィニティはありません。そのため、ユーザー固有の情報をglobalオブジェクトに保存することは避け、globalオブジェクト内で行う宣言を、必ず初期化にも対応したものにしてください。
</Warning>

Webtaskコンテナーが再利用されるたびに、または、Webtaskコンテナーの新しいインスタンスでは、定義されているglobalオブジェクトがリセットされます。したがって、コンテナーに関連付けられたグローバルオブジェクト内の割り当ての宣言には、初期化の規定も​​含めてください。柔軟なパフォーマンスを確保するために、Auth0はサーバーレスWebtaskコンテナを随時提供し、それらのコンテナは各種の再利用ポリシーの対象となります。一般的に、globalオブジェクトの寿命は20分より短いと想定することをお勧めします。

## カスタム データベース接続環境チェックリスト

* データベースに、ユーザープロファイル属性を保管する **id** 、**nickname** 、**email** 、**password** などのフィールドがあることを確認してください。Auth0のユーザープロファイルスキームと予想されるフィールドの詳細については、「[正規化されたユーザープロファイル](/docs/ja-jp/manage-users/user-accounts/user-profiles/normalized-user-profiles)」を参照してください。ユーザープロファイルを更新する方法については、「[データベースを使用してユーザープロファイルを更新する](/docs/ja-jp/manage-users/user-accounts/user-profiles/update-user-profiles-using-your-database)」をお読みください。
* カスタムデータベース接続で返されるエラーは、トラブルシューティングのために使用できます。
* 返されたユーザープロファイルにある`id`（または`user_id`）プロパティは、Auth0によってユーザーの識別に使用されます。複数のカスタムデータベース接続を使用している場合は、**user ID** の競合を避けるために、\*\* すべてのカスタムデータベース接続にわたって\*\* **id** 値が一意である必要があります。\*\* id\*\* の値には、接続名をプレフィックス（スペースは削除）として追加することをお勧めします。ユーザーIDの詳細については、「[ユーザーを識別する](/docs/ja-jp/manage-users/user-accounts/identify-users)」をお読みください。
* Auth0でホストされるユーザーストアと比較すると、レイテンシは大きくなります。
* データベースまたはサービスはAuth0サーバーからアクセスできなければなりません。ストアがファイアウォールの背後にある場合は、受信接続を構成してください。

## 特定のランタイムバージョンをテスト

カスタムデータベーススクリプトのランタイムバージョンは、**［Extensibility（拡張性）］** 内の **［Dashboard］>［Settings（設定）］>［Advanced（詳細）］** で定義されています。

特定のランタイム バージョンで単一のカスタムデータベーススクリプトをテストするには、次の手順に従います。

1. **［Authentication（認証）］>［Database（データベース）］** に移動します。
2. カスタムスクリプトを定義したデータベース接続を選択します。
3. 選択したデータベース接続のページから、**［Custom Database（カスタムデータベース）］** タブを選択します。
4. ページの **［Database Action Scripts（データベースアクションスクリプト）］** セクションにスクロールします。
5. 各タブ上で検証したいスクリプト（Login、Createなど）を選択します。
6. **［Save and Try（保存して試す）］** を選択します。これにより、特定のテストパラメーターとサンプルコンテキストの詳細を含むモーダルが読み込まれます。必要に応じて更新します。
7. モーダルから **［Try（試す）］** を選択すると、特定のノードバージョンのドロップダウンセレクターが開きます。
8. 目的のノードバージョンを選択するとテストがトリガーされ、結果が同じ画面のメッセージに表示されます。

## もっと詳しく

* [カスタムデータベースのアクションスクリプトのベストプラクティス](/docs/ja-jp/authenticate/database-connections/custom-db/custom-database-connections-scripts/execution)
* [エラー処理のベストプラクティス](/docs/ja-jp/troubleshoot/error-handling-best-practices)
* [デバッグのベストプラクティス](/docs/ja-jp/troubleshoot/debugging-best-practices)
* [デプロイメントのベストプラクティス](/docs/ja-jp/deploy-monitor/deployment-best-practices)
* [カスタムデータベース接続のセキュリティに関するベストプラクティス](/docs/ja-jp/authenticate/database-connections/custom-db/custom-database-connections-scripts/connection-security)
