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

# データベースアクションスクリプト

> データベースアクションスクリプトを作成して、Auth0 と外部ユーザーストアとの連携方法を設定・カスタマイズします。

<div id="usage">
  ## 使用状況
</div>

データベースアクションスクリプトは、カスタムデータベース接続用に作成する Node.js 関数です。ログイン、パスワード変更、ユーザー削除などの処理において、Auth0 が外部ユーザーストアとどのように連携するかを定義します。

データベースアクションスクリプトは、サーバーレス Webtask コンテナーのインスタンス内で、一連の JavaScript 関数として呼び出され実行されます。

<div id="callback">
  ### 完了と `callback` 関数
</div>

各データベースアクションスクリプトの関数シグネチャには、最後のパラメータとして `callback` 関数が含まれます。Auth0 はこの `callback` 関数を提供し、操作の完了を通知します。

すべてのデータベースアクションスクリプトでは、完了する直前に (暗黙的に、または `return` ステートメントで明示的に) `callback` 関数を必ず1回だけ呼び出す必要があります。`callback` 関数が実行されないと、実行が停止し、最終的にエラーが返されます。

トラブルシューティングのために、`Error` オブジェクトを `callback` 関数に渡すことで、データベースアクションスクリプトからエラーを返すことができます。

```js lines theme={null}
return callback(new Error('My custom error message'));
```

`callback()` のように引数なしで `callback` 関数を呼び出すことは、`callback(null)` を呼び出すことと同じです。

<div id="asynchronous-javascript">
  ### 非同期 JavaScript
</div>

データベースアクションスクリプトでは、[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) オブジェクトや [async functions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function) など、非同期 JavaScript の機能をサポートしています。非同期機能を使用すると、アクションスクリプトからノンブロッキング操作を実行できます。

アクションスクリプトで非同期処理を使用する場合は、非同期処理が完了するまで `callback` 関数の呼び出しを延期する必要があります。非同期操作は、Webtask コンテナーの[実行制限](#limits)内に完了する必要があります。

<div id="public-npm-modules">
  ### 公開 npm モジュール
</div>

`npm` モジュールを使用すると、アクションスクリプト全体のサイズを削減できるほか、幅広い既成機能を利用できます。

Auth0 のサーバーレス Webtask コンテナーでは、多くの[サポート対象の公開 `npm` モジュール](https://auth0-extensions.github.io/canirequire/)を使用できます。ほかのモジュールが必要な場合は、Auth0 の担当者に依頼するか、[サポートチケットを起票](https://support.auth0.com/)してください。

アクションスクリプトでは、プライベートリポジトリの `npm` モジュールはサポートされていません。

<div id="provided-artifacts">
  ## 提供されるアーティファクト
</div>

Webtask コンテナーと Auth0 <Tooltip tip="認証サーバー: ユーザーのアイデンティティを確認または拒否するサーバー。" cta="用語集を表示" href="/docs/ja-jp/glossary?term=authentication+server">認証サーバー</Tooltip> (Auth0 テナント自体) から提供される複数のアーティファクトを含む、特定の環境を提供します。

<div id="global-object">
  ### `global` オブジェクト
</div>

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

`global` オブジェクトを使用すると、コンテナーインスタンスで実行されるすべてのアクションスクリプトで使用する情報や関数を定義したり、サードパーティ (ログ記録) API 用の <Tooltip tip="アクセストークン: API へのアクセスに使用される、不透明な文字列または JWT 形式の Authorization 資格情報。" cta="用語集を表示" href="/docs/ja-jp/glossary?term=Access+Token">アクセストークン</Tooltip>や、[クライアント認証情報フロー](/docs/ja-jp/get-started/authentication-and-authorization-flow/client-credentials-flow)を介して取得した、Auth0 で定義した独自の API 用アクセストークンを保存するなど、取得コストの高いリソースをキャッシュしたりできます。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  ユーザー固有の情報を `global` オブジェクトに保存しないでください。Auth0 ではアクションスクリプトの実行時にコンテナーアフィニティがないため、アクションスクリプトは実行中の任意のコンテナーインスタンス、またはプールに追加された新しいコンテナーインスタンスで実行される可能性があります。
</Callout>

`global` オブジェクト内のすべての代入宣言には、初期化処理も含める必要があります。これは、Webtask コンテナーが再利用またはインスタンス化されると `global` オブジェクトがリセットされるためです。

<div id="configuration-object">
  ### `configuration` オブジェクト
</div>

[データベースアクションスクリプトで設定パラメータを指定](/docs/ja-jp/authenticate/database-connections/custom-db/create-db-connection#add-configuration-parameters)すると、`configuration` オブジェクトを通じて、すべてのスクリプトから値を利用できるようになります。値は暗号化されます。

`configuration` オブジェクトは読み取り専用として扱い、アクションスクリプト内で値をハードコーディングしないために使用してください。たとえば、外部アイデンティティストアへのアクセスに使用する資格情報や API キーなどの機密情報を保存したり、tenant 固有の値を持つ変数を定義したりできます。

<div id="context-object">
  ### `context` オブジェクト
</div>

[Organizations](/docs/ja-jp/manage-users/organizations)を使用している場合、`context` オブジェクトを有効にすると、organizationデータをデータベースアクションスクリプトで利用できるようになります。これにより、`id`、`name`、`metadata` などの組織の詳細を含む追加の `context` 引数が、カスタムデータベーススクリプトに渡されます。

`context` オブジェクトは、一度有効にすると無効にできません。[Delete スクリプト](/docs/ja-jp/authenticate/database-connections/custom-db/templates/delete)には、常に空の `context` オブジェクトが渡されます。

<div id="limits">
  ## 制限
</div>

* アクションスクリプトの合計サイズは、import する `npm` モジュールを除き、100 KBを超えることはできません。サイズが大きいほど、Webtask プラットフォームでのパッケージ化および転送処理によるレイテンシーが増加し、システムのパフォーマンスに影響します。

* 各アクションスクリプトのコンテナーには約20秒の実行時間制限があり、制限を超えるとコンテナーは再利用されます。これにより、アクションスクリプトで保留中の処理が終了し、エラーが発生する可能性があります。
