---
schema_version: "1"
id: 84651fe3d64118c10047cd806e2ba4f481b01edeaa8e9abb3392980dd1ab6a9c
title: MEL から DataWeave への移行
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/mule-runtime/4.3/migration-mel.md
canonical_url: https://docs.mulesoft.com/jp/mule-runtime/4.3/migration-mel
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 028e34a440955c4238e0be1a684cc5ea310c4e5ea713bba5831d9b4da51760b8
description: MuleSoft Documentation Site
release: "4.3"
latest: false
---
# MEL から DataWeave への移行

Mule 4 では Mule Expression Language (MEL) が DataWeave 式言語に要素に置き換わりました。 このセクションでは、Mule アプリケーションの MEL 式を DataWeave (2.0 以降) に移行するための指針を提供します。

## [](#dataweave-の概要)DataWeave の概要

DataWeave は、単に値の参照と条件の評価を行う式言語として、または関数や再帰を含む複雑なデータ変換を作成するスクリプティング言語として使用できる Mule 固有の言語です。

MEL とは違い、JSON、XML、CSV など、さまざまなデータ型が標準でサポートされます。つまり、式を評価する前にデータを変更する必要がなくなりました。 また、関数のマッピングやデータの絞り込みなど、高度なユースケースもサポートされています。

DataWeave のメインデータセレクターは ​`.`​ 演算子であることに留意してください。 ほとんどキーワードは MEL と共有されるので、ほとんどのシナリオの構文は同じになります。たとえば、​`#[message.payload.name]`​ は両言語とも同じです。

MEL と DataWeave の主な違いは、DataWeave 式には副作用がないことです。DataWeave を使用してデータを抽出または生成できますが、データを変更することはできません。 それらのユースケースの対処法については、​[Java インテグレーション](https://docs.mulesoft.com/jp/mule-runtime/4.3/intro-java-integration)​の例を参照してください。

## [](#mel-の使用法)MEL の使用法

以下のセクションでは、MEL の一部の使用法を Mule 4 に適応させる方法を説明します。

### [](#コンテキスト変数へのアクセス)コンテキスト変数へのアクセス

次の変更を除き、DataWeave ではコンテキスト変数 (Mule Runtime 変数とも呼ばれる) は同じままです。

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">MEL</th>
<th class="tableblock halign-left valign-top">DataWeave</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>フロー変数</strong>​</p>
</div>
<div class="paragraph">
<p><code>flowVars</code>​</p>
</div>
<div class="ulist">
<ul>
<li>
<p>例: <code>#[flowVars.myVar]</code>​</p>
</li>
</ul>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>Mule イベント変数</strong>​</p>
</div>
<div class="paragraph">
<p><code>vars</code>​</p>
</div>
<div class="ulist">
<ul>
<li>
<p>例: <code>#[vars.myVar]</code>​</p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>例外</strong>​</p>
</div>
<div class="paragraph">
<p><code>exception</code>​</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><a href="https://docs.mulesoft.com/jp/mule-runtime/4.3/error-handling" class="xref page">Mule エラー</a>​:</p>
</div>
<div class="paragraph">
<p><code>error</code>​</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>インバウンド添付ファイル</strong>​</p>
</div>
<div class="paragraph">
<p><code>message.inboundAttachments</code>​</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>マルチパートデータ形式</strong>​</p>
</div>
<div class="paragraph">
<p>情報:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/mulesoft/mule-migration-assistant/blob/master/docs/user-docs/migration-tool-post-mig.adoc#inbound_attachments">インバウンド添付ファイル (GitHub)</a></p>
</li>
<li>
<p><a href="https://docs.mulesoft.com/jp/mule-runtime/4.3/intro-mule-message#attachments" class="xref page">添付ファイル</a></p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>インバウンドプロパティ</strong>​</p>
</div>
<div class="paragraph">
<p><code>message.inboundProperties</code>​</p>
</div>
<div class="ulist">
<ul>
<li>
<p>例:</p>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-txt hljs" data-lang="txt">#[inboundProperties.'http.query.params']
#[inboundProperties]</code></pre>
</div>
</div>
</li>
</ul>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>Mule メッセージ属性</strong>​ (メタデータ)</p>
</div>
<div class="paragraph">
<p><code>attributes</code>​</p>
</div>
<div class="ulist">
<ul>
<li>
<p>例:</p>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-txt hljs" data-lang="txt">#[attributes.queryParams]
#[attributes.headers]</code></pre>
</div>
</div>
</li>
</ul>
</div>
<div class="paragraph">
<p><a href="https://docs.mulesoft.com/jp/mule-runtime/4.3/intro-mule-message#inbound-properties-are-now-attributes" class="xref page">インバウンドプロパティが属性に</a>​</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>アウトバウンド添付ファイル</strong>​</p>
</div>
<div class="paragraph">
<p><code>message.outboundAttachments</code>​</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>マルチパートデータ形式</strong>​</p>
</div>
<div class="paragraph">
<p>情報:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/mulesoft/mule-migration-assistant/blob/master/docs/user-docs/migration-tool-post-mig.adoc#outbound_attachments">アウトバウンド添付ファイル</a></p>
</li>
<li>
<p><a href="https://docs.mulesoft.com/jp/mule-runtime/4.3/intro-mule-message#attachments" class="xref page">添付ファイル</a>​。</p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>アウトバウンドプロパティ</strong>​</p>
</div>
<div class="paragraph">
<p><code>message.outboundProperties</code>​</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>削除:</strong>​</p>
</div>
<div class="paragraph">
<p><a href="https://docs.mulesoft.com/jp/mule-runtime/4.3/intro-mule-message#outbound-properties" class="xref page">「アウトバウンドプロパティ」</a>​を参照してください。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>message.dataType</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>dataType</code>​</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>message.id</code>​、​<code>message.rootId</code>​、​<code>message.replyTo</code></p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>削除</strong>​</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>レコード変数</strong>​</p>
</div>
<div class="paragraph">
<p><code>recordVars</code>​</p>
</div>
<div class="ulist">
<ul>
<li>
<p>例: <code>#[recordVars.myVar]</code>​</p>
</li>
</ul>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>Mule イベント変数</strong>​</p>
</div>
<div class="paragraph">
<p><code>vars</code>​</p>
</div>
<div class="ulist">
<ul>
<li>
<p>例: <code>#[vars.myVar]</code>​</p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>セッション変数</strong>​</p>
</div>
<div class="paragraph">
<p><code>sessionVars</code>​</p>
</div>
<div class="ulist">
<ul>
<li>
<p>例: <code>#[sessionVars.myVar]</code>​</p>
</li>
</ul>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>削除:</strong>​</p>
</div>
<div class="paragraph">
<p>トランスポートバリアーは Mule 4 には存在しません。情報:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://docs.mulesoft.com/jp/mule-runtime/4.3/intro-mule-message#session-properties" class="xref page">セッションプロパティ</a></p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>server.dateTime</code>​</p>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><strong>削除:</strong>​</p>
</div>
<div class="paragraph">
<p>DataWeave ​<a href="https://docs.mulesoft.com/dataweave/latest/dw-core-functions-now" class="xref page"><code>now</code></a>​ 関数を使用する。</p>
</div></div></td>
</tr>
</tbody>
</table>

### [](#extract_data)データの抽出

[DataWeave セレクター](#dataweave-selectors.adoc)​を使用して、MEL と同様にデータを照会できます。また、JSON などの型に対応するために、さらに変換を行う必要がありません。

以下の例では、次の JSON ペイロードの ID をログに記録します。

JSON ペイロード

```json
{
  "name" : "Rachel Duncan",
  "id": "779H41"
}
```

Mule 3 の例

```xml
<json:json-to-object-transformer returnClass="java.util.Map" />
<logger message="Updating health check record for subject '#[payload.id]'" level="INFO" />
```

Mule 4 の例

```xml
<logger message="Updating health check record for subject '#[payload.id]'" />
```

### [](#値の割り当て)値の割り当て

前述のとおり、DataWeave では、MEL の ​`expression-component`​ で許可されていたようなデータの変更はサポートされていません。そのようなユースケースを実行するには、Scripting Module を使用する必要があります。

Java マップとして記述されている​[前述](#extract_data)​のペイロードを考えてみます。例では、​`name`​ 属性を変更します。

Mule 3 の例

```xml
<expression-component>
  <![CDATA[
    payload.name = 'R. Duncan'
  ]]>
</expression-component>
```

Mule 4 の例

```xml
<script:execute engine="groovy">
  <script:code>
    payload.put('name', 'R. Duncan')
    return payload
  </script:code>
</script:execute>
```

Scripting Module を使用するには、Studio のパレットを使用してアプリケーションに追加するか、​`pom.xml`​ ファイルで次の連動関係を追加します。

```xml
<dependency>
  <groupId>org.mule.modules</groupId>
  <artifactId>mule-scripting-module</artifactId>
  <version>1.1.0</version> <!-- or newer -->
  <classifier>mule-plugin</classifier>
</dependency>
```

### [](#java-メソッドの呼び出し)Java メソッドの呼び出し

DataWeave を使用して静的メソッドを呼び出すことができます。通常のメソッドの場合は Java Module を使用できます。このモジュールは操作と関数の両方を公開して Java メソッドを呼び出します。

#### [](#静的メソッド)静的メソッド

以下の例では、Java の Locale ​`getDefault`​ 静的メソッドを Mule 3 と Mule 4 で使用しています。

Mule 3 の例

```xml
<validation:is-time time="#[payload]" pattern="h:mm a" locale="#[java.util.Locale.getDefault().getLanguage()]"/>
```

Mule 4 の例

```xml
<validation:is-time time="#[payload]" pattern="h:mm a" locale="#[java!java::util::Locale::getDefault().getLanguage()]"/>
```

DataWeave では、Java 静的メソッドが検索対象であることを示す ​`java!`​ プレフィックスと、完全修飾された (​`.`​ ではなく、​`::`​ 区切りの) クラス名が必要です。

#### [](#インスタンスメソッド)インスタンスメソッド

以下の例は、Mule 3 と Mule 4 での Java の String ​`equalsIgnoreCase`​ メソッドの使用法を示しています。

Mule 3 の例

```xml
<choice>
  <when expression="#[payload.equalsIgnoreCase('error')]">
    <logger message="An error message has been received." level="ERROR"/>
  </when>
  <otherwise>
    <logger message="Message received: #[payload]" level="INFO"/>
  </otherwise>
</choice>
```

Mule 4 の例

```xml
<choice doc:name="Choice">
  <when expression="#[Java::invoke('java.lang.String', 'equalsIgnoreCase(String)', payload, {arg0: 'error'})]">
		<logger message="An error message has been received." level="ERROR"/>
	</when>
	<otherwise >
		<logger message="Message received: #[payload]" level="INFO"/>
	</otherwise>
</choice>
```

Java Module を使用するには、Studio のパレットを使用してアプリケーションに追加するか、​`pom.xml`​ ファイルで次の連動関係を追加します。

```xml
<dependency>
  <groupId>org.mule.modules</groupId>
  <artifactId>mule-java-module</artifactId>
  <version>1.0.0</version> <!-- or newer -->
  <classifier>mule-plugin</classifier>
</dependency>
```

### [](#対象の定義)対象の定義

`enricher`​ は削除されて、すべての操作でサポートされる対象変数に置き換わりました。以下の例は、Mule 3 と Mule 4 で操作の結果を変数に送信する方法を示しています。

Mule 3 の例

```xml
<enricher target="#[flowVars.response]">
    <http:request config-ref="HTTP_Request_Configuration" path="/get" method="GET"/>
</enricher>
```

Mule 4 の例

```xml
<http:request config-ref="HTTP_Request_Configuration" path="/get" method="GET" target="response"/>
```

- 詳細は、​[「対象変数を使用したデータのエンリッチ」](https://docs.mulesoft.com/jp/mule-runtime/4.3/target-variables)​を参照してください。

### [](#xpath-関数)XPath 関数

DataWeave では、​[セレクター](#dataweave-selectors.adoc)​を使用して XML コンテンツを照会できますが、XML Module を使用することもできます。このモジュールは操作と関数の両方を公開して XPath クエリを実行します。

以下の例は、Mule 3 と 4 で、変数から取得された特定の単語を含む行を取得する方法を示しています。

Mule 3 の例

```xml
<set‐variable variableName="word" value="handkerchief"/>
<expression‐transformer>
   xpath3('//LINE[contains(.,$word)]',payload,'NODESET')
</expression‐transformer>
```

Mule 4 の例

```xml
<set‐variable variableName="word" value="handkerchief"/>
<set-payload value="#[XmlModule::xpath('//LINE[contains(., \$word)]', payload, {'word': vars.word})]" />
```

XML Module を使用するには、Studio のパレットを使用してアプリケーションに追加するか、​`pom.xml`​ ファイルで次の連動関係を追加します。

```xml
<dependency>
  <groupId>org.mule.modules</groupId>
  <artifactId>mule-xml-module</artifactId>
  <version>1.1.0</version> <!-- or newer -->
  <classifier>mule-plugin</classifier>
</dependency>
```

### [](#ワイルドカード関数と正規表現関数)ワイルドカード関数と正規表現関数

DataWeave のマッチング関数 ​`match`​ と ​`matches`​ を代わりに使用できます (コア DataWeave 関数を参照してください)。次の例は、DataWeave で正規表現を使用して、​`wildcard`​ MEL 関数の使用を置き換える方法を示しています。

Mule 3 の例

```xml
<choice>
  <when expression="#[wildcard('Hello *')]">
    <set-payload value="Hello, how can I help?"/>
  </when>
  <otherwise>
    <set-payload value="Courtesy requires a greeting."/>
  </otherwise>
</choice>
```

Mule 4 の例

```xml
<choice doc:name="Choice">
  <when expression="#[payload matches /Hello\s[A-z]+/]">
    <set-payload value="Hello, how can I help?"/>
  </when>
  <otherwise >
    <set-payload value="Courtesy requires a greeting."/>
  </otherwise>
</choice>
```

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

[DataWeave 言語](https://docs.mulesoft.com/jp/mule-runtime/4.3/dataweave)

[Why DataWeave is the Main Expression Language in Mule 4 Beta (Mule 4 ベータ版で DataWeave が主要な式言語である理由)](https://blogs.mulesoft.com/dev/mule-dev/why-dataweave-main-expression-language-mule-4/)