狠狠撸

狠狠撸Share a Scribd company logo
Node-REDのノード開発容易化ツール
Node generator
12/8/2018
日立製作所 横井一仁
1. Node-REDとは
2. Open APIドキュメントとは
3. ノード開発容易化ツール Node generator
コンテンツ
1
4. デモ
5. 将来機能
6. Node generatorの使い方
1. Node-REDとは
2
2018年のトレンド: ノンプログラミング開発ツール
3
? 一般的にノンプログラミング開発ツールは、コーディング不要で
カスタムアプリを開発できるビジュアルプログラミングツールを指す。
? 調査会社がノンプログラミング開発ツールをトレンドの1つと報告
? 「ノンプログラミング開発ツールの改良によって、
自身でアプリを開発できる非エンジニアが劇的に増加する」
? 「API経由でアクセス可能なデータとの統合が、
ノンプログラミング開発ツールでは重要である」
IDC Future Scape: Worldwide IT Industry 2018 Predictions, https://www.idc.com/getdoc.jsp?containerId=US43171317
Apache NiFi
Microsoft FlowGoogle App Maker
Node-RED
Node-REDとは
4
IoTアプリケーション向けのビジュアルプログラミングツール
? 迅速な開発を可能とするフローベースドプログラミング環境
? 新機能を追加できるさまざまな部品(Node-REDのノード)を提供
? Linux Foundation管理下のオープンソースソフトウェア
(2) ノードを中央のワークスペースへ
ドラッグアンドドロップ
(3) 処理順でノードを接続
(4) デプロイボタンをクリックすると
すぐにフローが動作
(1) 様々な機能を
持つノードを選択
Node-REDの歴史
5
エッジデバイスとクラウドの両環境で開発と実行ができる
オープンソースソフトウェアとして普及中
? 2014年3月: IBMが開発し、オープンソースソフトウェアとして公開
? 2014年6月: IBM Cloudのカタログに登録
? 2015年11月: Raspberry Piの標準ソフトウェア
? 2016年10月: Linux Foundation (JS Foundation)に移管
? 2018年12月現在: 5万ダウンロード/月
5
0K
20K
40K
60K
Jan '15 Jul '15 Jan '16 Jul '16 Jan '17 Jul '17 Jan '18
ダウンロード数
1ヵ月あたり
5万ダウンロード
産業向けIoT分野に注力している主要な企業がNode-REDを採用
? クラウド環境
- AT&T, AT&T IoT Platform
- CISCO, Meraki
- Fujitsu, K5 COLMINA Platform
- Google, Xively
- Hitachi, Lumada
- IBM, IBM Cloud
- Nokia, Nokia Innovation Platform
- Sense Tecnic, FRED
- Siemens, MindSphere Visual Flow Creator
- Uhuru, enebular
? エッジデバイス
- Fujitsu, INTELLIEDGE A700 Appliance
- GE, Predix Developer Kit
- Intel, Intel IoT Gateway
- NEC, CONNEXIVE IoT
Connectivity Engine
- Samsung, Artik
- Siemens, SIMATIC IOT2020
- Toshiba, SPINEX
Node-RED採用企業
6
? ノード提供
- Fujitsu, K5 IoT Platform
- IBM, dashDB, Cloudant,
OpenWhisk,
Watson, Watson IoT Platform,
Weather Company Data
- Microsoft, Azure IoT Hub,
Azure Cognitive Services,
Azure Blob Storage,
Azure Cosmos DB,
Azure Event Hub, Azure SQL,
Azure Table Storage
- NEC, Mobile Backend Platform
SecureWare
Node-REDの利点
7
(1) IoTアプリケーションを迅速に開発可能
? 非エンジニアでも数時間で
IoTアプリケーションを開発できる。
? エッジデバイスとクラウドのアプリを
同じスキルセットで開発できる。
(2) 産業向けIoTに適した技術、エッジデバイス
? IoTで必要不可欠な技術を利用できる。
(例: REST API、WebSocket、MQTT)
? 業界標準のエッジデバイスに搭載されている。
(3) 誰でも参加可能なオープンな開発コミュニティ
? 88名の開発者がNode-REDを開発中。
? サードパーティのノードが1,769個公開されている。
7
IoTシステムを実現するNode-REDの機能
88
???
(2)データ
収集
(5) データ蓄積/参照
ITシステム
(1) エッジ分析
(4) ダッシュボード
クラウド上のNode-RED
エッジデバイス上
のNode-RED
(3)デバイス
制御
センサ
OTシステム
ビジネスデータ
外部サービス
センサ
MQTT
REST API
MQTT
REST API
データレイク
(6) 既存システム
との統合
(7) 外部サービスとの接続
2. Open APIドキュメントとは
9
Open APIドキュメントとは
10
? REST API定義を記述する業界標準のフォーマット
? Open APIプロジェクトにより提供されているツール
? Swagger Editor & UI: Open APIドキュメントを記述するためのエディタ、
ブラウザから参照できるドキュメントを自動生成
? Swagger Core: サーバサイドのコードからOpen APIドキュメントを自動生成
? Swagger Codegen: Open APIドキュメントからコードを自動生成
クライアントサイド
コード
Swagger
Editor & UI
Swagger
Codegen
(サーバ向け)
サーバサイド
コード
Swagger
Core
サーバサイド
コード
コード開発REST APIの設計
Open API
ドキュメント
Open API
ドキュメント
(1) Open API
ドキュメントの設計
(2) コード生成
Swagger
Codegen
(クライアント向け)
Open APIドキュメントの例
11
swagger: '2.0'
info:
description: 'This is a sample server Petstore server.'
version: 1.0.0
title: Swagger Petstore
license:
name: Apache 2.0
url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
host: petstore.swagger.io
basePath: /v2
paths:
/store/inventory:
get:
summary: Returns pet inventories by status
description: Returns a map of status codes to quantities
operationId: getInventory
produces:
- application/json
parameters: []
responses:
'200':
description: successful operation
Open APIドキュメントには、REST APIのアクセス方法
についての情報が記載されている。
ホスト名
パラメータ
REST API
の説明
HTTP
メソッド
3. ノード開発容易化ツール Node generator
12
独自ノード開発の課題
13
? ノードは主にJavaScriptファイルとHTMLファイルから構成
? 1ノードは数千行のコード量であるため、ノード開発時間大
Node-REDフロー
エディタ向けUI
Node-RED
ランタイム
JavaScript
ファイル
HTML
ファイル
Node.js上
で実行
ノード
ノード開発時間大数千行のコード
ノード開発容易化ツール Node generator
1414
? Open APIドキュメント等の定義ファイルから
ノードを自動生成するツール
? Linux Foundation (JS Foundation) のオープンソースソフトウェア
Node
generator
Open API
ドキュメント
ノード
https://github.com/node-red/node-red-nodegen
ノード生成
npmjsにて
“nodegen”で検索
ノードの生成方法
15
? Node generatorには、REST API固有の情報を除いた
共通のクライアントコードを持つノードテンプレートが入っている。
? Node generatorは、本ノードテンプレートに
REST API固有の情報を挿入することでノードを生成
JavaScript
ファイル
HTML
ファイル
REST APIの説明、
パラメータ
ノード
Open API
ドキュメント
Node
generator
REST APIの説明、
ホスト名、
HTTPメソッド、
パラメータ
ホスト名、
HTTPメソッド
[JavaScriptテンプレート]
var ops = { url: {{hostname}},
method: {{method}}
};
request(opts, function(…) {
[HTMLテンプレート]
<select>
<option value="{{&method}}">
<option value="{{&method}}">
</select>
ノードテンプレート
Node generatorによる開発工数削減効果
16
ケース1: REST APIのOpen APIドキュメントが存在する場合
-> 開発工数なし (コマンド実行のみ)
ケース2: 開発者が初めからOpen APIドキュメントを作成する場合
-> 55% (従来3ヵ月かかる開発を2か月に短縮)
0 20 40 60 80 100
API 1
API 4
API 7
API 10
API 13
API 16
API 19
API 22
API 25
API 28
API 31
API 34
%
平均: 55%の開発工数
生成したノードのコード行数に対するOpen APIドキュメントのコード行数
4. デモ
17
ボトムアップアプローチの開発方法
18
Node
generator
Swagger
Editor & UI
Open API
ドキュメント
コードの開発REST APIの設計
Open API
ドキュメント
ステップ1: API提供者がREST API用のOpen APIドキュメントを作成
ステップ2: クライアントサイドの開発者がノードを生成し、
クライアントサイドのフローで生成したノードを利用
API提供者
REST API
(1) Open APIドキュメント
を作成 (2) ノード生成
クライアント
サイドの開発者
ノード (3) クライアントサイド
のフローを開発
(4) REST APIへアクセス
デモ: 宇宙ステーションの位置情報を地図上に可視化
1919
宇宙ステーションの位置情報をREST APIから取得し、
世界地図上に位置を表示
2. 緯度経度を
取得
3. 位置情報データの
フォーマット変換
ウェブブラウザ
4. 世界地図上に
ピンを配置
宇宙ステーション
REST API
1. ノードを生成、
インストール
5. 将来機能
20
Node-REDフローエディタとの統合
21
クライアントサイドの開発者は、フローエディタ上でノードを生成できる。
https://github.com/node-red/node-red/wiki/Design:-Node-Generator
ノード
(1) Open APIドキュメントを
記述し、オプションを設定
Node
generator
Open API
ドキュメント
(3) tgzファイルとしてノードを
ダウンロード
(2) ノード生成
サブフローノードのモジュール化対応
22
開発者
(1) サブフロー
作成
? サブフローノードは、フローを再利用するための機能単位
? サブフローはノードの様に見えるが、実体はJSONデータ
? サブフローをモジュールとして共有できるよう、
Node generatorはパッケージ化する機能を提供
(2) サブフローを通常のノード
モジュールへパッケージング
Node
generator
ノード
開発者はノードをnpmで
共有できるようになる
Node-REDフローエディタ
JSONデータ
サブフロー
サブフロー内のフロー
Web of Things (WoT)対応
23
https://github.com/k-toumura/node-red-nodegen/tree/webofthings
? WoT定義は、デバイス接続のための仕様
? フォーク版Node generatorは、WoT定義を入力データとしてサポート
Node
generator
Service Broker対応
24
Service Broker対応後のノードは、自動的にサービス作成と
認証情報取得、設定を行い、ノード毎の手動設定作業を不要化
[Service Broker対応後]
Cloud
Controller
REST
API
Cloud Foundry
(6) 認証情報を用いてREST APIへアクセス
(4) 認証情報取得
(1) サービス生成(2) サービス作成
(3) 認証情報取得 (5) 認証情報を自動設定
(3) ノードプロパティに
認証情報を設定
(1) クラウドポータルで
REST APIの
サービスを作成
(2) REST APIの
認証情報をコピー
REST API
(4) 認証情報を用いてREST APIへアクセス
[現在の操作]
開発者はノード毎にサービスの作成と
認証情報のコピペ作業が必要
ノードは自動的に
REST API接続に必要な手続きを行う
ノード
ノード
6. Node generatorの使い方
25
$ sudo npm install –g node-red-nodegen
$ node-red-nodegen
Node generatorの使い方
26
? Node generatorのインストール
https://github.com/node-red/node-red-nodegen/wiki/Japanese
? 日本語ドキュメント
Node generatorの開発コミュニティ
2727
機能追加のため、以下のツールを用いてオープンな議論を推進中
? Slack上で開発コミュニティメンバとのリアルタイムの議論
? GitHubのカンバン (projects)で開発ロードマップを共有
Slack GitHub
日立製作所
横井 一仁
Node-REDのノード開発容易化ツール
Node generator
12/8/2018
END
28
Node-REDのノード開発容易化ツールNode generator
Trademarks
30
- IBM, Watson, dashDB, Cloudant, and OpenWhisk are registered trademarks
of International Business Machines Corporation.
- AT&T is a registered trademark of AT&T Inc.
- Fujitsu and COLMINA are registered trademarks of Fujitsu Ltd.
- Microsoft is a registered trademark of Microsoft Corporation.
- NEC and CONNEXIVE are registered trademarks of NEC Corporation.
- GE and Predix are registered trademarks of General Electric Company.
- Intel is a registered trademark of Intel Corporation.
- Samsung is a registered trademark of Samsung C&T Corporation.
- Samsung Artik is a registered trademark of Samsung Electronics Co. Ltd.
- Siemens and SIMATIC are registered trademarks of Siemens Aktiengesellschaft.
- Toshiba is a registered trademark of Toshiba Corporation.
- SPINEX is a registered trademark of Toshiba Digital Solutions Corporation.
- MySQL is a registered trademark of MySQL Aktiebolag.
- MongoDB is a registered trademark of MongoDB Limited.
- Slack is a registered trademark of Slack Technologies, Inc.
- GitHub is a registered trademark of GitHub, Inc.
- Cisco and Meraki are registered trademarks of Cisco Technology, Inc.
- Google is a registered trademark of Google Inc.
References
31
- The number of download from npm repository:
https://npm-stat.com/charts.html?package=node-red&from=2015-02-28&to=2018-02-28
- AT&T, AT&T IoT Platform: https://flow.att.com
- FUJITSU Cloud Service K5 COLMINA Platform ユーザーズガイド:
https://k5-doc.jp-east-1.paas.cloud.global.fujitsu.com/doc/jp/colminapf/document/manual/usersguide.pdf
- IBM Cloud, Node-RED Starter: https://console.bluemix.net/catalog/starters/node-red-starter
- Node-RED node for Azure IoT Hub: https://github.com/Azure/azure-iot-sdk-node/tree/master/device/node-red
- NEC Mobile Backend Platform: https://flows.nodered.org/node/node-red-contrib-nec-baas
- GE Predix Developer Kit: https://software.intel.com/en-us/predix-developer-kit-adding-sensors
- Intel, Intel IoT Gateway:
https://www.intel.com/content/dam/www/public/us/en/documents/solution-briefs/setting-up-to-connect-to-dreamfactory-platform-tutorial.pdf
- NEC, CONNEXIVE IoT Connectivity Engine: http://jpn.nec.com/connexive/ice/feature.html
- Samsung Artik: https://developer.artik.io/documentation/artik/tutorials/node-red.html
- Siemens, SIMATIC IOT2020:
https://w5.siemens.com/italy/web/AD/ProdottieSoluzioni/HomeSCE/SupportoDidattico/PartnerAccordi/Documents/iot2020-flyer-en.pdf
- エッジコンピューティングを実現する 社会インフラ?産業分野向け IoTゲートウェイ装置
https://www.toshiba.co.jp/tech/review/2017/04/72_04pdf/a09.pdf
- Dreamforce2016 Day4:XivelyはIoT導入のカギとなるサービスかも知れない
https://www.terrasky.co.jp/blog/2016/161010_001859.php
- Fujitsu Client Computing Devices Product Facts
https://sp.ts.fujitsu.com/dmsp/Publications/public/br-Facts-Client-Computing-Devices.pdf
- Siemens, MindSphere Visual Flow Creator: https://documentation.mindsphere.io/resources/pdf/visual-flow-creator-en.pdf
- A node to call REST API for FUJITSU Cloud Service K5 IoT Platform
https://flows.nodered.org/node/node-red-contrib-fjiotpfhttp
- Nokia, Nokia Innovation Platform, Node-RED
https://platform.innovation.nokia.com/services.php?service_id=5911efac48d5f4645c849b8c
- Uhuru, enebular: https://enebular.com/
- node-red-contrib-azure: https://github.com/Azure/node-red-contrib-azure
- NEC, SecureWare/Credential Lifecycle Manager: https://jpn.nec.com/secureware/clm/function.html
- FRED, https://fred.sensetecnic.com

More Related Content

Node-REDのノード開発容易化ツール Node generator