---
title: "ウェブサービス データ統合"
date: "2020-05-11"
categories: 
  - "data-integration"
  - "json"
  - "tools"
tags: 
  - "data-integration"
  - "data-mapping"
  - "excel-data-mapping"
  - "json-mapping"
  - "mapforce"
  - "web-services"
description: MapForceを使用して、ウェブサービスから取得した天気予報データをExcelに統合する方法を解説します。JSONデータのマッピングとデータ変換のテクニックに焦点を当てます。
---
Status: #blog

Tags:  #data-integration #data-mapping #excel-data-mapping #json-mapping #mapforce #web-services

Categories: [data-integration](/blog/ja/category/data-integration.md) | [json](/blog/ja/category/json.md) | [tools](/blog/ja/category/tools.md)
# ウェブサービス データ統合

ある [前の投稿](https://www.altova.com/blog/analyze-json-data-in-xmlspy-grid-view/) データ統合やレポート作成といったあらゆる作業は、まずソースデータの明確な理解から始める必要があります。XMLSpyの業界をリードする機能であるグリッドビューを使用することで、その作業がより効率的に行えます [XMLおよびJSONエディタ](https://www.altova.com/ja/xmlspy-xml-editor), ウェブサービスから取得した5日間の天気予報データ（JSON形式）を分析しました。

前回のシナリオに引き続き、今回は「MapForce」を使用します。MapForceは、数々の賞を受賞している、グラフィカルな [あらゆるデータ形式間の変換と統合を可能にするデータマッピングツール](https://www.altova.com/ja/mapforce), 主要な貨物輸送港の予測情報を、見やすく整理されたExcelファイルにまとめる作業を行います。特に、クレーンによるコンテナの積み降ろしに影響を与えたり、港への出入りを遅らせる可能性のある、予測される強風や大雨について、強調表示するようにします。

![](/blog/images/containership.jpg)

<!--more-->

天気予報を取得するためのRESTリクエストは、緯度と経度の座標を受け付け、世界中のあらゆる場所の5日間の天気予報を返します。MapForceでは、1つのマッピングで複数の入力と出力を処理できるため、まずは貨物港の一覧とそれぞれの座標を作成することから、Webサービスデータ統合プロジェクトを開始します。

XMLSpyで、JSONの構文に気を配ることなく、データを入力するだけで、グリッドビューで新しいJSONドキュメントとしてリストを作成できます。以下の画像では、左上にあるアイコンをクリックして、リストをテーブル形式で表示しています

[![XMLSpy上で、主要な貨物港の一覧をJSON形式でグリッド表示します](/blog/images/port-list-grid.png)](port-list-grid.png)

グリッド表示は、テキスト表示と比較して、ファイルの内容をより容易に確認・レビューすることができます。テキスト表示では、有効なJSONファイルに必要なすべての構文要素が表示されるため、内容の把握が難しくなる場合があります。

[![同じJSONファイルをテキスト表示形式で](/blog/images/port-list-text.png)](port-list-text.png)

### データマッピングの概要

MapForce Webサービスによるデータ統合プロジェクトでは、港のリストを入力ファイルとして使用し、各座標セットに対してRESTリクエストを送信します。そして、各港から得られたJSONデータをExcelのワークシートにマッピングします。

MapForceは、マッピングに使用するJSONデータ構造をモデル化するために、[json-schema.org](http://json-schema.org)の仕様に準拠したJSONスキーマファイルを使用します。MapForceは、JSONデータから自動的にJSONスキーマを生成することができます。これは、単一の"port-list.json"ファイルの場合には問題なく機能します。

また、Webサービスから返されるデータを整理するためのJSONスキーマも必要ですが、これは少し複雑です。すべての必要なデータとオプションのデータを含む単一の.json形式の予測ファイルは存在しません。

幸いなことに、XMLSpyは、XMLSpyプロジェクトフォルダに収集された複数のサンプルドキュメントに基づいて、JSONスキーマを生成することができます。

[![XMLSpy上で、複数のインスタンスファイルからJSONスキーマを生成します](/blog/images/xmlspy-schema-gen.png)](xmlspy-schema-gen.png)

生成されたスキーマをJSON Schema形式で開くと、「rain」オブジェクトがオプションであることがわかります。これは、予測データファイルのうち少なくとも1つで、5日間の予測期間中に降水が全く予測されていなかったため、レスポンスに「rain」オブジェクトが含まれていないことが理由です。

[![XMLSpyのスキーマビューで、スキーマの内容を確認してください](/blog/images/schema-view.png)](schema-view.png)

このスキーマを使って、マッピングにおけるREST APIのレスポンスデータを記述することができます。

以下の画像では、まず「post-list.json」ファイルと新しいWebサービスを組み込むことで、データマッピングの構築を開始しました。REST APIのURLを追加し、緯度と経度の座標を入力パラメータとしてマッピングすることで、リクエストを構築しています。現時点では、レスポンスの本文に構造が定義されていません。

[![REST APIからのレスポンスを、Webサービスデータ統合のマッピングに追加する](/blog/images/port-mapping-1.png)](port-mapping-1.png)

XMLSpyで作成したスキーマを、クリックして開く「レスポンス構造」ダイアログで指定することができます

[![REST APIのレスポンスデータ構造をマッピングするために、JSONスキーマを追加します](/blog/images/response-structure-dialog.png)](response-structure-dialog.png)

スキーマが割り当てられると、本文内のすべての項目がマッピングの対象となります

[![Webサービスデータ統合のマッピングにおいて、各RESTレスポンス項目を表示します](/blog/images/port-mapping-2.png)](port-mapping-2.png)

それでは、対象となるExcelファイルを追加できます。参考として、いくつかのセルのスタイルやグラフ、そしてダミーデータが記載されたサンプルスプレッドシートが用意されています

[![最終的な出力結果を表現するためのスプレッドシートモデル](/blog/images/sheet-1.png)](sheet-1.png)

このスプレッドシートを、Webサービスとのデータ連携におけるデータ格納先として追加できますが、データを受け取るセルを特定する必要があります

[![スプレッドシートをデータマッピングに追加します](/blog/images/port-mapping-3.png)](port-mapping-3.png)

「Rows 1, n=dyn」の右にあるボタンをクリックすると、「範囲の選択」ダイアログが開きます。10行目にはデータの列ヘッダーが含まれているため、メインのテーブルを11行目から開始し、A列からK列までを対象としてマッピングしたいと考えています。これらの列には異なるデータ型が含まれており、多くの場合、JSONソースのテキスト型または数値型、およびExcelのフォーマット型に対応しています。「範囲の選択」ダイアログを使用すると、正確な対象範囲とデータ型を定義できます

[![データを入力するセル範囲を選択します](/blog/images/select-range-dialog.png)](select-range-dialog.png)

選択範囲ダイアログで列名を特定すると、それらの名前が結果のマッピングにラベルとして追加されます。次に、以下のように、各予測結果を個別のExcelファイルにマッピングするロジックを構築できます

[![各スプレッドシートに対して、それぞれ固有のファイル名を設定する](/blog/images/port-mapping-4.png)](port-mapping-4.png)

Excelのターゲットファイルの一番上に表示されるファイル名は、<dynamic>と設定されており、これはファイル名が生成されることを示しています。実際のファイル名は、ソースリストから都市名を取り出し、それを結合する関数によって作成され、例えば「forecast-Seattle.xlsx」のようなファイル名が生成されます。

また、各ファイル内の主要なデータテーブルが、必ず11行目から始まるようにする必要があります。そのため、リスト配列の最上位オブジェクトを、10行目、n=dyn の箇所にリンクさせ、ファイル名が変更されるたびに、自動連番機能を使用して開始行をリセットするようにしました。

レスポンスに含まれる各リストオブジェクトは、Excelのスプレッドシート内の新しい行に対応します。次に、レスポンス内の個々の項目を、その行の列と関連付けることができます。以下の画像では、追加の処理が不要なすべての項目を関連付けています。

[![REST APIからのレスポンスに含まれる項目を、スプレッドシートのセルに紐づけること](/blog/images/port-mapping-5.png)](port-mapping-5.png)

直接リンクされた項目については、JSONレスポンスに含まれるデータ型が、スプレッドシートの各列で指定したデータ型と直接対応しています。例えば、ソースのJSONデータにおける「Temp」は数値であり、ターゲットのスプレッドシートのE列も数値です。また、ソースのJSONデータにおける「description」は文字列であり、ターゲットのスプレッドシートのB列も文字列です。このように、データ型が一致しています。

レスポンスのJSONスキーマにおいて、"rain"というオブジェクトがオプションであることがわかりました。もしそのオブジェクトが存在しない場合、私たちはそれをゼロで置き換えたいと考えています。これは、"exists"と"if-else"を組み合わせた式を作成することで簡単に実現できます

[![降雨量のデータが欠損している場合は、値を0としてください。](/blog/images/port-mapping-6.png)](port-mapping-6.png)

JSONデータ形式の制限の一つは、文字列と数値の2種類のデータ型しかサポートしていないことです。整数や日付/時刻といったデータ型、またExcelにおけるパーセント表示や会計処理といった特殊な形式は、JSONでは定義されていません。MapForceは、マッピング処理において、ソースデータを希望するターゲットデータ型に変換するための、便利な組み込み関数を提供しています。これにより、ExcelのA列に、希望する日付/時刻形式のデータを生成することができます。

JSONデータ内の "main.dt_text" という項目は、日付と時刻を表す文字列です。例えば、"2020-05-09 06:00:00" のような形式です。MapForceには、文字列とフォーマットモデルを入力として受け取り、日時を結果として返す "parse-dateTime" という関数があります。しかし、さらに注意点があります。この "dt-txt" 文字列は、予測対象の都市のローカル時間ではなく、協定世界時 (GMT) で表示されています。ローカル時間との差分は、"city.timezone" の項目で、正または負の秒数で示されています。

メインのマップ表示をシンプルにするために、calc-local-timeというユーザー関数を作成しました。この関数は、文字列とオフセットを受け取り、ローカルタイムを計算します。このユーザー関数は、組み込み関数と同様にマップされます

[![](/blog/images/port-mapping-7-2.png)](port-mapping-7-2.png)

ウェブサービスデータ統合のマッピングを完了するために、最後に都市名と国名を結合し、それを1行目のC列に追加する必要があります

[![1行目に都市名と国名を追加します](/blog/images/port-mapping-8.png)](port-mapping-8.png)

以下に、最終的なマッピングの全体像を示します

[![ウェブサービスデータの統合における、包括的なマッピングに関する情報](/blog/images/port-mapping-complete.png)](port-mapping-complete.png)

各都市に対応した、適切な形式のExcelファイルを入手するためには、それぞれの対象ファイル名に対応した、あらかじめ形式が設定されたExcelファイルが必要です。バッチファイルは、元のExcelファイルのサンプルを繰り返しコピーし、そのスタイルや数式を維持することで、効率的にオリジナルファイルを作成する方法です。

### ウェブサービス データ統合の結果

マッピングウィンドウの左下にある「出力」ボタンをクリックすると、マッピングが実行され、出力ファイルが生成されます。ワークステーションにExcelがインストールされている場合、実際のExcel出力は「出力」ウィンドウにプレビュー表示されます

[![生成された最初のExcelファイルの内容を表示するプレビューウィンドウ](/blog/images/port-forecast-output-1.png)](port-forecast-output-1.png)

画面上部には、現在の日時と天気が表示されており、降水量のグラフの横には、Excelのスプレッドシート内の数式によって生成されたテキストの要約が表示されています。9つの出力ファイルはすべて生成されており、個々のファイルを選択してプレビューすることができます。以下に、ファイル選択のドロップダウンリストと、シアトルの天気予報が記載された7番目のファイルを示します

[![別の出力ファイルを確認するためのメニュー](/blog/images/port-forecast-output-2.png)](port-forecast-output-2.png)

プレビューウィンドウでは、Excelの機能の一部をご利用いただけます。例えば、このスプレッドシートでは、画面分割によるスクロール機能が使用されており、画面上部の部分は固定表示になっています。メインのデータテーブルの最下部までスクロールすると、最新の予測における降水量の詳細を確認できます。左側の行番号にご注意ください

[![プレビューウィンドウに表示される出力データをスクロールします](/blog/images/port-forecast-output-3.png)](port-forecast-output-3.png)

出力結果が良好であれば、生成されたファイルのうち、一つまたは全てを保存することができます

[![ウェブサービスデータ統合の出力ファイルを保存する](/blog/images/port-forecast-output-4.png)](port-forecast-output-4.png)

### 中間データ

MapForceは、データ変換の効率性を追求して設計されています。RESTレスポンスから得られる中間JSONデータを、保存したり、管理したり、明示的に操作したりする必要はありません。このWebサービスデータの統合マッピングの実行において、中間データは保存されません。

JSON形式のレスポンスデータを最終的なExcelスプレッドシートと一緒に保存したい場合、MapForceにはいくつかのオプションがあります。その一つは、レスポンスデータと同じスキーマに基づいて、中間的なJSONファイルとしてレスポンスデータを保存する、連鎖的なマッピングを作成する方法です。その後、このJSONファイルをマッピングして、Excel形式の出力を作成できます。連鎖的なマッピングを使用すると、中間ファイルだけでなく、最終的な結果もプレビューしたり保存したりできます。以下に、連鎖的なマッピングによって生成された出力ファイルの一覧を示します。背景には、そのうちの1つのJSONファイルがテキスト表示で表示されています

[![Webサービスデータの統合において、中間データを活用する別のデータ連携方法](/blog/images/port-forecast-output-5.png)](port-forecast-output-5.png)

### 自動化されたウェブサービスデータ統合

私たちのワークフローでは、予測を毎日更新する必要があります。このマッピングをMapForce Serverの実行ファイルとして保存することで、MapForce Serverによる[自動処理](https://www.altova.com/ja/mapforce-server)を実現できます。または、FlowForce Serverに直接展開することで、自動スケジュールに基づいて新しい予測を生成できます。FlowForce Serverのジョブは、ファイル移動やメール送信などのシステム操作を含む、複数のデータ統合タスクを組み合わせることができます。また、FlowForce Serverのジョブは、[複雑なワークフローを実行](https://www.altova.com/ja/flowforceserver)することができ、その結果やパラメータを他のジョブに渡してトリガーすることも可能です。

短い動画をご覧ください [ビデオデモ](https://www.altova.com/ja/mapforce/demos) MapForceの、または [無料トライアル版をダウンロードする](https://www.altova.com/ja/mapforce/download) JSONやWebサービスデータの統合、またはその他のデータのマッピング、変換、加工など、独自のプロジェクトを始めるためのチュートリアル、ヘルプ、そして豊富なサンプルをご用意しています。
