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

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

# カスタムデータベースアクションスクリプトテンプレート

<Card title="利用可否はAuth0プランによって異なります">
  この機能を利用できるかどうかは、Auth0プランまたはカスタム契約の内容によって異なります。詳しくは、[料金体系](https://auth0.com/pricing)を参照してください。
</Card>

ユーザーのアイデンティティデータを含む独自のデータベース (Auth0ではレガシーデータストアと呼びます) がある場合は、それを<Tooltip tip="IDプロバイダー（IdP）: デジタルアイデンティティを保存および管理するサービス。" cta="用語集を表示" href="/ja/docs/glossary?term=identity+provider">IDプロバイダー</Tooltip>として使用して、ユーザーを認証できます。
Auth0では、そのレガシーデータストアへの接続をカスタムデータベースとして作成および設定します。レガシーデータベースからAuth0のデータストアに、時間をかけて段階的にデータを移行することも、データを移行せずに使い続けることもできます。カスタムデータベースに対する各種処理を実行するためのスクリプトテンプレートが用意されており、それらをそのまま利用したり、カスタマイズしたりできます。

カスタムデータベーススクリプトには、次の2種類があります。

* **自動移行**: ユーザーがAuth0にログインするたびに、そのユーザーがまだAuth0に存在しない場合、スクリプトはレガシーデータベースを確認して、そのユーザーが存在するかどうかを調べます。ユーザーが見つかり、**Import users to Auth0** フラグが有効になっている場合、ユーザーデータはAuth0のデータストアに移行されます。この機能は、**trickle migration** または **lazy migration** と呼ばれることもあります。
* **レガシーデータベース**: ユーザーがログインを試みるとき、作成されるとき、パスワードを変更するとき、メールアドレスを確認するとき、または削除されるときに、Auth0は常に基盤となるデータベースを照会します。ユーザーが見つかり、**Import users to Auth0** フラグが**有効**になっていない場合、ユーザーデータはレガシーデータベースに保持され、Auth0には移行**されません**。

Auth0では、次のカスタムデータベースアクションスクリプトを提供しています。

* [パスワード変更](/ja/docs/authenticate/database-connections/custom-db/templates/change-password)
* [ユーザー作成](/ja/docs/authenticate/database-connections/custom-db/templates/create)
* [ユーザー削除](/ja/docs/authenticate/database-connections/custom-db/templates/delete)
* [ユーザー取得](/ja/docs/authenticate/database-connections/custom-db/templates/get-user)
* [ログイン](/ja/docs/authenticate/database-connections/custom-db/templates/login)
* [ユーザー検証](/ja/docs/authenticate/database-connections/custom-db/templates/verify)
* [メールアドレス変更](/ja/docs/authenticate/database-connections/custom-db/templates/change-email)

<Card title="ネットワークファイアウォール">
  ファイアウォールの内側にある環境では、この機能を正しく動作させるために、適切なAuth0のIPアドレスを許可リストに追加する必要がある場合があります。
</Card>

<div id="script-execution">
  ## スクリプトの実行
</div>

[Custom Database Connections](/ja/docs/authenticate/database-connections/custom-db) で説明しているように、カスタムデータベース接続では、レガシーアイデンティティストアとの連携時に使用するカスタムコードであるアクションスクリプトを設定できます。各アクションスクリプトは本質的には名前付きの JavaScript 関数で、スクリプトに応じて異なる関数名が使用され、複数のパラメーターが渡されます。

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

アクションスクリプトの実行では、JavaScript の非同期特性がサポートされており、[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) オブジェクトなどを使用できます。非同期処理では、処理の完了を待っている間、実質的に実行が一時停止された状態になります。Auth0 のサーバーレス Webtask コンテナの実行時間は通常 20 秒に制限されており、これを超えるとコンテナが再利用される場合があります。この制限によってコンテナが再利用されると、処理は途中で終了し、最終的にエラーが返されます (さらに、`global` オブジェクトがリセットされる可能性もあります) 。

<div id="completion-and-the-callback-function">
  ### 完了と callback 関数
</div>

各 アクションスクリプトに渡される `callback` 関数は、処理の完了を示すシグナルとして機能します。アクションスクリプトは、`callback` 関数を呼び出した直後に終了し (暗黙的に終了する場合も、JavaScript の `return` 文を明示的に実行する場合も含む) 、それ以降は他の処理を行わないようにしてください。

<Warning>
  Auth0 が提供する `callback` 関数は、**必ず 1 回だけ**呼び出す必要があります。アクションスクリプト内でこの関数を複数回呼び出すと、予測不能な結果やエラーが発生します。
</Warning>

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  `callback` を `callback()` のように引数なしで実行した場合は、`callback(null)` を実行したものとして扱われます。
</Callout>

アクションスクリプトで非同期処理を使用する場合、`callback` 関数の呼び出しは非同期処理が完了するまで延期し、かつ最後に呼び出される処理でなければなりません。非同期実行では、非同期処理の完了後に JavaScript の `callback` が実行されます。このコールバックは通常、JavaScript 関数のメインの (同期的な) 本体の実行が完了した後のどこかの時点で呼び出されます。

<Warning>
  `callback` 関数を実行しないと、処理が停止したままとなり、最終的にエラーが返されます。アクションスクリプトでは、`callback` 関数を必ず 1 回だけ呼び出す必要があります。処理の停止を防ぐには `callback` 関数を少なくとも 1 回呼び出す必要がありますが、複数回呼び出すと予測不能な結果やエラーが発生します。
</Warning>
