はじめに

近年、企業間でのデータ共有・流通の重要性が高まっています。しかし、単純にAPIを公開するだけでは、「誰が」「どんな条件で」「どのデータに」アクセスできるかを制御することが困難です。

データスペース(Dataspace) は、この課題を解決するための概念です。データの所有者が主権を持ちながら、信頼できる相手とデータを安全に共有できる仕組みを提供します。

本記事では、データスペースの実装基盤である Eclipse EDC(Eclipse Dataspace Components) を使って、ローカル環境でデータ交換フローを体験します。

目次

  1. データスペースとは?
  2. Eclipse EDCの概要
  3. 環境構築
  4. データ交換フローの実行
  5. GUIダッシュボードの作成
  6. まとめ

データスペースとは?

従来のデータ共有の課題

従来のAPI連携では、以下のような課題がありました:

  • アクセス制御が困難 : APIキーを渡すと、どんなデータでも取得できてしまう
  • 利用条件の管理 : 「このデータは社内利用のみ」といった条件を技術的に強制できない
  • 監査・追跡 : 誰がいつデータを取得したか追跡しづらい

データスペースの解決策

データスペースは以下の仕組みで解決します:

C1234o....n:AsCPCPuoro:Imno:nesvsruiumdmeeerrr:::APIProviderAPI

主要な用語

用語説明
Connectorデータスペースに参加するためのソフトウェア。ProviderとConsumerそれぞれが持つ
Providerデータを提供する側
Consumerデータを取得する側
CatalogProviderが公開しているデータの一覧
Policyデータアクセスの条件(誰が、いつ、どのように使えるか)
ContractProviderとConsumer間で結ばれる契約
EDREndpoint Data Reference。データ取得用の一時的なアクセス情報

Eclipse EDCの概要

Eclipse EDC は、Eclipse Foundationが開発するオープンソースのデータスペース実装基盤です。

アーキテクチャ

Ma---nCaognetmreonltPAlPaIne(REESDTC--)-ConnDeScDPtaotPraroPtloacnoel()

主要なAPIエンドポイント

エンドポイント用途
/management/v3/assetsアセット(データ)の管理
/management/v3/policydefinitionsポリシーの管理
/management/v3/contractdefinitionsコントラクト定義の管理
/management/v3/catalog/requestカタログの取得
/management/v3/contractnegotiations契約交渉
/management/v3/transferprocessesデータ転送
/management/v3/edrsEDR(アクセストークン)の取得

環境構築

前提条件

  • Docker & Docker Compose
  • Java 17(Gradleビルド用)
  • Python 3(プロキシサーバー用)

1. EDC Samplesのクローン

gcidtecdlco-nseamp-ldeespth1https://github.com/eclipse-edc/Samples.gitedc-samples

2. コネクタのビルド

##//CgPgorrrnaoasdvdulilmedeewewrrttrraDananstsfafePerlr:a:tntreraannssffeerr--0003--pcroenrseuqmueirs-iptuelsl::cpornonveicdteorr-:pbruoixlyd-data-plane:build

3. Docker設定ファイルの作成

Dockerfile.consumer

FWCEROONORPTMKYRDYeItPcRrOlaIi/nNpasTspfepe[-r"t/jetamrvuaarn"is,nf:e"1r-7-j-0aj0rr-"ep,re"r/eaqpupi/sciotnense/cctoonrn.ejcatro"r]/build/libs/connector.jar/app/connector.jar

Dockerfile.provider

FWCEROONORPTMKYRDYeItPcRrOlaIi/nNpasTspfepe[-r"t/jetamrvuaarn"is,nf:e"1r-7-j-0aj3rr-"ec,on"s/uampepr/-cpounlnle/cptroorv.ijdaerr"-]proxy-data-plane/build/libs/connector.jar/app/connector.jar

docker-compose.yml

sercpvorinbcepobcepcsuonoovuonooeuicdnvElr--iicdnvElr---smlootiDutdlootiDut:edncarCms""edncarCms"""r:tkio_e/:22r:tkio_e/:111:eennFsc99:eennFsc999xremS:o11xremS:o112tfre_n99tfre_n999:i_nCf34:i_nCf341lntOi::lntOi:::.ea:Ng22.ea:Ng111:mF/99:mF/999eIc11eIp112D:Go99D:Gr999o:n34o:o341ces""cev"""kd/ukd/iecamecadr-pe##r-pe###fcprfpprio/.MDir/-MDDlncpaSlocdaSaesornPevoanPt.unoa.intaacmfpgPpdfagPPoeieerreiperlnrgrmoorglmoas/tetv/aetnucinoipnnoemoetcdretcensoeo.oPrs:AlrvpAluu/PirPbmaIdoIlepepirprec./.rpcptAroriPonoeIpfpseie:rgr/t/taicipeoepsns/scuomnefri.gp/rporpoevritdieers.:prrooperties:ro

4. コネクタの起動

dockercomposeup-d-build

起動確認:

d#oc"kReurntciommeposelroegasdy"-tail10

データ交換フローの実行

フロー全体像

SSSSSttttteeeeepppppCCCCC12o3o4o5oo::n:n:n:nnsssssPuuuuurmmmmmoeeeeevrrrrri::deErPPDPrrRroooEvvvDiiiCddTdeererrar::nsDfaetraPlane:

Step 1: Providerにデータを登録

アセット作成 (提供するデータの定義)

Ma---nCaognetmreonltPAlPaIne(REESDTC--)-ConnDeScDPtaotPraroPtloacnoel()

0

ポリシー作成 (アクセス条件の定義)

Ma---nCaognetmreonltPAlPaIne(REESDTC--)-ConnDeScDPtaotPraroPtloacnoel()

1

コントラクト定義作成 (アセットとポリシーの紐付け)

Ma---nCaognetmreonltPAlPaIne(REESDTC--)-ConnDeScDPtaotPraroPtloacnoel()

2

Step 2: カタログ取得

Consumerから、Providerが公開しているデータを確認します:

Ma---nCaognetmreonltPAlPaIne(REESDTC--)-ConnDeScDPtaotPraroPtloacnoel()

3

レスポンスには、Providerが公開している「製品データ」とそのOffer IDが含まれます。

Step 3: 契約交渉

カタログから取得したOffer IDを使って契約交渉を開始します:

Ma---nCaognetmreonltPAlPaIne(REESDTC--)-ConnDeScDPtaotPraroPtloacnoel()

4

交渉が完了すると、状態が FINALIZED になり、contractAgreementId が発行されます。

Step 4: データ転送

契約が締結されたら、データ転送を開始します:

Ma---nCaognetmreonltPAlPaIne(REESDTC--)-ConnDeScDPtaotPraroPtloacnoel()

5

Step 5: データ取得

Transfer状態が STARTED になったら、EDRを取得してデータを取得します:

Ma---nCaognetmreonltPAlPaIne(REESDTC--)-ConnDeScDPtaotPraroPtloacnoel()

6

レスポンス例:

Ma---nCaognetmreonltPAlPaIne(REESDTC--)-ConnDeScDPtaotPraroPtloacnoel()

7


GUIダッシュボードの作成

CLIでの操作は学習には良いですが、実際の運用では視覚的なダッシュボードが便利です。
今回、Next.js + TypeScriptでEDCダッシュボードを作成しました。

EDC Connector Dashboard - コネクタ一覧

機能

  1. コネクタタブ : Consumer/Providerのアセット・ポリシー・コントラクト管理
  2. データ交換フロータブ : GUIでフルフロー実行
  3. 契約交渉タブ : 契約交渉の一覧・状態確認
  4. データ転送タブ : データ転送の一覧・状態確認

データ交換フローの実行

ダッシュボードの「データ交換フロー」タブでは、5つのステップでデータ交換を実行できます。

Step 1-2: カタログ取得とオファー選択

カタログ取得

「カタログ取得」ボタンをクリックすると、Providerが公開しているデータ(製品データ)が表示されます。

Step 3-4: 契約交渉とデータ転送

データ転送開始

契約交渉が完了すると、転送タイプ(HTTP Pull/Push)を選択してデータ転送を開始できます。

Step 5: データ取得完了

データ取得完了

全てのステップが完了すると、Providerから取得した実際のデータがJSON形式で表示されます。

契約交渉・データ転送の管理

契約交渉一覧

契約交渉一覧

データ転送一覧

データ転送一覧

各タブで契約交渉やデータ転送の状態を確認できます。

CORSの解決

ブラウザからEDC Management APIに直接アクセスするとCORSエラーが発生するため、
Pythonで簡易プロキシサーバーを作成しました:

Ma---nCaognetmreonltPAlPaIne(REESDTC--)-ConnDeScDPtaotPraroPtloacnoel()

8


まとめ

今回学んだこと

  1. データスペースの概念 : 従来のAPI連携との違い、主権を維持したデータ共有
  2. Eclipse EDCの構成 : Control Plane / Data Plane、Management API
  3. データ交換フロー : カタログ取得 → 契約交渉 → データ転送 → データ取得
  4. 実践 : Docker環境でのEDC構築、GUIダッシュボードの作成

次のステップ

  • ポリシーの活用 : 特定の条件(時間制限、地域制限など)を持つポリシーの設定
  • 認証・認可 : 実運用向けのVault統合、証明書管理
  • Federated Catalog : 複数のProviderを横断したカタログ検索
  • Catena-X / GAIA-X : 自動車業界やEUのデータスペースイニシアチブとの連携

参考リンク


この記事で使用したコードはGitHub をベースに作成しました。