あなたのスキルは社会に役立つ

あなたのスキルは社会に役立つ
エンジニアだからできる社会貢献

エンジニアだからできる社会貢献

東日本大震災の発生直後に発足したHack For Japanや「市民が主体となって自分たちの街の課題を技術で解決するコミュニティ作り支援」を掲げるCode for Japanのメンバーを始めとして、日本各地で技術を活用した社会貢献活動が行われています。本連載では、防災や減災、地域の活性化や課題解決、そして人材育成など、「エンジニアだからできる社会貢献」の取り組みをお届けします。

第 134 回EU 発のオープンソース都市 OS、FIWAREとは？
●関 治之（せき はるゆき） Code for Japan https://code4japan.org/
Twitter@hal_sk

GitHub@halsk●潮 周悟（うしお しゅうご） Code for Japan https://code4japan.org/
Mail

ushio.s@gmail.com

FIWARE とはTwitter@ushio_s

GitHub@ushios

治体が増えてきています。
Code for Japan でも、市民参加型まちづくりである Make our City プロジェクト注 1 の中で、みなさんは、FIWARE（ファイウェア）といFIWARE を拡張したオープンソースのデータ連

うオープンソースプラットフォームをご存じで携プラットフォームをいくつかの自治体に提供

しょうか。FIWARE は、EU（欧州連合）が多大しています。このプラットフォームはいくつかな税金を投入し、官民連携による投資によっての民間企業や自治体とともに開発しており、ス開発されているオープンソースのデータ連携用

マートシティのオープンソースマーケットやコソフトウェア群です。

ミュニティを作ることを目指しています。

EU 圏にはさまざまな国が存在しており、人口の大小もさまざまです。投資体力のある国とそうでない国もあります。そこで、国の格差が

FIWARE Orion Context
Brokerあまり広がらないよう、「特定の国や企業グルー

FIWARE は特定のソフトウェアを示す言葉でプ間だけでデータを流通させるのではなく、共はなく、さまざまなツールの総称です。利用目

通のデータモデルを定義し、標準 API による的に合わせて必要なツールを組み合わせて使いデータ交換インターフェースやデータ連携をす。
ます（図 1）

るためのミドルウェア層をオープンソースで提簡単に例を挙げますと、コンテキスト処理と供することで、オープンなデータ流通プラットして、クラウドとエッジ上でIoTサービスを動的フォームを作り上げよう」という目的で、2007に調整する分散実行フレームワークである

年に FIWARE プロジェクトがスタートしましFogFlow、コンテキストの永続化などを目的とた。2016 年には、FIWARE を継続して強化・したCygnusやSTH-Cometなどがあります。

普及を推進するために非営利団体「FIWAREFoundation」が設立されています。

FIWARE の中核となるのは、データの交換を行うコンテキストマネジメント部分です。本節

FIWARE は現在、ヨーロッパを中心に、さま

では、コンテキストマネジメントの 1 つである

ざまな国でスマートシティや企業間データ連携

FIWARE Orion Context Broker（以下、Orion）のために使われています。日本においても、政について詳しく解説します。

府の「デジタル田園都市国家構想推進交付金」で利用が推奨されたことから、FIWARE の採用自180 - Software Design注 1） https://www.code4japan.org/activity/moc

第 134 回
EU 発のオープンソース都市 OS、FIWAREとは？ています（図 2）。

NGSIv2 API
Orion は API として FIWARE NGSI version
2（NGSIv2）を実装しています●コンテキストの属性。NGSIv1 やエンティティは属性（Attributes）を持ち、属NGSI-LD など、別のバージョンも存在してい性は属性名（attribute name）、属性型（attributeますが、少し違ったものになりますので検索なtype）、属性値（attribute value）、およびメタどを行う際はお気をつけください。

データ（metadata）を持ちます。

●コンテキストのエンティティ●コンテキストのメタデータ

注2

NGSIv2 では、1 つのデータの塊をエンティ

メタデータはメタデータ名（metadata name）、ティ（Entity）と呼びます。エンティティは id とメタデータ型（metadata type）、メタデータ値型（type）を持ち、各エンティティはこれらの組（metadata value）を持ちますが、ネストされたみ合わせによって、一意に識別されるようになっデータが含まれることを予期していません。ここでは詳しい説明は省きます。

注 2）https://fiware-orion.readthedocs.io/en/1.2.0/

user/ngsiv2_implementation_notes/index.html◆◆◆

これらをふまえたうえでエンティティを◆図 1 FIWARE プラットフォームの構成要素

コンテキスト処理

コンテキストマネジメント（Context Broker）

デプロイツール

データ／ APIマネジメント

IoT、Robotics などとのインターフェース◆図 2 NGSI データモデルのおもな要素

Entity• id• typeAttributes• name“has”
1

Metadatan• value• name“has”• type1• typen• value※ https://fiware-orion.letsfiware.jp/user/orion-api/#context-data-modelling-and-exchange より引用。

Feb. 2023 - 181

あなたのスキルは社会に役立つ

エンジニアだからできる社会貢献

JSON で表記すると、リスト 1 のようになりま操作（作成、読み出し、更新、削除）、またそのす。

更新情報の通知など、コンテキスト情報のライ

Orion の起動
Orion の実行には、Orion サーバを用意しなければなりません。Code for Japan として、どなフサイクル全体を管理できます。
●作成

作 成 し た い エ ン テ ィ テ ィ を JSON 形 式 でたでも登録、利用していただけるサンドボック

POST します。リスト 3 は、JavaScript のコー

ス環境注 3 を用意していますが、データ作成・削ド例です。コードを実行し、201 Created のス

除などの取得以外の操作に関してはユーザー登テータスコードが返ってくれば、作成に成功し録・認証が必要になりますので、ここではローています。

カル環境に Docker Compose を利用し起動する方法を紹介します。
はじめに、docker-compose.yml を作成します。
リスト 2 のように書いたら、docker compose●取得/ 作成したエンティティのディレクトリ / 登録したエンティティの ID を GET することにより、up コマンドで起動しましょう注 4。

エンティティを取得できます。実行し、作成のエンドポイントも叩きます。version 情報などが得も成功です。

起動したことを確認するために、/version の。
返ってきたら起動は成功です（図 3）

CRUD 操作
Orion では、そのインターフェースを通して、REST-API でよく言われているデータの CRUD
注 3）https://app.sandbox.makeour.city/

注 4）Make our City の GitHub にも用意しています。https://github.com/makeOurCity/docker-compose-orion-v2/
blob/main/docker-compose.yml◆リスト1 エンティティの例{}“id”: “entityID”,“type”: “entityType”,“name”: {“type”: “Text”,“value”: “entityName”}

際に送った JSON と同じものが返ってきたら取◆リスト 2 docker-compose.yml

version: "3.5"
services:orion:
image: fiware/orion:3.7.0
ports:- 1026:1026
command: [ "-dbhost", "mongodb" ]environment:
ORION_MONGO_HOST: mongodb:27018
ORION_PORT: 1026
ORION_LOG_LEVEL: INFO
depends_on:- mongodb
mongodb:
image: mongo:3.6
ports:- 27018:27018
volumes:- ./data/mongodb:/data/db- ./data/configdb:/data/configdb◆図 3 起動確認$ docker compose up$ curl localhost:1026/version{"orion" : {"version" : "3.7.0","uptime" : "0 d, 0 h, 0 m, 13 s","git_hash" : "8b19705a8ec645ba1452cb97847a5615f0b2d3ca"

182 - Software Design

第 134 回
EU 発のオープンソース都市 OS、FIWAREとは？

ス注 7 などを読んで、実際に Context Broker を使●更新

更新の種類はいくつかあります。
●

1つの属性の値の上書き

●

属性の追加

●

エンティティの複数の属性を同時に上書き●

複数のエンティティの属性を上書き●

更新演算子を使用しての属性の値の上書き●削除

削除についても複数種類があります。
●

エンティティの属性の削除●

エンティティ自体の削除

用してみることをお勧めします。また、ブラウザ 上 で も 利 用 可 能 で、API を 簡 単 に 叩 け る
Postman 注 8 が用意してあったり、実際の例に則したように、Orion を使用できる FIWARE API
ウォークスルー注 9 や API 全体の仕様を Swagger
UI 注 10 で公開したりしていますので、そちらもご覧いただければ幸いです。

おわりに
今回は Orion だけの紹介になりましたが、先にも少しだけ紹介したとおり、FIWARE は特定のソフトウェアを示す言葉ではなく、さまざま◆ ◆ ◆なツールの総称です。Orion だけではできるこ誌面の都合上簡単な説明に留めましたが、実とも限られており、FIWARE のほかのソフト際のコードも Make our City の GitHub リポジト

ウェアと組み合わせることでさまざまなデータに用意していますのでぜひ試してみてくだを取り扱い、データ構造を変更したり、集計、リ注5

さい。

その他

統計なども動的に行ったり、グラフィカルに表示したりすることができるようになります。
それは、Orion を利用し公開されているデー

CRUD 操作以外にも、同時に削除と追加を行

タであれば、自分でも FIWARE のそのほかのう /v2/op/update などありますので、ぜひ Let s

ツールを使い、自分や都市にとって便利なもの

FIWARE のチュートリアル注6 や API リファレンを用意することができる、ということでもあり

注 5） https://github.com/makeOurCity/docker-compose-

リケーションを導入し、便利なものを提供する

注 6） https://www.letsfiware.jp/fiware-tutorials/ということもできますが、まずは Orion にデーます。そのために、FIWARE のいろいろなアプ
orion-v2/blob/main/src/◆リスト 3 エンティティの作成の例

const axios = require("axios");
const data = {id: "urn:ngsi-ld:MEASUREMENT:id:1",
type: "DeviceMeasurement",
numValue: {type: "Number",value: 20.5,},};
axios.post("http://localhost:1026/v2/ ｭentities", data).then((res) => {console.log(res);});

タを投入し、それを公開するということだけでも意味があると思っています。
本稿を読んで FIWARE に興味を持った方は、ぜひ Code for Japan の Slack ワークスペース注 11にご参加ください。ﾟ
注 7） https://fiware-orion.letsfiware.jp/orion-api/

注 8） https://www.postman.com/fiware/workspace/fiware-foundation-ev-s-public-workspace/collection/513743-dd7b3ba8-5aa3-405a-b05447608a483f77

注 9） https://fiware-orion.letsfiware.jp/user/

walkthrough_apiv2/#_2

注 10） https://swagger.lab.fiware.org/

注 11） https://www.code4japan.org/activity/community

Feb. 2023 - 183