---
schema_version: "1"
id: 69395cc2051b27b432b7fa24b2dad26a547839ba4d31978a2da657ab51d8da39
title: Avro スキーマの型の再利用
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/dataweave/2.8/dataweave-type-reuse-avro-schema.md
canonical_url: https://docs.mulesoft.com/jp/dataweave/2.8/dataweave-type-reuse-avro-schema
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 2687565dfc185d8a78c7ce50555c2a7c25a5b0f8b0827ab609c0afa7dd9cbf9f
description: MuleSoft Documentation Site
release: "2.8"
latest: false
---
# Avro スキーマの型の再利用

Avro スキーマは、Apache Avro 形式で保存するレコードの構造とデータ型を定義する正式な仕様です。Apache Avro 形式は、Apache Hadoop や Apache Kafka などのビッグデータシステムでよく使用されるデータシリアル化システムです。Avro スキーマにより、関与するプログラミング言語やプラットフォームに関係なく、Avro に書き込まれたデータを容易に理解したり、異なるシステム間で処理したりできます。

Avro スキーマは JSON データ形式で定義されます。​`avroschema!`​ モジュールローダーを使用して、Avro スキーマファイル (​`.json`​ または ​`.avsc`​) をモジュールとして DataWeave スクリプトにインポートできます。このローダーにより、各自のスキーマで宣言されている型を DataWeave で直接使用できます。 DataWeave は、Avro スキーマファイルを読み込み、ファイルの宣言を他の DataWeave モジュールの型と同じようにアクセスできる DataWeave 型ディレクティブに変換します。ディレクティブを使用して、新しい型を作成したり、変数の型をチェックしたり、パターンを照合したり、型を使用する新しい関数を宣言したりします。DataWeave では、これらの型の使用方法に制限はありません。

## [](#インポート構文)インポート構文

Avro スキーマで定義されている型をインポートするには、以下の構文を使用します。

- `typeToImport`​: `*`​ を使用してスキーマで定義されているすべての型をインポートしたり、スキーマの 1 つの型 (​`Root`​ など) をインポートしたりします。スキーマでは、スキーマで指定された名前を Avro 名前付き型 (​`record`​ や ​`enum`​ など) で使用します。異なる名前の Avro スキーマの型 (​`Root as Country`​ など) をインポートすることもできます。スクリプトでその名前を使用して型を参照できます。
- `pathToAvroSchemaFile`​: スキーマファイルへのパスを指定するには、ファイルの区切り文字を ​`::`​ に置き換えて、ファイル名の拡張子 (​`.json`​ または ​`.avsc`​) を削除します。たとえば、スキーマへのパスが ​`example/schema/User.json`​ の場合、​`example::schema::User`​ を使用します。

import \_typesToImport\_ from avroschema!\_pathToAvroSchemaFile\_

次の例は、型をインポートする方法を示しています。

import \* from avroschema!example::schema::User

## [](#dataweave-スクリプトでの型の使用)DataWeave スクリプトでの型の使用

次の例では Avro スキーマを使用します。

User.json (​`example/schema/User.json`​)

```JSON
{
  "name": "User",
  "type": "record",
  "fields": [
    {"name": "name", "type": "string" },
    {"name": "email", "type": "string" },
    {"name": "address", "type": ["null", "string"]},
    {"name": "telephone", "type": ["null", "string"]}
  ]
}
```

前の例の import ディレクティブをスクリプトヘッダーに含めると、Avro スキーマの既存の型が読み込まれます。​`import * from avroschema!example::schema::User`​ では、唯一の既存の型は、ルートで指定された ​`User`​ 型です。この型は、4 つのプロパティ (​`name`​、​`email`​、​`address`​、​`telephone`​) を持つオブジェクトを記述します。このディレクティブは、DataWeave スクリプトで次の型を宣言することに相当します。

DataWeave スクリプト:

```dataweave
%dw 2.0
type User = {| name: String, email: String, address?: Null | String, telephone?: Null | String |}
```

`address`​ と ​`telephone`​ は省略可能な項目 (​`?`​ で示される) です。

`User`​ 型を使用して、値が Avro スキーマで定義された構造に従っているかどうかを判断できます。 次の例では、オブジェクトに必須項目 ​`name`​ および ​`email`​ が含まれているため、値 ​`true`​ が出力されます。

DataWeave スクリプト:

```dataweave
%dw 2.0
import * from avroschema!example::schema::User
---
{
 name: "John",
 email: "john@acme.org"
} is User
```

出力:

"true"

次の例では、オブジェクトに必須項目 ​`name`​ が含まれていないため、値 ​`false`​ が出力されます。

DataWeave スクリプト:

```dataweave
%dw 2.0
import * from avroschema!example::schema::User
---
{
 email: "john@acme.org",
 address: "123 Evergreen St.",
 telephone: "555 555 555"
} is User
```

出力:

"false"

## [](#スキーマ内での名前付き型の使用)スキーマ内での名前付き型の使用

DataWeave はスキーマで定義された名前付き型ごとに個別の型を生成します。名前付き型には、レコード、列挙、および固定型があります。

Address.json (​`example/schema/Address.json`​)

```JSON
{
  "name": "Address",
  "type": "record",
  "fields" : [
    {"name": "city", "type": "string"},
    {"name": "state", "type": "string"},
    {
      "name": "country",
      "type": {
        "name": "Country",
        "type": "record",
        "fields": [
          {"name":  "isoCode", "type": "string"},
          {"name":  "name", "type": "string"}
        ]
      }
    }
  ]
}
```

次のディレクティブを使用して、前のスキーマの型をインポートできます。

import \* from avroschema!example::schema::Address

スキーマで定義された型には、次の型の宣言と同じ効果があります。

type Address = {| city: String, state: String, country: Country |}

type Country = {| isoCode: String, name: String |}

インポートディレクティブを使用して、スキーマの 1 つの型をインポートします。

import Country from avrochema!example::schema::Address

型名の競合を回避するために、​`as`​ キーワードを使用して、インポートされた型名を別の名前に変更できます。

import Country as Address\_Country from avroschema!example::schema::Address