---
schema_version: "1"
id: 5643e557cd96ee56d4515167821f6ca86dc14835cd4551f6e1361123587358e6
title: DataWeave スクリプト
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/dataweave/2.6/dataweave-language-introduction.md
canonical_url: https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-language-introduction
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 831fba7817e613d4fa45bbdd60853946ff5cefbdf9b5148d70b573fbf3bb569b
description: MuleSoft Documentation Site
release: "2.6"
latest: false
---
# DataWeave スクリプト

DataWeave は Mule フローで使用する主データ変換言語です。 開始する前に、Mule 4 アプリケーションでは DataWeave のバージョン 2.x が使用されることに注意してください。Mule 3 アプリケーションでの DataWeave については、​[DataWeave バージョン 1.2 のドキュメント](#1.2@dataweave::index.adoc)​を参照してください。 他の Mule バージョンの場合は、DataWeave の目次のバージョンセレクターを使用できます。

Transform Message コンポーネントでスタンドアロンの DataWeave スクリプトを記述できます。また、インライン DataWeave 式を記述すると、データを​_その場_​で変換し、さまざまなプロパティの値 (イベントプロセッサーまたはグローバル設定要素の設定項目など) を動的に設定することもできます。インライン DataWeave 式は ​`#[ ]`​ コードブロックで囲みます。たとえば、DataWeave 式を使用して、Choice ルーターの条件を設定したり、Set Payload または Set Variable コンポーネントの値を設定したりできます。

次の例の DataWeave コードでは、DataWeave の ​`now()`​ 関数を使用して、タイムスタンプ変数を現在時刻に設定しています。

例: 簡単なインライン DataWeave スクリプト

```xml
<set-variable value="#[now()]" variableName="timestamp" doc:name="Set timestamp" />
```

DataWeave コードを​[外部ファイル](#dwl_file)​に保存して他の DataWeave スクリプトに読み込んだり、Mule アプリケーションのすべてのコンポーネントで共有できる再利用可能な DataWeave 関数のモジュール (ライブラリ) に DataWeave コードをファクタリングしたりすることもできます。

## [](#dataweave-スクリプトの構造)DataWeave スクリプトの構造

DataWeave スクリプトとファイルは 2 つの主なセクションに分割されます。

- ヘッダー: 本文の式に適用するディレクティブを定義します (省略可能)。
- 本文: 出力構造を生成する式が含まれます。

ヘッダーを含めた場合、ヘッダーは本文の上に表示され、3 つのダッシュ ​`---`​ で構成される区切り文字で分離されます。

DataWeave ファイルの例を次に示します。このファイルでは、ヘッダーで出力ディレクティブを宣言し、その後の DataWeave 式で、子の 2 つのキー/値ペアを含むユーザーオブジェクトを作成します。

例: 簡単な DataWeave スクリプト

```dataweave
%dw 2.0
output application/xml
---
{
  user: {
    firstName: payload.user_firstname,
    lastName: payload.user_lastName
  }
}
```

## [](#dw_header)DataWeave ヘッダー

この例は、ヘッダーディレクティブで使用できるキーワード (​`import`​、​`var`​ など) を示しています。

DataWeave スクリプト

```dataweave
%dw 2.0
import * from dw::core::Arrays
var myVar=13.15
fun toUser(obj) = {
  firstName: obj.field1,
  lastName: obj.field2
}
type Currency = String { format: "##"}
ns ns0 http://www.abc.com
output application/xml
---
/*
 * Body here.
 * /
```

- `%dw`​: 以前のバージョンの DataWeave との後方互換性を維持し、現在のバージョンからの変更で構文が壊れないようにするために、​`%dw`​ ディレクティブでは、スクリプトごとに前の DataWeave バージョンの仕様がサポートされます。このディレクティブの使用は省略可能です。ディレクティブが指定されていない場合、デフォルトバージョンは 2.0 になります。DataWeave バージョン 2.0 ～ 2.4 は、構文が変更されていないため同じです。
    
    例: `%dw 2.0`
- `output`​: スクリプトから出力される MIME タイプを特定する、よく使用されるディレクティブ。
    
    例: `output application/xml`
    
    有効な値: [サポートされるデータ形式](https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-formats)​。
    
    デフォルト: 出力が指定されていない場合、デフォルトの出力は、スクリプトで使用されている入力 (ペイロード、変数など) を検査するアルゴリズムによって決まります。
    
    1. 入力がない場合、デフォルトの ​`output application/java`​ になります。
    2. すべての入力の MIME タイプが同じ場合、スクリプトの出力は同じ MIME タイプになります。たとえば、すべての入力が ​`application/json`​ の場合、​`output application/json`​ が出力されます。
    3. 各入力の MIME タイプが異なり、出力が指定されていない場合、スクリプトは例外をスローして、出力の MIME タイプを指定するようにユーザーに知らせます。
        
        指定できる出力のタイプは 1 つのみです。
- `import`​: DataWeave 関数モジュールをインポートします。​[「DataWeave 関数」](https://docs.mulesoft.com/jp/dataweave/2.6/dw-functions)​を参照してください。
- `var`​: DataWeave スクリプトの本文全体で参照できる定数を定義するためのグローバル変数。
    
    例
    
    ```dataweave
    %dw 2.0
    var conversionRate=13.15
    output application/json
    ---
    {
     price_dollars: payload.price,
     price_localCurrency: payload.price * conversionRate
    }
    ```
    
    詳細は、​[「DataWeave 変数」](https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-variables)​を参照してください。
- `type`​: 式で使用できるカスタム型を指定します。
    
    完全な例は、​[「DataWeave を使用した型の強制」](https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-types-coercion)​を参照してください。
- `ns`​: 名前空間。名前空間をインポートするために使用します。
    
    例
    
    ```dataweave
    %dw 2.0
    output application/xml
    
    ns ns0 http://www.abc.com
    ns ns1 http://www.123.com
    ---
    {
        ns0#myroot: {
             ns1#secondroot: "hello world"
        }
    }
    ```
- `fun`​: スクリプトの本文内からコールできるカスタム関数を作成します。
    
    例
    
    ```dataweave
    %dw 2.0
    output application/json
    fun toUser(user) = {firstName: user.name, lastName: user.lastName}
    ---
    {
      user: toUser(payload)
    }
    ```

### [](#インライン-dataweave-スクリプトにヘッダーを含める)インライン DataWeave スクリプトにヘッダーを含める

インライン DataWeave スクリプトを記述する場合、DataWeave スクリプトのすべての行を 1 つの行にフラット化することで、ヘッダーディレクティブを含めることができます。小さな DataWeave スクリプトの場合、これにより、ヘッダーディレクティブをすばやく適用し (個別の Transform Message コンポーネントを追加して変数を設定する必要はありません)、次のイベントプロセッサーで変数を置き換えることができます。

たとえば、前述の Transform Message コンポーネントと同じ有効な XML 出力を作成する Mule 設定の XML を次に示します。

例: 簡単なインライン DataWeave スクリプト

```xml
<set-payload value="#[output application/xml --- { myroot: payload } ]" doc:name="Set Payload" />
```

DataWeave ドキュメントに多くの​[変換例](#see_also)​が記載されています。

## [](#dataweave-本文)DataWeave 本文

DataWeave 本文には、出力構造を生成する式が含まれます。MuleSoft では、DataWeave モデルを使用してデータを操作するための正規の方法 (クエリ、変換、ビルドプロセス) が提供されています。

DataWeave スクリプト用の JSON 入力を提供する簡単な例を次に示します。

例: JSON 入力

```json
{
    "message": "Hello world!"
}
```

この DataWeave スクリプトは、上の JSON 入力のペイロード全体を取得して ​`application/xml`​ 形式に変換します。

例: application/xml を出力するスクリプト

```dataweave
%dw 2.0
output application/xml
---
payload
```

次の例は、DataWeave スクリプトから生成された XML 出力を示しています。

例: XML 出力

```xml
<?xml version='1.0' encoding='UTF-8'?>
<message>Hello world!</message>
```

上のスクリプトは JSON 入力を XML 出力に正常に変換します。

## [](#エラー-スクリプティングエラーと書式設定エラー)エラー (スクリプティングエラーと書式設定エラー)

DataWeave スクリプトは、DataWeave コーディングエラーを原因とするエラーと書式設定エラーを原因とするエラーをスローする可能性があります。このため、データ形式を変換する場合、言語と形式の両方の制約に留意することが重要です。たとえば、XML には単一ルートノードが必要です。​[上の DataWeave スクリプト](#script_output_xml)​を使用して次の JSON 入力を XML に変換しようとすると、JSON 入力に単一ルートがないためエラー (​`Unexpected internal error`​) が発生します。

例: JSON 入力

```json
{
    "size" : 1,
    "person": {
      "name": "Yoda"
    }
}
```

スクリプトを作成するには、入力を JSON に似た ​[application/dw](https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-formats#format_dataweave)​ 形式に標準化することをお勧めします。実際に、エラーが発生した場合は、単に入力を ​`application/dw`​ に変換することができます。変換が成功した場合、エラーは書式設定エラーの可能性があります。変換が失敗した場合、エラーはコーディングエラーの可能性があります。

次の例では、出力形式を ​`application/dw`​ に変更します。

例: application/dw を出力する DataWeave スクリプト

```dataweave
%dw 2.0
output application/dw
---
payload
```

このスクリプトでは上記の ​[JSON 入力例](#json_input)​から ​`application/dw`​ 出力が正常に生成されることを確認できます。

例: application/dw 出力

```dataweave
{
  size: 1,
  person: {
    name: "Yoda"
  }
}
```

つまり、前述のエラー (​`Unexpected internal error`​) は、コーディングではなく形式に固有のエラーであることがわかります。上記の ​`application/dw`​ 出力では、XML 形式で必要な単一ルート要素が提供されていないことを確認できます。​_XML_​ 出力用のスクリプトを修正するには、例えば次のように単一ルート要素をスクリプトに提供する必要があります。

例: application/xml を出力するスクリプト

```dataweave
%dw 2.0
output application/xml
---
{
    "myroot" : payload
}
```

出力が XML の要件を満たすようになったため、出力ディレクティブを ​`application/xml`​ に戻すと、結果として有効な XML 出力が生成されます。

例: 単一 XML ルートを含む XML 出力

```xml
<?xml version='1.0' encoding='UTF-8'?>
<myroot>
  <size>1</size>
  <person>
    <name>Yoda</name>
  </person>
</myroot>
```

## [](#dataweave-コメント)DataWeave コメント

Java に似た構文を使用するコメントも DataWeave で受け入れられます。

```dataweave
%dw 2.0
output application/json
---
/* Multi-line
 * comment syntax */
payload
// Single-line comment syntax
```

<table><tbody><tr><td class="icon"><i class="fa icon-warning" title="Warning"></i></td><td class="content">Anypoint Studio で発生する可能性があるエラーを回避するには、DataWeave スクリプトの本文の最初の行がコメントである場合に、複数行のコメント構文 (​<code>/\​<strong>comment here</strong>​/</code>​) を使用します。後続のスクリプトコメントには任意の構文 (​<code>//comment</code>​ または ​<code>/\​<strong>comment</strong>​/</code>​) を使用できます</td></tr></tbody></table>

## [](#特殊文字のエスケープ)特殊文字のエスケープ

DataWeave では、バックスラッシュ (​`\`​) を使用して、入力文字列で使用している特殊文字をエスケープします。

詳細は、​[「特殊文字のエスケープ」](https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-types#escape-chars-string)​を参照してください。

DataWeave スクリプトの​_入力_​文字列では特殊文字がエスケープされますが、​_出力_​では、出力形式の要件に従ってエスケープされます。この要件は、​`application/json`​、​`application/xml`​、​`application/csv`​ などの形式によって異なる可能性があります。

この例では、二重引用符で囲まれた内部の二重引用符がエスケープされます。

DataWeave の例

```txt
%dw 2.0
output application/json
---
{
    "a": "something",
    "b": "dollar sign (\$)",
    "c": 'single quote (\')',
    "c": "double quote (\")",
    "e": `backtick (\`)`
}
```

JSON 出力でも、出力が有効な JSON になるように二重引用符がエスケープされますが、他の文字はエスケープされません。

JSON 出力

```json
{
  "a": "something",
  "b": "dollar sign ($)",
  "c": "single quote (')",
  "c": "double quote (\")",
  "e": "backtick (`)"
}
```

次の例では、同じ文字がエスケープされますが、XML に出力されます。

DataWeave の例

```txt
%dw 2.0
output application/xml
---
{
  xmlExample:
  {
     "a": "something",
     "b": "dollar sign (\$)",
     "c": 'single quote (\')',
     "d": "double quote (\")",
     "e": `backtick (\`)`
   }
}
```

XML 出力は、(JSON 出力とは異なり) 二重引用符をエスケープしなくても有効です。

XML 出力

```xml
<?xml version='1.0' encoding='UTF-8'?>
<xmlExample>
  <a>something</a>
  <b>dollar sign ($)</b>
  <c>single quote (')</c>
  <d>double quote (")</d>
  <e>backtick (`)</e>
</xmlExample>
```

## [](#valid-identifiers)有効な識別子を宣言するためのルール

有効な識別子を宣言するには、その名前が次の要件を満たす必要があります。

- 大文字または小文字にかかわらずアルファベット文字 (a-z) で始まる必要があります。
- 名前の 2 文字目以降には、文字、数字、およびアンダースコア (​`_`​) の任意の組み合わせを含めることができます。
- 名前は DataWeave の予約済みのキーワード (完全なリストは、​[予約済みのキーワード](#reserved-keywords)​ を参照) に一致することはできません。

有効な識別子のいくつかの例を以下に示します。

- `myType`
- `abc123`
- `a1_3BC_22`
- `Z_____4`
- `F`

次の表で、無効な識別子の例と、無効になる理由を説明します。

<table class="tableblock frame-all grid-all fit-content spread">
<colgroup>
<col>
<col>
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Identifier (識別子)</th>
<th class="tableblock halign-left valign-top">問題</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>123456</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>数字で始まることはできません。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>value$</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>特殊文字を含めることはできません。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>_number</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>アンダースコアで始まることはできません。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>type</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>予約済みのキーワードは使用できません。</p>
</div></div></td>
</tr>
</tbody>
</table>

### [](#reserved-keywords)予約済みのキーワード

有効な識別子は、予約済みの DataWeave キーワードに一致することはできません。

- `and`  
    [論理演算子](https://docs.mulesoft.com/jp/dataweave/2.6/dw-operators#logical_operators)​として予約済み
- `as`  
    [型強制](https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-types-coercion)​用に予約済み
- `async`  
    予約済み
- `case`  
    `case`​ ステートメント用に予約済み。たとえば、​[パターン一致](https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-pattern-matching)​を実行したり、​[`update`​ 演算子](https://docs.mulesoft.com/jp/dataweave/2.6/dw-operators#update-operator)​で使用したりします。
- `default`  
    パラメーターの​[デフォルト値](https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-cookbook-defaults)​の割り当て用に予約済み
- `do`  
    [`do`](https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-flow-control)​ ステートメント用に予約済み
- `else`  
    if-else および else-if ステートメント用に予約済み
    
    [「DataWeave のフローコントロール」](https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-flow-control)​を参照してください。
- `enum`  
    予約済み
- `false`  
    ブール値として予約済み
- `for`  
    予約済み
- `fun`  
    [DataWeave ヘッダー](#dw_header)​ の関数定義用に予約済み
- `if`  
    if-else および else-if ステートメント用に予約済み
    
    [「DataWeave のフローコントロール」](https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-flow-control)​を参照してください。
- `import`  
    [DataWeave ヘッダー](#dw_header)​ の ​`import`​ ディレクティブ用に予約済み
- `input`  
    予約済み
- `is`  
    予約済み
- `ns`  
    [DataWeave ヘッダー](#dw_header)​ の名前空間定義用に予約済み
- `null`  
    値 ​`null`​ として予約済み
    
    [「Null (dw::Core 型)」](https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-types#dw_type_null)​を参照してください。
- `or`  
    [論理演算子](https://docs.mulesoft.com/jp/dataweave/2.6/dw-operators#logical_operators)​として予約済み
- `output`  
    [DataWeave ヘッダー](#dw_header)​ の ​`output`​ ディレクティブ用に予約済み
- `private`  
    予約済み
- `throw`  
    予約済み
- `true`  
    ブール値として予約済み
- `type`  
    [DataWeave ヘッダー](#dw_header)​ の型定義用に予約済み
- `unless`  
    予約済み
- `using`  
    後方互換性のために予約済み。​`do`​ で置き換えられます。
    
    [「スコープ演算子とフローコントロール演算子」](https://docs.mulesoft.com/jp/dataweave/2.6/dw-operators#scope-and-flow-control-operators)​を参照してください。
- `var`  
    [DataWeave ヘッダー](#dw_header)​ の変数定義用に予約済み
- `yield`  
    予約済み

## [](#dwl_file)dwl ファイル

Transform や他のコンポーネント内で DataWeave スクリプトを指定するのに加えて、​`.dwl`​ ファイル内でスクリプトを指定することもできます。Studio プロジェクトでは、スクリプトファイルは ​`src/main/resources`​ に保存されます。

Mule アプリケーションの XML では、​`${file::filename}`​ 構文を使用して、​`dwl`​ ファイル内のスクリプトを、式を期待している XML タグに送信することができます。たとえば、次の Choice ルーターの ​`when expression="${file::someFile.dwl}"`​ を参照してください。

```xml
<http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/test">
  <http:response >
    <http:body ><![CDATA[#[${file::transform.dwl}]]]></http:body>
  </http:response>
</http:listener>
<choice doc:name="Choice"  >
  <when expression="${file::someFile.dwl}" >
    <set-payload value="It's greater than 4!" doc:name="Set Payload"  />
  </when>
  <otherwise >
    <set-payload value="It's less than 4!" doc:name="Set Payload" />
  </otherwise>
</choice>
```

## [](#see_also)関連情報

- [DataWeave セレクター](https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-selectors)
- [DataWeave 関数](https://docs.mulesoft.com/jp/dataweave/2.6/dw-functions)
- [DataWeave の解説書](https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-cookbook)
- [サポートされるデータ形式](https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-formats)
- [関数とラムダ](https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-types#functions-and-lambdas)