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

# ルールを使用してメタデータを管理

> ルールを使用して、アプリメタデータ、ユーザーメタデータ、クライアントメタデータを管理する方法について説明します。

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

[Auth0ルール](/docs/ja-jp/customize/rules)を使用して、メタデータの読み取り、更新、削除を行うことができます。以降のセクションでは、ユーザーとその情報が次のJSONスニペットで表されるこの例について説明します。

```json lines theme={null}
{
  "user_id": "jdoe",
  "email": "john.doe@example.com",
  "app_metadata": {
    "roles": [ "writer" ]
  },
  "user_metadata": {
    "preferences": {
      "color": "blue"
    }
  }
}
```

## メタデータの読み取り

<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-0" href="/docs/ja-jp/glossary?term=management-api" tip="Management API: 顧客が管理タスクを実行できるようにするための製品。" cta="用語集の表示">Management API</Tooltip>でルールを使用してメタデータを読み取ることができます。次のように、`user_metadata`でプロファイル関連の情報を検索することもできます。

* `名前`
* `ニックネーム`
* `given_name`
* `family_name`

特に設定を変更しない限り、Auth0以外のIDプロバイダー（Google、Facebook、Xなど）によって提供されるユーザープロファイル属性は、ユーザーがログインするたびにIDプロバイダーから更新されるため、直接編集することはできません。

正規化ユーザープロファイルのルート属性である`name`、`nickname`、`given_name`、`family_name`、`picture`を編集可能にするには、[接続がAuth0と同期されるように構成](/docs/ja-jp/manage-users/user-accounts/user-profiles/configure-connection-sync-with-auth0)して、ユーザー属性がユーザープロファイルの作成時のみIDプロバイダーに更新されるようにしなければなりません。そうすれば、これらのルート属性を個別に、または一括インポートを通じて編集できるようになります。

例として、電子メールアドレスが`jane.doe@example.com`のユーザーに対して次のメタデータが保存されているとします。

```json lines theme={null}
{
    "email": "jane.doe@example.com",
    "user_metadata": {
        "hobby": "surfing"
    },
    "app_metadata": {
        "plan": "full"
    }
}
```

上記のメタデータの例を使用すると、次のように[Auth0ルール](/docs/ja-jp/customize/rules)または[Management API](/docs/ja-jp/users/guides/manage-user-metadata)の呼び出しでデータセットから特定の項目を参照できます。

```javascript lines theme={null}
console.log(user.email); // "jane.doe@example.com"
console.log(user.user_metadata.hobby); // "surfing"
console.log(user.app_metadata.plan); // "full"
```

任意の有効なJSONスニペットをメタデータとして使用できますが、`user.app_metadata`は既定で`未定義`であることに注意してください。

使用可能なメタデータを読み取るには、適切なユーザープロパティにアクセスする必要があります。

### アプリメタデータの読み取り

ユーザーのロールに基づいて決定を行うことができます。

```javascript lines theme={null}
function(user, context, callback){
  user.app_metadata = user.app_metadata || {};
  if (user.app_metadata.roles.indexOf('writer')){
    // code to be executed
  }
  ...
}
```

### ユーザーメタデータの読み取り

色の好みなど、特定の設定に基づいて決定を下すことができます。

```javascript lines theme={null}
function(user, context, callback){
  user.user_metadata = user.user_metadata || {};
  if (user.user_metadata.preferences.color === 'black'){
    // code to be executed
  }
  ...
}
```

### アプリケーションメタデータの読み取り（clientMetadata）

アプリケーションメタデータ（`clientMetadata`）は、`コンテキスト`オブジェクトのオプションの最上位プロパティです。既存のアプリケーションには、このプロパティの値はありません。

```javascript lines theme={null}
function(user, context, callback){
  context.clientMetadata = context.clientMetadata || {};
  if (context.clientMetadata.usersuppliedkey1 === 'black'){
    // this code would not be executed for the user
  }
  ...
}
```

## メタデータの更新

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  ルールを使用して、Auth0がIdPから受け取ったSAML属性を`user_metadata`や`app_metadata`にマッピングします。
</Callout>

### アプリメタデータの更新

管理者ロールをユーザーに追加するには:

```javascript lines theme={null}
function(user, context, callback){
  user.app_metadata = user.app_metadata || {};
  // update the app_metadata that will be part of the response
  user.app_metadata.roles = user.app_metadata.roles || [];
  user.app_metadata.roles.push('administrator');

  // persist the app_metadata update
  auth0.users.updateAppMetadata(user.user_id, user.app_metadata)
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
    });
}
```

これにより、ユーザープロファイルの詳細が次のJSON表記になります。

```json lines theme={null}
{
  "user_id": "jdoe",
  "email": "john.doe@example.com",
  "app_metadata": {
    "roles": [ "writer", "administrator" ]
  },
  "user_metadata": {
    "preferences": {
      "color": "blue"
    }
  }
}
```

### ユーザーメタデータの更新

ユーザーの`fontSize`設定をユーザープロファイルに追加するには:

```javascript lines theme={null}
function(user, context, callback){
  user.user_metadata = user.user_metadata || {};
  // update the user_metadata that will be part of the response
  user.user_metadata.preferences = user.user_metadata.preferences || {};
  user.user_metadata.preferences.fontSize = 12;

  // persist the user_metadata update
  auth0.users.updateUserMetadata(user.user_id, user.user_metadata)
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
    });
}
```

これにより、ユーザープロファイルの詳細が次のJSON表記になります。

```json lines theme={null}
{
  "user_id": "jdoe",
  "email": "john.doe@example.com",
  "app_metadata": {
    "roles": [ "writer" ]
  },
  "user_metadata": {
    "preferences": {
      "color": "blue",
      "fontSize": 12
    }
  }
}
```

### アプリとユーザーのメタデータを同時に更新

ルールの処理時間を短縮するには、同じルールで`app_metadata`と`user_metadata`の両方を更新します。

```javascript lines theme={null}
function(user, context, callback){

  var q = require('q');

  user.app_metadata = user.app_metadata || {};
  user.user_metadata = user.user_metadata || {};
  // update the user_metadata that will be part of the response
  user.user_metadata.preferences = user.user_metadata.preferences || {};
  user.user_metadata.preferences.fontSize = 12;

  // update the app_metadata that will be part of the response
  user.app_metadata.roles = user.app_metadata.roles || [];
  user.app_metadata.roles.push('admin');

  // persist the app_metadata update
  var appMetadataPromise  = auth0.users.updateAppMetadata(user.user_id, user.app_metadata);

  // persist the user_metadata update
  var userMetadataPromise = auth0.users.updateUserMetadata(user.user_id, user.user_metadata);

  // using q library to wait for all promises to complete
  q.all([userMetadataPromise, appMetadataPromise])
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
    });
}
```

これにより、ユーザープロファイルの詳細が次のJSON表記になります。

```json lines theme={null}
{
  "user_id": "jdoe",
  "email": "john.doe@example.com",
  "app_metadata": {
    "roles": [ "writer", "admin" ]
  },
  "user_metadata": {
    "preferences": {
      "color": "blue",
      "fontSize": 12
    }
  }
}
```

## メタデータの削除

### アプリメタデータのプロパティと値を削除します

プロパティを削除するには、プロパティの値を`null`に設定します。

#### ユーザーのロールの削除の例

ユーザーのロールを削除するには、次のサンプルルールを使用します。

```javascript lines theme={null}
function(user, context, callback){
  user.app_metadata = user.app_metadata || {};
  // update the app_metadata that will be part of the response
  user.app_metadata.roles = null;

  // persist the app_metadata update
  auth0.users.updateAppMetadata(user.user_id, user.app_metadata)
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
    });
}
```

これにより、ユーザープロファイルが次のJSON表記になります。

```json lines theme={null}
{
  "user_id": "jdoe",
  "email": "john.doe@example.com",
  "app_metadata": { },
  "user_metadata": {
    "preferences": {
      "color": "blue"
    }
  }
}
```

#### 単一のプロパティ値の削除の例

プロパティの単一の値を削除するには、その特定の値を削除します。たとえば、ユーザープロファイルから`ライター`ロールを削除するには:

```javascript lines theme={null}
function(user, context, callback){
  user.app_metadata = user.app_metadata || {};
  user.app_metadata.roles = user.app_metadata.roles || [];

  var index = user.app_metadata.roles.indexOf('writer');

  if (index !== -1){
    // update the app_metadata that will be part of the response
    user.app_metadata.roles.splice(index, 1);
  }

  // persist the app_metadata update
  auth0.users.updateAppMetadata(user.user_id, user.app_metadata)
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
    });
}
```

これにより、ユーザープロファイルが次のJSON表記になります。

```json lines theme={null}
{
  "user_id": "google-oauth2|1234",
  "email": "john.doe@gmail.com",
  "app_metadata": {
    "roles": [ ]
  },
  "user_metadata": {
    "preferences": {
      "color": "blue"
    }
  }
}
```

`ロール`プロパティはまだ存在しますが、値が含まれていないことに注意してください。

### ユーザーメタデータのプロパティと値を削除

ユーザーの色の設定を削除するには:

```javascript lines theme={null}
function(user, context, callback){
  user.user_metadata = user.user_metadata || {};
  // update the user_metadata that will be part of the response
  user.user_metadata.preferences = user.user_metadata.preferences || {};
  delete user.user_metadata.preferences.color;

  // persist the user_metadata update
  auth0.users.updateUserMetadata(user.user_id, user.user_metadata)
    .then(function(){
      callback(null, user, context);
    })
    .catch(function(err){
      callback(err);
  });
}
```

これにより、ユーザープロファイルの詳細が次のJSON表記になります。

```json lines theme={null}
{
  "user_id": "jdoe",
  "email": "john.doe@example.com",
  "app_metadata": {
    "roles": [ "writer" ]
  },
  "user_metadata": {
    "preferences": { }
  }
}
```

## もっと詳しく

* [ルール内からManagement APIを使用](/docs/ja-jp/customize/rules/use-management-api)
* [ルールのコンテキストオブジェクトのプロパティ](/docs/ja-jp/customize/rules/context-object)
* [Auth0ルール](/docs/ja-jp/customize/rules)
