<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MuleSoft | ビズドットオンライン</title>
	<atom:link href="https://it-biz.online/category/mulesoft/feed/" rel="self" type="application/rss+xml" />
	<link>https://it-biz.online</link>
	<description></description>
	<lastBuildDate>Mon, 03 Feb 2025 08:07:15 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://it-biz.online/wp-content/uploads/2019/10/cropped-4a332f05ade4ac7bb3c46c472cb5eac8-32x32.png</url>
	<title>MuleSoft | ビズドットオンライン</title>
	<link>https://it-biz.online</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>DataWeaveとは？１０分で速習する完全ガイド</title>
		<link>https://it-biz.online/mulesoft/dataweave-abc/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Tue, 21 Jan 2025 04:29:29 +0000</pubDate>
				<category><![CDATA[MuleSoft]]></category>
		<category><![CDATA[Dataweave]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=9594</guid>

					<description><![CDATA[DataWeave は、MuleSoft（参考 MuleSoftとは？）が提供するデータ変換とスクリプト言語です。Mule 4（Anypoint Platformを含む）環境では標準で組み込まれており、JSON、XML、 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><strong>DataWeave</strong> は、MuleSoft（<span class="badge">参考</span> <a href="https://it-biz.online/mulesoft/mulesoft-abc/">MuleSoftとは？</a>）が提供する<strong>データ変換</strong>と<strong>スクリプト言語</strong>です。Mule 4（Anypoint Platformを含む）環境では標準で組み込まれており、JSON、XML、CSV、Javaオブジェクト、さらには複数のフォーマットに対して柔軟かつ便利な変換機能を提供します。</p>



<p>MuleSoftでは、このDataWeaveをうまく活用することで様々な処理を実現することが可能になります。</p>



<p>とはいえ、<strong><span class="marker-under">Dataweaveを集中的に学ぶ機会も限られているのが現実</span></strong>。そこでこのページでは、Dataweaveとは何か？から始め、Dataweaveを利用した簡単なコーディング（少なくともコードを読むことができる）が可能になるようにDataweaveの構文ルールを１からわかりやすく解説します。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">DataWeaveの特徴</a></li><li><a href="#toc2" tabindex="0">DataWeaveの基本構文</a><ol><li><a href="#toc3" tabindex="0">DataWeaveスクリプトの基本構造</a></li><li><a href="#toc4" tabindex="0">Script Header の各種オプション</a></li><li><a href="#toc5" tabindex="0">コメント</a></li></ol></li><li><a href="#toc6" tabindex="0">データ型とリテラル</a><ol><li><a href="#toc7" tabindex="0">スカラー型</a></li><li><a href="#toc8" tabindex="0">配列 (Array)</a></li><li><a href="#toc9" tabindex="0">オブジェクト (Object)</a></li><li><a href="#toc10" tabindex="0">Date/Time型</a></li></ol></li><li><a href="#toc11" tabindex="0">変数と命名</a><ol><li><a href="#toc12" tabindex="0">変数宣言</a></li><li><a href="#toc13" tabindex="0">letブロック内での変数宣言</a></li></ol></li><li><a href="#toc14" tabindex="0">関数</a><ol><li><a href="#toc15" tabindex="0">関数の定義</a></li><li><a href="#toc16" tabindex="0">引数の型指定</a></li><li><a href="#toc17" tabindex="0">ローカル関数とグローバル関数</a></li></ol></li><li><a href="#toc18" tabindex="0">条件分岐とパターンマッチ</a><ol><li><a href="#toc19" tabindex="0">if ... else</a></li><li><a href="#toc20" tabindex="0">match演算子(パターンマッチ)</a></li></ol></li><li><a href="#toc21" tabindex="0">イテレーションと高階関数</a><ol><li><a href="#toc22" tabindex="0">map</a></li><li><a href="#toc23" tabindex="0">filter</a></li><li><a href="#toc24" tabindex="0">reduce</a></li><li><a href="#toc25" tabindex="0">その他の高階関数</a></li></ol></li><li><a href="#toc26" tabindex="0">主要な演算子・機能</a><ol><li><a href="#toc27" tabindex="0">オブジェクトのスプレッド・結合</a></li><li><a href="#toc28" tabindex="0">オブジェクトの破壊的パターン(Destructuring)</a></li><li><a href="#toc29" tabindex="0">when ... otherwiseによる条件生成</a></li></ol></li><li><a href="#toc30" tabindex="0">各種フォーマットの入出力</a><ol><li><a href="#toc31" tabindex="0">JSONの読み書き</a></li><li><a href="#toc32" tabindex="0">XMLの読み書き</a></li><li><a href="#toc33" tabindex="0">CSVの読み書き</a></li><li><a href="#toc34" tabindex="0">その他の形式</a></li></ol></li><li><a href="#toc35" tabindex="0">モジュールと拡張機能</a><ol><li><a href="#toc36" tabindex="0">モジュールのインポート</a></li><li><a href="#toc37" tabindex="0">関数のエイリアス</a></li><li><a href="#toc38" tabindex="0">有名な組み込みモジュール例</a></li></ol></li><li><a href="#toc39" tabindex="0">DataWeave 2.0でのよく使う式の実例</a><ol><li><a href="#toc40" tabindex="0">JSON -&gt; JSONの変換例</a></li><li><a href="#toc41" tabindex="0">JSON -&gt; CSVの変換例</a></li><li><a href="#toc42" tabindex="0">XML -&gt; JSONの変換例</a></li><li><a href="#toc43" tabindex="0">名前空間 (Namespace) の扱い (主にXML)</a></li><li><a href="#toc44" tabindex="0">変換フロー内でのattributesの利用</a></li><li><a href="#toc45" tabindex="0">スクリプトのモジュール化・再利用</a></li><li><a href="#toc46" tabindex="0">関数型プログラミングの活用</a></li><li><a href="#toc47" tabindex="0">ストリーミング</a></li></ol></li><li><a href="#toc48" tabindex="0">ベストプラクティス</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">DataWeaveの特徴</span></h2>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>まずは、簡単にDataWeaveの特徴をお示しします。</p>
</div></div>



<ol class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li class="is-style-bottom-margin-1em has-bottom-margin"><strong>宣言的（Declarative）なスタイル</strong><br>従来の命令型スタイル（if/for/whileなど逐次処理）とは異なり、「入力データをどのように出力データへマッピングするか」を宣言的に書くことで、表現力豊かなデータ変換を少ないコード量で実現します。</li>



<li class="is-style-bottom-margin-1em has-bottom-margin"><strong>各種データ形式に対応</strong><br>JSON、XML、CSV、Javaオブジェクト、YAMLなど、多様な形式との相互変換に対応します。Mule Flow内では<code><span class="blue">transform</span></code>コンポーネントでDataWeaveスクリプトを記述し、入力から出力への変換を定義します。</li>



<li class="is-style-bottom-margin-1em has-bottom-margin"><strong>関数型言語としての特性</strong><br>DataWeaveは変換を行うために<strong>関数型言語</strong>の要素を取り入れており、副作用が少なくテスト可能で読みやすいコードを書くのに適しています。</li>



<li><strong>Mule 4以降でメイン言語として利用</strong><br>Mule 3まではMule Expression Language (MEL)とDataWeave 1.0の2本立てでしたが、Mule 4以降はDataWeave 2.0がメイン。大幅に強化された機能が用意されています。</li>
</ol>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">Transformコンポーネントとは・・・？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>MuleSoftのフローで<strong>データ変換を実行するためのコンポーネント</strong>です。主に以下の役割を果たします。</p>



<ol class="wp-block-list">
<li><strong>データフォーマットの変換</strong><br>JSON、XML、CSV、Javaオブジェクトなど、異なる形式間の変換を行います。</li>



<li><strong>DataWeaveスクリプトの実行</strong><br>Transformコンポーネント内でDataWeaveを使い、データを柔軟に加工・整形します。</li>



<li><strong>入力と出力のマッピング</strong><br>フロー内のペイロード（<code>payload</code>）や属性（<code>attributes</code>）を操作し、次の処理へ渡すデータを定義します。</li>
</ol>
</div></dd></dl></div>



<h2 class="wp-block-heading"><span id="toc2">DataWeaveの基本構文</span></h2>



<h3 class="wp-block-heading"><span id="toc3">DataWeaveスクリプトの基本構造</span></h3>



<p>DataWeaveスクリプトは大きく以下の3つのセクションで構成されます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
payload
</pre>



<ol class="wp-block-list">
<li><strong>宣言セクション(Directive)</strong><br><code><span class="blue">%%dw 2.0</span></code>のようにバージョンを示します。また必要に応じて<code><span class="blue">import</span></code>等（※後述）を記述します。</li>



<li><strong>出力形式(Output)の指定</strong><br><code><span class="blue">output application/json</span></code>など（※後述）で、変換結果のメディアタイプを指定します。</li>



<li><strong>変換式(Body)本体</strong><br><code><span class="blue">---</span></code>の後に<strong>変換処理</strong>を記述します。ここに式（<strong>式言語</strong>）を書いていきます。</li>
</ol>



<p class="has-text-align-center"><span class="badge-blue">サンプルコード</span>　<strong>最もシンプルな例</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
payload
</pre>



<p>上記の場合、入力（<code>payload</code>）がそのままJSONとして出力されます。</p>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-hint block-box">
<p class="has-text-align-center"><strong>Dataweaveのバージョンについて</strong></p>



<p><strong>DataWeave 1.0</strong>:</p>



<ul class="wp-block-list">
<li>Mule 3で導入されたバージョン。</li>



<li><strong>構文が異なる</strong>: 1.0では少し冗長で、2.0ほどの柔軟性がありません。</li>



<li><code>output application/json ---</code> などのセクション構成は似ていますが、詳細な書き方に差異があります。</li>
</ul>



<p><strong>DataWeave 2.0</strong>:</p>



<ul class="wp-block-list">
<li>Mule 4で採用。<strong><span class="marker-under">現在の主要バージョン。</span></strong></li>



<li><strong>機能強化</strong>: より宣言的なスタイル、追加の高階関数（<code>flatMap</code>や<code>reduce</code>など）、モジュールの柔軟な利用。</li>



<li><strong>JSON、XML、CSV、Javaオブジェクトなどのフォーマット間変換が簡易化</strong>。</li>
</ul>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>Mule 4を使用する場合、<strong>DataWeave 2.0</strong>がデフォルトで使われます。1.0はMule 3専用のため、2.0を学習・利用するのが推奨されます。</p>
</div></div>
</div>



<h3 class="wp-block-heading"><span id="toc4">Script Header の各種オプション</span></h3>



<ul class="wp-block-list">
<li class="is-style-bottom-margin-1em has-bottom-margin"><code><span class="blue">output application/json skipNullOn="everywhere"</span></code><br>Nullを出力から除外するといった細かいオプション指定が可能です。</li>



<li><code><span class="blue">output application/xml indent="true"</span></code><br>XML出力を整形するなど、各種メディアタイプに応じたオプション設定ができます。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc5">コメント</span></h3>



<ul class="wp-block-list">
<li>行コメント： <code>// ここはコメント</code></li>



<li>ブロックコメント： <code>/* ここはブロックコメント */</code></li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
/* 
  ブロックコメント: 
  以下では、サンプルデータの操作と
  コメントの使い方を示します。
*/

var sampleData = [1, 2, 3, 4, 5] // 行コメント: 配列データを定義

{
    // 配列の要素を2倍にする
    doubledValues: sampleData map (item) -> item * 2,
    
    /* 条件に基づくフィルタリング:
       2倍した値が6以上の場合のみ取得 */
    filteredValues: sampleData
        map (item) -> item * 2 // 要素を2倍
        filter (item) -> item >= 6, // フィルタリング
    
    // 結果の概要
    summary: {
        originalSize: sizeOf(sampleData), // 元のデータの要素数
        filteredSize: sizeOf(sampleData filter (item) -> item * 2 >= 6) // フィルタリング後の要素数
    }
}
</pre>



<h2 class="wp-block-heading"><span id="toc6">データ型とリテラル</span></h2>



<p>DataWeaveで扱える代表的な型・リテラルは以下の通りです。</p>



<h3 class="wp-block-heading"><span id="toc7">スカラー型</span></h3>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">スカラー型とは？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p><strong>単一の値を表すデータ型</strong>のこと。複雑な構造を持つ配列やオブジェクトとは異なり、<strong>最小単位のデータ型</strong>と考えればOK。</p>
</div></dd></dl></div>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
{
    stringExample: "Hello, DataWeave", // String
    numberExample: 123,                // Number
    booleanExample: true,              // Boolean
    nullExample: null,                 // Null
    dateExample: |2023-01-01|          // Date
}
</pre>



<figure class="wp-block-table"><div class="scrollable-table stfc-sticky"><table class="has-fixed-layout"><thead><tr><th>スカラー型</th><th>説明</th><th>サンプル</th></tr></thead><tbody><tr><td><strong>String</strong></td><td>文字列型</td><td><code>"Hello"</code></td></tr><tr><td><strong>Number</strong></td><td>数値型（整数・小数）</td><td><code>42</code>, <code>3.14</code></td></tr><tr><td><strong>Boolean</strong></td><td>真偽値型（論理型）</td><td><code>true</code>, <code>false</code></td></tr><tr><td><strong>Null</strong></td><td>値が存在しないことを示す型</td><td><code>null</code></td></tr><tr><td><strong>Date</strong></td><td>日付型（日時を含む場合もあり）</td><td>2023-01-01</td></tr></tbody></table></div></figure>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-check block-box">
<p><span class="badge-green">ポイント</span>　<strong>DataWeaveの型システムは動的型付け</strong></p>



<p>DataWeaveは、データ型を<strong>明示的に宣言する必要がない</strong>動的型付けの仕組みを持っています。つまり、変数やデータの型は、DataWeaveが自動的に解釈して適切な操作を適用します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
{
    inferredString: "Hello",    // Stringとして認識
    inferredNumber: 123,        // Numberとして認識
    inferredBoolean: true,      // Booleanとして認識
    inferredNull: null          // Nullとして認識
}
</pre>



<p><span class="badge-green">ポイント</span>　<strong>必要に応じて明示的に型を指定</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
{
    explicitNumber: "123" as Number,  // StringをNumberに変換
    explicitString: 456 as String     // NumberをStringに変換
}
</pre>



<p><span class="blue"><code>as</code> </span>演算子で型変換を行うことも可能です。DataWeaveでは型変換が明示的にも行えるため、必要に応じて適切なデータ型を指定することができます。</p>
</div>



<h3 class="wp-block-heading"><span id="toc8">配列 (Array)</span></h3>



<ul class="wp-block-list">
<li>配列は<code><span class="blue">[ ]</span></code>で表します。<code>["apple", "banana", "orange"]</code></li>



<li>ネストする場合：<code>[1, 2, ["nested", "array"], 4]</code></li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
{
    // 元の配列
    originalArray: [1, 2, 3, 4, 5], 
    // 結果: [1, 2, 3, 4, 5]

    // 配列の各要素を2倍に変換
    doubledValues: [1, 2, 3, 4, 5] map $ * 2, 
    // 結果: [2, 4, 6, 8, 10]

    // 偶数のみを抽出
    evenNumbers: [1, 2, 3, 4, 5] filter $ mod 2 == 0, 
    // 結果: [2, 4]

    // 最初の3つの要素を取得
    firstThree: [1, 2, 3, 4, 5][0 to 2], 
    // 結果: [1, 2, 3]

    // 配列内で各要素に対してインデックスも使用して新しい形式に変換
    indexedValues: [10, 20, 30] map (value, index) -> {
        index: index,
        value: value
    }
    // 結果: [{"index": 0, "value": 10}, {"index": 1, "value": 20}, {"index": 2, "value": 30}]
}
</pre>



<h3 class="wp-block-heading"><span id="toc9">オブジェクト (Object)</span></h3>



<p>DataWeaveのオブジェクトは、<strong><span class="marker-under">キーと値のペアで構成されるデータ構造</span></strong>です。本質的には、JSONのオブジェクトと同じ概念で、データを<strong>構造化して整理</strong>するために使われます。</p>



<ul class="wp-block-list">
<li>オブジェクトは <code><span class="blue">{ }</span></code> で表し、キーと値をペアで記述。</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">{
    "name": "Taro",
    "age": 20
}
</pre>



<p>キーに変数などを利用したい場合はダブルクォートやバッククォートを使わずに直接書くこともできます(ただし特殊文字を含む場合はクォート必須)。</p>



<p>オブジェクトの値にはスカラー型、配列、他のオブジェクトをネスト可能です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">{
    user: { name: "Taro", age: 25 },
    roles: ["admin", "editor"]
}
</pre>



<h3 class="wp-block-heading"><span id="toc10">Date/Time型</span></h3>



<ul class="wp-block-list">
<li>DataWeaveには日時型リテラルがあります。
<ul class="wp-block-list">
<li>例： <code>|2023-01-01|</code> はDate、 <code>|2023-01-01T12:34:56|</code>はDateTimeなど</li>
</ul>
</li>



<li>内部的には<code>java.time</code>のAPIを活用して処理されます。</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
{
    // 現在の日付と時刻
    currentDateTime: now(),

    // 現在の日付のみ
    currentDate: now() as Date,

    // 現在時刻をフォーマット (例: yyyy/MM/dd HH:mm:ss)
    formattedDateTime: now() as String {format: "yyyy/MM/dd HH:mm:ss"},

    // 日付文字列をDate型に変換
    stringToDate: "2025-01-21" as Date,

    // Date型に日数を加算
    datePlus5Days: |2025-01-21| + |P5D|, // 5日を加算 (P5Dは期間のISO 8601表記)

    // DateTime型の差分計算
    daysBetween: daysBetween(|2025-01-21|, |2025-01-26|)
}
</pre>



<h2 class="wp-block-heading"><span id="toc11">変数と命名</span></h2>



<h3 class="wp-block-heading"><span id="toc12">変数宣言</span></h3>



<p>DataWeaveでは、<code><span class="blue">var</span></code>キーワードを使用して変数を宣言し、後で使用することができます。スクリプトのHeaderか、Bodyの任意の位置で宣言できますが、スコープに注意しましょう。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
var greeting = "Hello"
var year = 2025
{
    message: greeting ++ " DataWeave!",
    currentYear: year
}

// ++ は文字列の連結演算子 //</pre>



<h3 class="wp-block-heading"><span id="toc13">letブロック内での変数宣言</span></h3>



<p>スクリプトの中で部分的な計算に利用する変数を宣言するときには<code>let</code>ブロックを使います。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
{
    result: do {
        var x = 10
        var y = 20
        ---
        x + y
    }
}
</pre>



<p><code><span class="blue">do { ... }</span></code>ブロック（旧称<code>do</code>ブロック）内で<code>var</code>を使って変数を定義し、ブロックの最後の式を返り値として利用できます。</p>



<h2 class="wp-block-heading"><span id="toc14">関数</span></h2>



<h3 class="wp-block-heading"><span id="toc15">関数の定義</span></h3>



<p>DataWeaveでは<code><span class="blue">fun</span></code>キーワードを使用して関数を定義できます。関数は基本的に<strong>不変（Immutable）</strong>な引数をとり、副作用がない形式で記述が可能です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">fun 関数名 (引数1: 型, 引数2: 型 = デフォルト値, ...) : 戻り値の型 = 式
</pre>



<ol class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li><strong><code>fun</code></strong>: 関数を定義するキーワード。</li>



<li><strong>関数名</strong>: 任意の識別子（アルファベット、数字、アンダースコアで構成）。</li>



<li><strong>引数</strong>:
<ul class="wp-block-list">
<li>引数名と型を指定（例: <code>x: Number</code>）。</li>



<li>必要に応じてデフォルト値を設定可能（例: <code>y: Number = 10</code>）。</li>
</ul>
</li>



<li><strong>戻り値の型</strong>（省略可能）:
<ul class="wp-block-list">
<li>関数が返すデータの型を指定。</li>
</ul>
</li>



<li><strong>式</strong>:
<ul class="wp-block-list">
<li>関数のロジックを記述。最後の評価結果が返り値となる。</li>
</ul>
</li>
</ol>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
fun add(a, b) = a + b
fun greet(name) = "Hello " ++ name

{
    sum: add(5, 7),
    greeting: greet("DataWeave")
}
</pre>



<p><strong>ポイント</strong>: 関数は式として利用でき、変数へ格納したり、ほかの関数に渡したりできます。</p>



<h3 class="wp-block-heading"><span id="toc16">引数の型指定</span></h3>



<p>DataWeave 2.0 では任意で引数や戻り値に型を指定できます。指定しない場合は動的に解釈されます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">fun add(a: Number, b: Number): Number = a + b
</pre>



<h3 class="wp-block-heading"><span id="toc17">ローカル関数とグローバル関数</span></h3>



<ul class="wp-block-list">
<li>スクリプトヘッダに宣言すると<strong>グローバル関数</strong>として使用できます。</li>



<li><code><span class="blue">do { }</span></code>ブロック内で宣言すれば、スコープ内限定のローカル関数として使用可能です。</li>
</ul>



<h2 class="wp-block-heading"><span id="toc18">条件分岐とパターンマッチ</span></h2>



<h3 class="wp-block-heading"><span id="toc19">if ... else</span></h3>



<p>DataWeaveでも一般的な条件分岐として<code><span class="blue">if ... else</span></code>が使えます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">if 条件式 
    then 真の場合の値 
    else 偽の場合の値
</pre>



<ol class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li><strong><code>if</code></strong>: 条件式の開始キーワード。</li>



<li><strong>条件式</strong>: <code>true</code> または <code>false</code> を返す式を記述。例: <code>x &gt; 10</code>。</li>



<li><strong><code>then</code></strong>: 条件が<code>true</code>のときに評価される値。</li>



<li><strong><code>else</code></strong>: 条件が<code>false</code>のときに評価される値。</li>
</ol>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
fun checkNumber(n) =
    if (n > 0) "positive"
    else if (n &lt; 0) "negative"
    else "zero"

{
    result1: checkNumber(10),
    result2: checkNumber(-5),
    result3: checkNumber(0)
}
</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
{
    ageCategory: 
        if payload.age >= 18 
            then "Adult"
            else "Child"
}
// 入力例: {"age": 20} -> 出力: {"ageCategory": "Adult"}
// 入力例: {"age": 15} -> 出力: {"ageCategory": "Child"}
</pre>



<h3 class="wp-block-heading"><span id="toc20">match演算子(パターンマッチ)</span></h3>



<p>DataWeaveにはパターンマッチングを使う機能があります。これを使うと、値や型に応じた複雑な分岐をシンプルに書くことができます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">value match {
    case 条件1 -> 処理1,
    case 条件2 -> 処理2,
    ...
    else -> デフォルト処理
}
</pre>



<ol class="wp-block-list is-style-numeric-list-enclosed has-list-style">
<li><strong><code>value</code></strong>: マッチ対象の値。</li>



<li><strong><code>case 条件 -&gt; 処理</code></strong>: 条件に一致した場合の処理。</li>



<li><strong><code>else -&gt; 処理</code></strong>: どの条件にも一致しない場合の処理（オプション）。</li>
</ol>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
fun matchType(value) = 
    value match {
        case is Number -> "これは数字"
        case is String -> "これは文字列"
        case is Array -> "これは配列"
        else -> "それ以外"
    }

{
    testNumber: matchType(42),
    testString: matchType("Hello"),
    testArray: matchType([1,2,3]),
    testOther: matchType({ key: "value" })
}
</pre>



<ul class="wp-block-list">
<li><code>case is Number</code>のように型判定が可能です。</li>



<li>値そのものをパターンとして指定することもできます。</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
fun matchValue(value) =
    value match {
        case 0 -> "ゼロです",
        case 1 -> "ワンです",
        case -1 -> "マイナスワンです",
        else -> "その他の値です"
    }

{
    result1: matchValue(0),
    result2: matchValue(1),
    result3: matchValue(-1),
    result4: matchValue(5)
}
</pre>



<h2 class="wp-block-heading"><span id="toc21">イテレーションと高階関数</span></h2>



<p>高階関数は「<strong>関数を操作する関数</strong>」であり、配列やオブジェクトのようなデータ構造を柔軟に操作するための重要なツールです。DataWeaveのデータ変換でよく利用されるので、特に<code><span class="blue">map</span></code>や<code><span class="blue">filter</span></code>のような典型例を理解しておくと便利です！</p>



<h3 class="wp-block-heading"><span id="toc22">map</span></h3>



<p><strong>配列</strong>あるいは<strong>オブジェクト</strong>に対して要素ごとに処理を行い、変換した結果を返すのが<code>map</code>です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">array map (item, index) -> 式

/*
[1, 2, 3] map (item, index) -> item * index
// 結果: [0, 2, 6]
*/</pre>



<p><strong>配列の例</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
["apple", "banana", "orange"]
    // 各要素に対して処理
    map (item, index) -> {
        fruit: item,
        index: index
    }
</pre>



<p><code>map (item, index) -&gt; ...</code> の形で、要素とインデックスを引数として受け取れます。</p>



<p><strong>オブジェクトの例</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
{
    a: 1,
    b: 2,
    c: 3
}
    mapObject (value, key) -> (key ++ "_value") : value * 2
</pre>



<p><code>mapObject (value, key) -&gt; ...</code> を使うと、オブジェクトを別の形に変換できます。上記例ではキーを変えて値を倍にする処理をしています。</p>



<h3 class="wp-block-heading"><span id="toc23">filter</span></h3>



<p>配列やオブジェクトの要素を条件に基づいて絞り込み（フィルタリング）します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">array filter (item, index) -> 条件式
</pre>



<ul class="wp-block-list">
<li><strong><code>array</code></strong>: 操作対象の配列。</li>



<li><strong><code>item</code></strong>: 現在の要素。</li>



<li><strong><code>index</code></strong>: 現在の要素のインデックス（省略可能）。</li>



<li><strong><code>条件式</code></strong>: 各要素を絞り込むための条件（<strong><span class="marker-under"><code>true</code>を返す要素が結果に含まれる</span></strong>）。</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
[1, 2, 3, 4, 5]
    filter (item) -> item % 2 == 1

// 上記は奇数だけをフィルタリングします。//</pre>



<h3 class="wp-block-heading"><span id="toc24">reduce</span></h3>



<p>配列の要素を1つに集約（畳み込み）するときに用います。初期値と畳み込みロジックを指定します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
[1, 2, 3, 4, 5]
    reduce (item, accumulator = 0) -> accumulator + item

// 例では配列の合計値を求めています。//</pre>



<h3 class="wp-block-heading"><span id="toc25">その他の高階関数</span></h3>



<ul class="wp-block-list">
<li><code>pluck</code>： オブジェクトからキー・値・インデックス（またはキー）を取り出して配列に変換</li>



<li><code>flatMap</code>： map後の配列をフラットに結合</li>



<li><code>distinctBy</code>： ユニークな要素抽出</li>
</ul>



<p>など多数の高階関数が用意されています。</p>



<h2 class="wp-block-heading"><span id="toc26">主要な演算子・機能</span></h2>



<h3 class="wp-block-heading"><span id="toc27">オブジェクトのスプレッド・結合</span></h3>



<p>DataWeaveではオブジェクトのマージや配列の連結を簡単に行えます。</p>



<p><strong>オブジェクトの結合</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
var person1 = { name: "Taro", age: 20 }
var person2 = { age: 25, city: "Tokyo" }
---
person1 ++ person2


/*
{
  "name": "Taro",
  "age": 25,
  "city": "Tokyo"
}
*/</pre>



<p>同じキーがある場合は右側が優先されます（例：ageが25になる）。</p>



<p><strong>配列の結合</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
[1, 2, 3] ++ [4, 5, 6]

// 配列の場合は単純に連結します: [1,2,3,4,5,6] //</pre>



<h3 class="wp-block-heading"><span id="toc28">オブジェクトの破壊的パターン(Destructuring)</span></h3>



<p>オブジェクトのキーを展開してローカル変数として取り出すことができます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
fun getPersonInfo(person) = 
    // { name, age, city = "Unknown" } でpersonのキーを抜き出す
    person match {
        case { name, age, city = "Unknown" } -> 
            "Name: " ++ name ++ ", Age: " ++ age ++ ", City: " ++ city
        else -> "No match"
    }

getPersonInfo({ name: "Hanako", age: 23 })
</pre>



<ul class="wp-block-list">
<li><code>city = "Unknown"</code> は、キー<code>city</code>が存在しない場合にデフォルト値として<code>"Unknown"</code>を割り当てる書き方です。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc29">when ... otherwiseによる条件生成</span></h3>



<p>オブジェクトのフィールドを生成するときに条件分岐を使う場合、<code>when ... otherwise</code>を活用するとスッキリ書けます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
{
    discount: (payload.price > 1000) when true else 0,
    category: "premium" when (payload.price > 500) else "standard"
}
</pre>



<h2 class="wp-block-heading"><span id="toc30">各種フォーマットの入出力</span></h2>



<h3 class="wp-block-heading"><span id="toc31">JSONの読み書き</span></h3>



<ul class="wp-block-list">
<li><strong>読み取り</strong>: <code>input application/json</code> でペイロードをJSONとして解釈。</li>



<li><strong>書き出し</strong>: <code>output application/json</code> で結果をJSONとして出力。</li>
</ul>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
payload // JSON形式の入力をそのまま出力
</pre>



<h3 class="wp-block-heading"><span id="toc32">XMLの読み書き</span></h3>



<ul class="wp-block-list">
<li><strong>読み取り</strong>: <code>input application/xml</code></li>



<li><strong>書き出し</strong>: <code>output application/xml</code></li>
</ul>



<p><strong>XML入力例</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;book>
  &lt;title>DataWeave in Action&lt;/title>
  &lt;author>John Doe&lt;/author>
&lt;/book>
</pre>



<p>DataWeaveで扱うとオブジェクトに変換されます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">{
  "book": {
    "title": "DataWeave in Action",
    "author": "John Doe"
  }
}
</pre>



<p><strong>XML出力例</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/xml
---
{
    book: {
        title: "DataWeave in Action",
        author: "John Doe"
    }
}
</pre>



<p><code>book</code>がルート要素となります。</p>



<h3 class="wp-block-heading"><span id="toc33">CSVの読み書き</span></h3>



<ul class="wp-block-list">
<li><strong>読み取り</strong>: <code>input text/csv separator=","</code></li>



<li><strong>書き出し</strong>: <code>output text/csv</code></li>
</ul>



<p><strong>CSV入力例</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">name,age,city
Taro,20,Tokyo
Hanako,25,Osaka
</pre>



<p>DataWeaveで扱うと<strong>配列のオブジェクト</strong>として解釈されます:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">[
  { "name": "Taro", "age": "20", "city": "Tokyo" },
  { "name": "Hanako", "age": "25", "city": "Osaka" }
]
</pre>



<p><strong>CSV出力例</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output text/csv
---
[
    { name: "Taro", age: 20, city: "Tokyo" },
    { name: "Hanako", age: 25, city: "Osaka" }
]
</pre>



<p>これが下記のようなCSVになる：</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">name,age,city
Taro,20,Tokyo
Hanako,25,Osaka
</pre>



<h3 class="wp-block-heading"><span id="toc34">その他の形式</span></h3>



<ul class="wp-block-list">
<li><strong>YAML</strong> なども同様に扱えます。( <code>input application/yaml</code>, <code>output application/yaml</code> )</li>



<li><strong>Java オブジェクト</strong> (上級者向け): Mule Flows でJavaコンポーネントなどを使う場合に、DataWeaveでJavaオブジェクトに直接アクセスすることもできます。</li>
</ul>



<h2 class="wp-block-heading"><span id="toc35">モジュールと拡張機能</span></h2>



<h3 class="wp-block-heading"><span id="toc36">モジュールのインポート</span></h3>



<p>DataWeave 2.0 では <code>import</code> 構文を使用して、外部のモジュールやユーザー定義モジュールを読み込めます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
import myModule from modules::myModule
output application/json
---
myModule.someFunction(payload)
</pre>



<ul class="wp-block-list">
<li>Muleプロジェクト内で<code>src/main/resources/modules/myModule.dwl</code>のようなパスにモジュールを定義しておけばインポートできます。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc37">関数のエイリアス</span></h3>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
import upperCase as uc from dw::core::Strings
output application/json
---
uc("hello world")
</pre>



<ul class="wp-block-list">
<li>公式モジュール<code>dw::core::Strings</code>などもよく活用します。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc38">有名な組み込みモジュール例</span></h3>



<ul class="wp-block-list">
<li><code>dw::core::Strings</code>：文字列操作（<code>upperCase</code>, <code>lowerCase</code>, <code>split</code>, etc.）</li>



<li><code>dw::core::Dates</code>：日時操作（<code>now()</code>, <code>toString()</code>, etc.）</li>



<li><code>dw::core::Numbers</code>：数値操作（<code>round</code>, <code>floor</code>, <code>ceiling</code>, etc.）</li>



<li><code>dw::core::Binaries</code>：バイナリデータ操作</li>



<li><code>dw::core::Crypto</code>：暗号化ハッシュや署名</li>
</ul>



<h2 class="wp-block-heading"><span id="toc39">DataWeave 2.0でのよく使う式の実例</span></h2>



<h3 class="wp-block-heading"><span id="toc40">JSON -&gt; JSONの変換例</span></h3>



<p><strong>入力(JSON)</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">{
  "users": [
    { "name": "Taro", "age": 20 },
    { "name": "Hanako", "age": 25 }
  ],
  "admin": "Yamada"
}
</pre>



<p><strong>出力(JSON)に変換する例</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
{
    administrator: payload.admin,
    userCount: sizeOf(payload.users),
    userNames: payload.users map (u) -> u.name
}
</pre>



<p><strong>結果:</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">{
    "administrator": "Yamada",
    "userCount": 2,
    "userNames": ["Taro", "Hanako"]
}
</pre>



<h3 class="wp-block-heading"><span id="toc41">JSON -&gt; CSVの変換例</span></h3>



<p><strong>入力(JSON)</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">[
    { "name": "Taro", "age": 20, "city": "Tokyo" },
    { "name": "Hanako", "age": 25, "city": "Osaka" }
]
</pre>



<p><strong>変換スクリプト</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output text/csv quoteValues=false
---
payload
</pre>



<p><strong>結果(CSV):</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">name,age,city
Taro,20,Tokyo
Hanako,25,Osaka
</pre>



<h3 class="wp-block-heading"><span id="toc42">XML -&gt; JSONの変換例</span></h3>



<p><strong>入力(XML)</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;departments>
  &lt;department>
    &lt;id>1&lt;/id>
    &lt;name>Sales&lt;/name>
  &lt;/department>
  &lt;department>
    &lt;id>2&lt;/id>
    &lt;name>Engineering&lt;/name>
  &lt;/department>
&lt;/departments>
</pre>



<p><strong>DataWeave</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
payload.departments.department map (dept) -> {
    departmentId: dept.id,
    departmentName: dept.name
}
</pre>



<p><strong>結果(JSON):</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">[
  {
    "departmentId": "1",
    "departmentName": "Sales"
  },
  {
    "departmentId": "2",
    "departmentName": "Engineering"
  }
]
</pre>



<h3 class="wp-block-heading"><span id="toc43">名前空間 (Namespace) の扱い (主にXML)</span></h3>



<p>XMLで名前空間がある場合、DataWeaveではキーに <code>ns0::element</code> の形式を用います。必要に応じてHeaderで<code>xmlns</code>を定義できます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
ns ns0 urn:example
---
payload.ns0::Root.ns0::Child
</pre>



<h3 class="wp-block-heading"><span id="toc44">変換フロー内でのattributesの利用</span></h3>



<p>MuleのFlowでファイルを読み込んだ場合など、メッセージのメタデータは<code>attributes</code>に格納されます。DataWeaveスクリプト内では<code>attributes</code>にアクセスしてヘッダ情報やファイル名などを参照できます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">%dw 2.0
output application/json
---
{
    fileName: attributes.fileName,
    fileSize: attributes.fileSize,
    content: payload
}
</pre>



<h3 class="wp-block-heading"><span id="toc45">スクリプトのモジュール化・再利用</span></h3>



<p>大規模プロジェクトでは、複数のDataWeaveスクリプトを<strong>モジュール化</strong>して整理すると管理が楽になります。</p>



<ul class="wp-block-list">
<li><code>myModule.dwl</code> を作り、共通の関数を定義</li>



<li>他のDataWeaveスクリプトで <code>import</code> して利用</li>
</ul>



<h3 class="wp-block-heading"><span id="toc46">関数型プログラミングの活用</span></h3>



<p>DataWeaveは変数の再代入ができないため、<strong>副作用が少ない</strong>関数型スタイルでコードを整理できます。</p>



<ul class="wp-block-list">
<li>無名関数を多用</li>



<li>変数に依存せず引数→戻り値のみでロジックを記述</li>
</ul>



<h3 class="wp-block-heading"><span id="toc47">ストリーミング</span></h3>



<p>大容量データを扱う場合、DataWeaveは<strong>ストリーミングモード</strong>でデータを逐次処理できます。<code>&lt;all&gt;</code>に対応するような設定をすると、全件読み込まずに処理するなどの最適化が可能です（ただし処理内容によってはバッファリングが入るので要注意）。</p>



<h2 class="wp-block-heading"><span id="toc48">ベストプラクティス</span></h2>



<ol class="wp-block-list">
<li><strong>マッピングの見やすさを優先</strong><br>変換ロジックが可読性を保つように、<code>mapObject</code> などを適切に使い、フラットに書きすぎない。</li>



<li><strong>関数の分割・再利用</strong><br>1つの巨大スクリプトにまとめるのではなく、意味ごとに関数を分割したり、別ファイルに切り出す。</li>



<li><strong>Null処理を明示的に</strong><br>Nullを許容するか、<code>default</code>値を設定するかを早期に決める。<code>skipNullOn="everywhere"</code> などのオプションも活用。</li>



<li><strong>型を意識する</strong><br>特にCSVやXMLなどの入出力時は文字列になりやすいので、必要なら<code>toNumber()</code>等で型変換する。
<ul class="wp-block-list">
<li>例: <code>payload.age as Number</code></li>
</ul>
</li>



<li><strong>サイズの大きいデータはストリーミングやchunkを検討</strong><br>大量データを扱う場合、メモリやパフォーマンスに注意。DataWeaveのストリーミング機能を使い、可能な限り流し込み変換できるように工夫する。</li>



<li><strong>エラーハンドリングを考慮</strong><br>変換処理中に異常データが来る場合、例外ハンドリングや<code>try</code>モジュールを組み合わせる。</li>



<li><strong>テスト可能性</strong><br>MUnitなどのテスティングフレームワークを使ってDataWeaveスクリプトを単体テストする。関数型の構造を取るとテストしやすい。</li>
</ol>



<p>このガイドでは、DataWeaveを扱うための基本概念から、構文、主要な関数、高度なモジュール活用例、ベストプラクティスまで幅広く紹介しました。<strong>DataWeaveはMuleSoftの強力なデータ変換エンジン</strong>であり、宣言的なスタイルと豊富なビルトイン関数を活用することで、複雑なデータマッピングを簡潔に表現できます。</p>



<p>実際の現場で扱うデータフォーマットは多岐にわたり、要件も多様です。しかしDataWeaveの表現力と拡張性を駆使すれば、<strong>JSON, XML, CSV, YAML, Javaオブジェクトなどの複数フォーマット間の変換</strong>を効率よく行えます。</p>



<p>ぜひ今回のガイドを参考にしながら、ご自身のプロジェクトでDataWeaveを活用し、実践的なスクリプトを書いてみてください。「<strong>書いて試す</strong>」ことが習熟への近道です。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>MuleSoft（ミュールソフト）とは？エンジニア向けに３分でザックリ解説</title>
		<link>https://it-biz.online/mulesoft/mulesoft-abc/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Tue, 02 Jul 2024 06:58:08 +0000</pubDate>
				<category><![CDATA[MuleSoft]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=9340</guid>

					<description><![CDATA[MuleSoft（ミュールソフト）は、企業が異なるシステムやアプリケーションを統合するためのツール群とプラットフォームを提供する会社（現在はSalesforceの傘下）。主にAPI（アプリケーションプログラムインターフェ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><strong>MuleSoft（ミュールソフト）</strong>は、企業が異なるシステムやアプリケーションを統合するためのツール群とプラットフォームを提供する会社（現在はSalesforceの傘下）。主に<a href="https://it-biz.online/it-skills/web_api/">API（アプリケーションプログラムインターフェース）</a>管理と統合に特化しており、効率的なデータ連携とプロセスの自動化を実現するためのシステムを提供しています。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>実は厳密に言うとMuleSoftというのは会社名で、製品そのものを指す単語ではありません。（最初この辺が混乱する方もいると思うので補足。）</p>
</div></div>



<ul class="wp-block-list">
<li><strong>Mulesoft</strong>: 会社名。API管理とシステム統合に特化したツールとサービスを提供する主体。</li>



<li><strong>Anypoint Platform</strong>: Mulesoftが提供する主力製品。APIの設計、構築、管理、運用を行うための統合プラットフォームです。</li>
</ul>



<p>ここでは、最近よく耳にするMuleSoftについての基本知識を、<strong><span class="marker-under">どちらかというとエンジニア向け</span></strong>にザックリ説明しておきます。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">MuleSoftとは？</a></li><li><a href="#toc2" tabindex="0">Anypoint Platformとは？</a></li><li><a href="#toc3" tabindex="0">Anypoint Platformを使った開発から運用までの流れ</a><ol><li><a href="#toc4" tabindex="0">1. 設計</a></li><li><a href="#toc5" tabindex="0">2. 開発</a></li><li><a href="#toc6" tabindex="0">3. テスト</a></li><li><a href="#toc7" tabindex="0">4. デプロイ</a></li><li><a href="#toc8" tabindex="0">5. 運用と管理</a></li><li><a href="#toc9" tabindex="0">6. 共有と再利用</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">MuleSoftとは？</span></h2>



<p>MuleSoftは異なるシステムやアプリケーションをつなげるための<strong>ツールを提供する会社</strong>です。</p>



<p>その主力製品が<strong>Anypoint Platform</strong>。Anypoint Platformは企業がシステムを統合するためのAPIを管理するための製品で、この製品を利用することで様々なAPI連携で１つに繋ぎ、複雑な社内システムを一元的に管理していきましょう！というのがざっくりとした製品イメージ。</p>



<figure class="wp-block-image aligncenter size-large"><img fetchpriority="high" decoding="async" width="800" height="583" src="https://it-biz.online/wp-content/uploads/2024/07/image-2-800x583.png" alt="Anypoint platform" class="wp-image-9343" srcset="https://it-biz.online/wp-content/uploads/2024/07/image-2-800x583.png 800w, https://it-biz.online/wp-content/uploads/2024/07/image-2-500x365.png 500w, https://it-biz.online/wp-content/uploads/2024/07/image-2-300x219.png 300w, https://it-biz.online/wp-content/uploads/2024/07/image-2-768x560.png 768w, https://it-biz.online/wp-content/uploads/2024/07/image-2.png 931w" sizes="(max-width: 800px) 100vw, 800px" /><figcaption class="wp-element-caption">図1：Anypoint platformの概念図</figcaption></figure>



<p class="has-text-align-center"><span class="badge-green">ポイント</span>　<strong>MuleSoftの概要</strong></p>



<ul class="wp-block-list">
<li><strong>会社名</strong>: MuleSoftはシステム統合とAPI管理に特化したツールを提供する会社。</li>



<li><strong>現在の立ち位置</strong>: 2018年にSalesforceに買収されたものの、MuleSoftの製品は引き続き同じように提供されている。</li>
</ul>



<h2 class="wp-block-heading"><span id="toc2">Anypoint Platformとは？</span></h2>



<p><strong>Anypoint Platform</strong>は、簡単に説明するとインターネットを使ってアクセスできるクラウドサービスです。</p>



<p>Anypoint Platformには、<strong><span class="marker-under">API</span></strong>の設計・開発、また管理するためのツールも含まれており、このプラットフォーム１つでAPIの開発～管理・運用までが一気通貫で可能になります。各企業や組織は自分たちのAPIを簡単に管理できるようになるため、必要なデータを効率的にやり取りすることができるようになります。例えば、顧客管理システムと在庫管理システムをAnypoint Platformを利用して連携させる、、など。</p>



<figure class="wp-block-image aligncenter size-large"><img fetchpriority="high" decoding="async" width="800" height="583" src="https://it-biz.online/wp-content/uploads/2024/07/image-2-800x583.png" alt="Anypoint platform" class="wp-image-9343" srcset="https://it-biz.online/wp-content/uploads/2024/07/image-2-800x583.png 800w, https://it-biz.online/wp-content/uploads/2024/07/image-2-500x365.png 500w, https://it-biz.online/wp-content/uploads/2024/07/image-2-300x219.png 300w, https://it-biz.online/wp-content/uploads/2024/07/image-2-768x560.png 768w, https://it-biz.online/wp-content/uploads/2024/07/image-2.png 931w" sizes="(max-width: 800px) 100vw, 800px" /><figcaption class="wp-element-caption">（再掲）図1：Anypoint platformの概念図</figcaption></figure>



<p>上記はざっくりとした概念図ですが、社内に複数存在するシステムをAPIを利用して「繋げる」イメージ。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>すべての連携をAnypoint Platform上で実装することで、例えばシステムAとシステムB、システムBとシステムCの<strong>個別</strong>のIF（インターフェース）を定義する必要がなくなる、といった利点が生まれます。</p>
</div></div>



<p>Anypoint Platformには以下のようなコンポーネントが含まれており、これらを目的に応じて使い分けていきます。ここではあえて詳細を１個１個説明するのは避けますが、一言で言えば「<strong><span class="marker-under">APIを開発・管理するためのすべてのツール</span></strong>」がAnypoint Platform上に存在していることを覚えておいてください。</p>



<figure class="wp-block-table"><div class="scrollable-table stfc-sticky"><table><thead><tr><th>コンポーネント名</th><th>概要</th></tr></thead><tbody><tr><td><a href="https://it-biz.online/mulesoft/design-center/">Anypoint Design Center</a></td><td>APIの設計とプロトタイピングを行うツール。APIを視覚的に設計し、どのようにデータをやり取りするかを設計するツール。</td></tr><tr><td>Anypoint Exchange</td><td>再利用可能なアセットのリポジトリ。API、コネクタ、テンプレートなどを共有し、他のプロジェクトで再利用できるようにするツール。</td></tr><tr><td>Anypoint Studio</td><td>統合フローを設計するための<a href="https://it-biz.online/it-skills/ide/">統合開発環境（IDE）</a>。プログラムを視覚的に作成し、システム間のデータ連携の開発を行うためのツール。</td></tr><tr><td>Anypoint Management Center</td><td>APIと統合フローの運用と管理を行うツール。システムのパフォーマンスを監視し、問題が発生した場合にトラブルシューティングを行う。</td></tr><tr><td>Anypoint Connectors</td><td>既存のシステムやアプリケーションと接続するためのコネクタ。これにより、異なるシステム間でのデータのやり取りが容易になる。</td></tr></tbody></table></div></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>何はともあれ、これらを使った開発がどのように進んでいくのか？を簡単にご説明していきます。</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc3">Anypoint Platformを使った開発から運用までの流れ</span></h2>



<p>実際に使ってみよう！と思った方向けに、利用イメージが何となく理解できるように、開発～運用までの一連のフェーズを簡単にメモしておきます。</p>



<h3 class="wp-block-heading"><span id="toc4">1. 設計</span></h3>



<p>開発の最初のステップはAPIやフローの設計から。この設計フェーズでは、<a href="https://it-biz.online/mulesoft/design-center/">Anypoint Design Center</a>を利用して、どのシステムやアプリケーションをつなげるかを決定します。</p>



<ul class="wp-block-list">
<li><span style="" class="badge-blue"><b>使用するツール</b></span>　<strong>Anypoint Design Center</strong>
<ul class="wp-block-list">
<li>ここで、APIの設計とプロトタイピングを行います。APIのエンドポイントやデータ形式などを定義し、どのようにデータをやり取りするかを計画します。</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading"><span id="toc5">2. 開発</span></h3>



<p>設計が完了したら次は開発。この段階では、Anypoint Studioを利用して、実際の統合フローやAPIを作成します。</p>



<ul class="wp-block-list">
<li><span class="badge-blue">使用するツール</span>　<strong>Anypoint Studio</strong>
<ul class="wp-block-list">
<li>Anypoint Studioを使って、統合フローを視覚的に作成。プログラムを書くことなく、ドラッグ＆ドロップでシステム間のデータ連携を設定することができます。APIの実装もここで行います。</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading"><span id="toc6">3. テスト</span></h3>



<p>開発が完了したら、テストを行います。作成したAPIや統合フローが正しく動作するかを確認します。</p>



<ul class="wp-block-list">
<li><span class="badge-blue">使用するツール</span>　<strong>Anypoint Studio</strong>（テスト機能）
<ul class="wp-block-list">
<li>Anypoint Studioにはテストツールが組み込まれており、ローカル環境でAPIや統合フローをテストできます。これにより、問題がないか事前に確認できます。</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading"><span id="toc7">4. デプロイ</span></h3>



<p>テストが完了し、問題がなければ最後にデプロイを行います。作成したAPIや統合フローを実際の運用環境に配置します。</p>



<ul class="wp-block-list">
<li><span class="badge-blue">使用するツール</span>　<strong>Anypoint Management Center</strong>
<ul class="wp-block-list">
<li>Anypoint Management Centerを使って、APIや統合フローをクラウド環境にデプロイします。ここで、運用に必要な設定も行います。</li>
</ul>
</li>
</ul>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p><a href="https://it-biz.online/it-skills/github/">GitHub</a>との連携も可能です。ソースコードはGitHubで管理しておき、Anypoint Management Center経由でデプロイするというのが定石です。</p>
</div></div>



<h3 class="wp-block-heading"><span id="toc8">5. 運用と管理</span></h3>



<p>デプロイが完了したら、運用フェーズに入ります。APIや統合フローが正常に動作しているかを監視し、必要に応じてメンテナンスを行います。</p>



<ul class="wp-block-list">
<li><span class="badge-blue">使用するツール</span>　<strong>Anypoint Management Center</strong>
<ul class="wp-block-list">
<li>Anypoint Management Centerを使って、運用中のAPIや統合フローのパフォーマンスを監視します。問題が発生した場合は、ここでトラブルシューティングを行います。</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading"><span id="toc9">6. 共有と再利用</span></h3>



<p>最後に、作成したAPIや統合フローを他のプロジェクトでも再利用できるように共有します。</p>



<ul class="wp-block-list">
<li><span class="badge-blue">使用するツール</span>　<strong>Anypoint Exchange</strong>
<ul class="wp-block-list">
<li>Anypoint Exchangeを使って、作成したAPIや統合フローを共有し、他のチームやプロジェクトで再利用できるようにします。これにより、開発効率が向上します。</li>
</ul>
</li>
</ul>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<p class="has-text-align-center"><span class="badge-green">まとめ</span>　<strong>MuleSoft / Anypoint Platform</strong></p>



<p>MuleSoftは、異なるシステムやアプリケーションをつなげるためのツールを提供する会社。現在はSalesforceの一部として、企業のシステム統合とAPI管理を支援している。</p>



<p>Anypoint Platformは、クラウド上で動作するシステム統合とAPI管理のためのツールセットで、企業がデータのやり取りとプロセスの自動化を効率的に行えるようにする製品群。</p>
</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>MuleSoft：Design Centerを利用したAPI仕様書の作成を３分で</title>
		<link>https://it-biz.online/mulesoft/design-center/</link>
		
		<dc:creator><![CDATA[ビズドットオンライン]]></dc:creator>
		<pubDate>Tue, 02 Jul 2024 08:55:49 +0000</pubDate>
				<category><![CDATA[MuleSoft]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://it-biz.online/?p=9345</guid>

					<description><![CDATA[Design Centerは一言で説明すると、「API仕様書を作成し、設計段階でのモック、テストを行うためのツール」です。実際のAPIの実装は含まず、主にAPIの設計と初期テストにフォーカスしています。APIの実装や本番 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><strong>Design Center</strong>は一言で説明すると、「<strong>API仕様書を作成し、設計段階でのモック、テストを行うためのツール</strong>」です。実際のAPIの実装は含まず、主にAPIの設計と初期テストにフォーカスしています。APIの実装や本番環境へのデプロイは、別のツール（例えば、Anypoint StudioやAnypoint Platform）を使用して行います。</p>



<p class="has-text-align-center"><span class="badge">参考</span>　<a href="https://it-biz.online/it-skills/web_api/">APIとは？</a></p>



<p>このページではDesign Centerを利用してAPI仕様を定義する方法を説明します。API仕様の定義は<a href="https://it-biz.online/mulesoft/mulesoft-abc/">MuleSoft</a>開発の第１歩で、ここで説明する内容を理解すると徐々にMuleSoftの全貌が見えてくるはずです。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6" checked><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">Design Centerでできること</a><ol><li><a href="#toc2" tabindex="0">１．API Specification（API仕様）</a></li><li><a href="#toc3" tabindex="0">２．Flow（フロー）</a></li><li><a href="#toc4" tabindex="0">３．モックサーバー</a></li></ol></li><li><a href="#toc5" tabindex="0">補足：Design Centerでの作業と流れ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Design Centerでできること</span></h2>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ザックリいえば、<strong><span class="marker-under">APIの「型」や「外観（見た目）」を定義</span></strong>するためのツールです。具体的にいうと、APIのエンドポイントやメソッド、リクエストとレスポンスの構造を定義し、設計段階での動作をシミュレーションする役割を果たします。</p>
</div></div>



<p>MuleSoft <strong>Design Center</strong>は、APIの設計、簡易テスト、管理を行うためのクラウドベースのプラットフォームです。これらの機能は<a href="https://it-biz.online/mulesoft/mulesoft-abc/">Anypoint Platform</a>の一部として提供されており、各コンポーネントがどのように連携しているかを理解することが重要です。</p>



<p><span class="badge-blue">ポイント</span>　<strong>Anypoint Platformの全体像</strong></p>



<p>Anypoint Platformは、API管理、デザイン、開発、統合、運用を包括的にサポートするプラットフォームです。主要なコンポーネントには、Design Center、Anypoint Studio、API Manager、Runtime Managerなどがあります。</p>



<p><span class="badge-blue">ポイント</span>　<strong>Design Centerの動作原理</strong></p>



<p>Design Centerは、主に<strong>API Designer</strong>と<strong>Flow Designer</strong>の２つの主要コンポーネントで構成されており、この２つのツールを使うことでAPI仕様の定義を行うことが可能になります。</p>



<p>この最初の章では、Design Centerで作成できる中身・モノをご紹介していきます。</p>



<h3 class="wp-block-heading"><span id="toc2">１．API Specification（API仕様）</span></h3>



<p><strong>API Specification</strong>は、APIの構造と動作を定義する文書。これはAPIのエンドポイント、リクエストパラメータ、レスポンスフォーマット、エラーハンドリングなどを記述するもの。</p>



<ul class="wp-block-list">
<li><span class="badge-blue">利用するツール</span>
<ul class="wp-block-list">
<li><strong>API Designer</strong>を利用。<a href="https://it-biz.online/it-skills/raml/">RAML（RESTful API Modeling Language）</a>やOAS（OpenAPI Specification）という標準的なフォーマットで記述します。</li>
</ul>
</li>



<li><span class="badge-blue">機能概要</span>
<ul class="wp-block-list">
<li><strong>エンドポイント定義</strong>: APIのエンドポイント（URIパス）を定義。</li>



<li><strong>HTTPメソッド</strong>: 各エンドポイントで使用する<a href="https://it-biz.online/it-skills/http/">HTTP</a>メソッド（GET、POST、PUT、DELETEなど）を指定。</li>



<li><strong>パラメータ</strong>: リクエストパラメータ（クエリパラメータ、ヘッダー、ボディなど）を定義。</li>



<li><strong>レスポンス</strong>: 各エンドポイントのレスポンスフォーマットとステータスコードを記述。</li>



<li><strong>エラーハンドリング</strong>: エラーレスポンスの定義。</li>
</ul>
</li>
</ul>



<p class="has-text-align-center"><span class="badge-green">サンプル</span>　<strong>RAMLを利用したAPI仕様の例</strong></p>



<pre class="EnlighterJSRAW" data-enlighter-language="yaml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#%RAML 1.0
title: ToDo API
version: v1
baseUri: http://api.todoapp.com/{version}
mediaType: application/json

/types:
  ToDoItem:
    type: object
    properties:
      id: integer
      title: string
      completed: boolean
    example:
      id: 1
      title: Buy groceries
      completed: false

/todos:
  get:
    description: Retrieve a list of ToDo items
    responses:
      200:
        body:
          type: array
          items: ToDoItem
          example: |
            [
              {
                "id": 1,
                "title": "Buy groceries",
                "completed": false
              },
              {
                "id": 2,
                "title": "Clean the house",
                "completed": true
              }
            ]
  post:
    description: Create a new ToDo item
    body:
      type: ToDoItem
    responses:
      201:
        body:
          type: ToDoItem
          example: |
            {
              "id": 3,
              "title": "Walk the dog",
              "completed": false
            }
  /{id}:
    get:
      description: Retrieve a specific ToDo item by ID
      responses:
        200:
          body:
            type: ToDoItem
            example: |
              {
                "id": 1,
                "title": "Buy groceries",
                "completed": false
              }
        404:
          description: ToDo item not found
    put:
      description: Update a specific ToDo item by ID
      body:
        type: ToDoItem
      responses:
        200:
          body:
            type: ToDoItem
            example: |
              {
                "id": 1,
                "title": "Buy groceries",
                "completed": true
              }
        404:
          description: ToDo item not found
    delete:
      description: Delete a specific ToDo item by ID
      responses:
        204:
          description: ToDo item successfully deleted
        404:
          description: ToDo item not found</pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>RAMLが読めなくても大体何をしているかは理解できるかと思います。→APIの見た目（リクエストの型・レスポンスの型を定義しています。）</p>
</div></div>



<p>この型をもとに、後続のステップで実際にAPIの実装（データ連携などのビジネスロジック）をしていく流れになります。API Specificationは「APIを利用する人向け」に「どんなAPIなのか？」を説明するためのものでもあると考えることができます。</p>



<h3 class="wp-block-heading"><span id="toc3">２．Flow（フロー）</span></h3>



<p>Flowは異なるシステムやサービス間のデータフローやプロセスを定義するもの。<strong>Flow Designer</strong>を使用して、ドラッグアンドドロップで簡単に設計することができます。ただし、<strong><span class="marker-under">Flow Designerは複雑なロジックを実装することは難しく、実際にはAnypoint Studioを利用することが一般的です。</span></strong></p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon"></div></div>



<ul class="wp-block-list">
<li><span class="badge-blue">利用するツール</span>
<ul class="wp-block-list">
<li><strong>Flow Designer</strong>を使用。視覚的なインターフェースを提供し、ローコードで統合フローを設計します。</li>
</ul>
</li>



<li><span class="badge-blue">機能概要</span>
<ul class="wp-block-list">
<li><strong>コネクタ</strong>: 各種システムやサービス（Salesforce、Database、HTTPなど）との接続を設定。</li>



<li><strong>プロセス定義</strong>: データの流れや処理手順を定義。</li>



<li><strong>トリガー</strong>: フローを開始するトリガーイベント（タイマー、HTTPリクエストなど）を設定。</li>



<li><strong>データ変換</strong>: DataWeaveを使用してデータのマッピングや変換を行います。</li>



<li><strong>条件分岐</strong>: データや条件に応じてフローを分岐させるロジックを設定。</li>
</ul>
</li>
</ul>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">Design CenterとAnypoint Studioの役割分担は？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p><strong>Design Center</strong>はAPI仕様書の作成とシンプルなフローの設計に適しています。設計段階でのモックアップやプロトタイピングに最適。<strong>Anypoint Studio</strong>は、複雑な統合フローの詳細な実装と本番環境へのデプロイを行うためのツールです。エンタープライズレベルの統合を実現。</p>
</div></dd></dl></div>



<h3 class="wp-block-heading"><span id="toc4">３．モックサーバー</span></h3>



<p>モックサーバーは、実際のバックエンドがなくてもAPIの動作をシミュレートするためのものです。API仕様に基づいて自動的に生成されます。（<span class="badge-green">関連</span>　<a href="https://it-biz.online/it-skills/mock/">モックとは？</a>）</p>



<ul class="wp-block-list">
<li><span class="badge-blue">利用するツール</span>
<ul class="wp-block-list">
<li>API Designerから生成。設計したAPI仕様に基づいて、リアルタイムでモックサーバーを立ち上げ、APIの動作を確認することが可能。</li>
</ul>
</li>



<li><span class="badge-blue">機能概要</span>
<ul class="wp-block-list">
<li><strong>リクエストシミュレーション</strong>: クライアント側からのリクエストをシミュレートし、定義されたレスポンスを返します。</li>



<li><strong>エラーレスポンス</strong>: エラーレスポンスのテストも可能です。</li>



<li><strong>即時フィードバック</strong>: モックサーバーを使用して、設計中にAPIの動作を確認し、必要な修正をリアルタイムで行います。</li>
</ul>
</li>
</ul>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<p class="has-text-align-center"><span class="badge-green">まとめ</span>　<strong>Design Centerでできること</strong></p>



<p>MuleSoft Design Centerは、Anypoint Platformの一部として、APIの設計、モック、テストを行うための強力なツール。</p>



<p><strong>API Designer</strong>を使用してRAML/OAS仕様を作成し、Anypoint Platformがこれを読み込んでモックサーバーやAPIポータルを生成。<strong>Flow Designer</strong>では、シンプルな統合フローを設計しリアルタイムでデバッグが可能になるため、開発プロセスの効率化、品質の高いAPIや統合フローの提供に寄与する。</p>
</div>



<h2 class="wp-block-heading"><span id="toc5">補足：Design Centerでの作業と流れ</span></h2>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">DesignCenterでは（Flow Designerを利用しない場合）、あくまでもそこに実装は存在せず「型」だけが定義されている。この「型」をAnypoint Studioに取り込み、APIの実装として１つの資源に固めたものが、Anypoint Platform上で動作している、といことになるのでしょうか。</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>認識通り。MuleSoft Design Centerでの作業は主にAPIの「型」（すなわち仕様書）の作成に集中しており、実際の実装は含まれていません。以下にその流れを詳しく説明します</p>
</div></dd></dl></div>



<h4 class="wp-block-heading">1. API Specificationの作成（Design Center）</h4>



<ul class="wp-block-list">
<li><strong>API Designer</strong>を使用して、APIのエンドポイント、HTTPメソッド、リクエスト/レスポンスの構造などをRAMLまたはOASで定義します。</li>



<li>この段階では、APIの「型」としての仕様書が作成されるのみ。</li>
</ul>



<h4 class="wp-block-heading">2. APIの実装（Anypoint Studio）</h4>



<ul class="wp-block-list">
<li>Design Centerで作成したRAML/OAS仕様書を<strong>Anypoint Studio</strong>にインポートします。</li>



<li>Anypoint Studioで、APIの実際のビジネスロジック、データ処理、バックエンドサービスとの連携などを実装します。</li>



<li>具体的には、Muleフローを構築し、必要なコネクタやトランスフォーマーを設定します。</li>
</ul>



<h4 class="wp-block-heading">3. デプロイと実行（Anypoint Platform）</h4>



<ul class="wp-block-list">
<li>Anypoint Studioで完成したAPI実装を<strong>Anypoint Platform</strong>にデプロイします。</li>



<li>デプロイされたAPIは、Anypoint Runtime Managerを通じて管理、監視、スケーリングされます。</li>



<li>これにより、実際のAPIがエンタープライズ環境で動作し、クライアントからのリクエストに応答します。</li>
</ul>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://it-biz.online/wp-content/uploads/2023/06/man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>まとめると以下のような流れです。</p>
</div></div>



<ol class="wp-block-list">
<li><strong>Design Center</strong>でAPIの「型」を定義（API仕様書の作成）。</li>



<li><strong>Anypoint Studio</strong>でその「型」に基づいてAPIの実装を行う。</li>



<li><strong>Anypoint Platform</strong>上で実装されたAPIをデプロイし、運用・管理する。</li>
</ol>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
