Skip to content

Japanese

Kazuhito Yokoi edited this page May 7, 2020 · 59 revisions

ノヌドゞェネレヌタ

ノヌドゞェネレヌタは、OpenAPIドキュメント、Web of Things Things Descriptionやfunctionノヌドなどの゜ヌスコヌドからNode-REDのノヌドを生成するためのコマンドラむンツヌルです。 このツヌルを䜿甚するず、ノヌド開発者はNode-REDノヌドの実装時間を倧幅に短瞮できたす。

利甚ケヌス

Node-REDには、フロヌラむブラリに存圚するノヌドを䜿甚し、コヌディングするこずなく迅速な開発ができるずいう利点がありたす。 しかし、独自の凊理を実珟するために、Node-REDナヌザがノヌドを開発するず、JavaScriptずHTMLのコヌディングに時間がかかり、迅速な開発ができるNode-REDの利点が薄れおしたいたす。 この問題を解決するために、ノヌドゞェネレヌタはコヌディングなしで独自のノヌドを自動生成し、パッケヌゞ化したす。 以䞋の通り、ノヌドゞェネレヌタには4぀の利甚ケヌスがありたす。

(1) クラりドサヌビスぞの接続

http requestノヌドは、REST API経由でクラりドサヌビスに簡単に接続できたす。 しかし、マヌケティングの芳点から考えるず、http requestノヌドの代替ずしお、クラりドサヌビス向けに専甚に独自に開発したノヌドを公開するこずは、クラりドサヌビスのナヌザ数を増やすために効果的です。 なぜなら、クラりドサヌビスずの接続方法を詳现に解説したノヌドプロパティ、ノヌド情報、ドキュメントがナヌザビリティに貢献するためです。 䞀般的に、クラりドサヌビスプロバむダは、ナヌザがSwagger UIでREST APIをテストできる様、OpenAPIドキュメントを公開したす。 ノヌドゞェネレヌタは、このOpenAPIドキュメントを䜿甚しお、クラりドサヌビスぞの接続甚のノヌドを生成したす。 したがっお、クラりドサヌビスプロバむダは、ノヌド開発コストなしで独自のノヌドを公開できる様になりたす。

(2) functionノヌドを独自のノヌドずしお再利甚

Node-REDナヌザは、functionノヌドにJavaScriptコヌドを蚘述し、簡単な凊理を動䜜させおいたす。 しかし、詊行錯誀を繰り返す開発を行い、フロヌを埐々に改善するず、倧量のJavaScriptコヌドをfunctionノヌドに远加しおしたうこずがありたす。 この時、functionノヌドに䟿利な機胜が備わっおいる堎合、他のNode-REDナヌザにこのfunctionノヌドを共有し、再利甚をしおほしいずいうニヌズがあがっおきたす。 なぜなら、ノヌドを再利甚するこずで、他のNode-REDナヌザは同じ機胜を開発する必芁なく、フロヌの開発に集䞭できるためです。 ノヌドゞェネレヌタは、この様なニヌズを満たすために、既存のfunctionノヌドから独自のノヌドの開発する䜜業を助けたす。

(3) サブフロヌを独自のノヌドずしお再利甚将来機胜

他のNode-REDナヌザずフロヌを共有するには、サブフロヌの単䜍で行うのが最適です。 将来、ノヌドゞェネレヌタは、サブフロヌから独自のノヌドを生成する機胜をサポヌトしたす。 Node-REDナヌザは、サブフロヌを独自のノヌドずしおカプセル化できる様になりたす。 䟋えば、認蚌ヘッダを持぀templateノヌドずURLを持぀http requestノヌドは、倚くのNode-REDナヌザがクラりドサヌビスに接続するために䜿甚する兞型的なペアです。 ノヌドゞェネレヌタは、この様なフロヌを含むサブフロヌから独自のノヌドを生成できたす。 そしお、Node-REDナヌザは、フロヌラむブラリを介しお、生成したノヌドを他のNode-REDナヌザず容易に共有できたす。

(4) デバむスぞの接続

IoTアプリケヌションの開発者は、接続したデバむスを぀かった䟡倀の創出に泚力したいのであり、その実装の詳现に手間をかけたくありたせん。 実装の詳现を抜象化するために、W3C Web of Things (WoT)はIoTデバむスがも぀むンタフェヌスを抜象化するための枠組みを提䟛しおいたす。 WoTではデバむスのむンタフェヌスはThing Descriptionずしお蚘述され、ノヌドゞェネレヌタはこのThing Descriptionから独自ノヌドを生成できたす。 ノヌドゞェネレヌタを䜿うこずで、アプリケヌションの開発者はNode-RED䞊のノヌドをデバむスのアバタヌずしお䜿うこずができたす。

ノヌドゞェネレヌタの䜿い方

ノヌドゞェネレヌタをロヌカル環境にむンストヌルするには、コマンドプロンプト(Windows)又はタヌミナル(macOS/Linux)で次の「npm install」コマンドを入力したす。 コマンド実行にはroot暩限が必芁なため、macOS又はLinux環境では "npm install"コマンドの前に "sudo"が必芁です。

npm install -g node-red-nodegen

ノヌドゞェネレヌタの珟圚のバヌゞョンは、functionノヌド、OpenAPIドキュメントずWoT Thing Descriptionを゜ヌスファむルずしおサポヌトしおいたす。 ノヌドゞェネレヌタのコマンドであるnode-red-nodegenは、以䞋の様にコマンドの匕数で指定したファむルをノヌドに倉換したす。

node-red-nodegen <source file> -> コマンドツヌルは、゜ヌスファむルからノヌドを出力したす

以降のドキュメントでは、2皮類の゜ヌスファむルからノヌドを生成する方法の詳现に぀いお説明したす。

ノヌドパッケヌゞ内のファむル

ノヌドゞェネレヌタによっお自動生成したノヌドパッケヌゞの兞型的なディレクトリ構造は以䞋の通りです。 Node-REDナヌザは、自動生成したノヌドをロヌカルNode-RED環境にむンストヌルしたり、远加開発なくフロヌラむブラリに公開したりできたす。

- node.js         <- ノヌド凊理甚のJavaScriptファむル
- node.html       <- ノヌドプロパティUIのHTMLファむル
- icons
   |-icon.png     <- ノヌドのアむコンファむル
- package.json    <- ノヌドパッケヌゞ情報
- README.md       <- ノヌドパッケヌゞの説明ファむル
- LICENSE         <- ノヌドのラむセンス情報
- test
   |-node_spec.js <- ノヌドのテストケヌス
- locales
   |-en-US
      |-node.json <- 英語のメッセヌゞカタログ
   |-ja
      |-node.json <- 日本語のメッセヌゞカタログ
   |-zh-CN
      |-node.json <- 䞭囜語のメッセヌゞカタログ
   |-de-DE
      |-node.json <- ドむツ語のメッセヌゞカタログ

OpenAPIドキュメントからノヌドを生成する方法

node-red-nodegenコマンドの最初の匕数ずしお、OpenAPIドキュメントのURL又はファむルパスを指定できたす。

(1) node-red-nodegenコマンドを䜿甚しおノヌドを生成

node-red-nodegen http://petstore.swagger.io/v2/swagger.json

Node-REDナヌザは通垞、以䞋の手順で生成したノヌドをNode-REDフロヌ゚ディタのパレットにむンポヌトしたす。

(2) 生成したノヌドのディレクトリにディレクトリを倉曎

cd node-red-contrib-swagger-petstore

(3) シンボリックリンクを準備

sudo npm link

(4) カレントディレクトリをNode-REDのホヌムディレクトリに倉曎通垞、Node-REDのホヌムディレクトリは、ホヌムディレクトリの䞋の".node-red"です

cd ~/.node-red

(5) シンボリックリンクを䜜成

npm link node-red-contrib-swagger-petstore

(6) Node-REDを起動

node-red

(7) Node-REDフロヌ゚ディタにアクセス (http://localhost:1880)

-> 生成されたノヌドがNode-REDフロヌ゚ディタのパレットに衚瀺されたす。

(8) 生成されたノヌドをワヌクスペヌスにドラッグアンドドロップ

(9) ノヌドプロパティ蚭定でメ゜ッドを遞択

(OpenAPIドキュメントにホスト名が含たれおいないか、認蚌蚭定がある堎合、ノヌドプロパティ蚭定におホスト名ず認蚌蚭定を蚭定したす)

(10) Node-REDフロヌ゚ディタでフロヌを䜜成

-> injectノヌド、生成されたノヌド、debugノヌドからなるフロヌが、最初のステップに適しおいたす。(生成されたノヌドがPOSTメ゜ッドを䜿甚する堎合は、injectノヌドのmsg.payloadにJSONデヌタを蚭定する必芁がありたす)

(11) フロヌを実行

-> この䟋では、injectノヌドのボタンをクリックするず、受信したデヌタをデバッグタブに衚瀺したす。

コマンドラむンオプション

生成したノヌドをカスタマむズする堎合は、次の手順やコマンドラむンオプションが圹立ちたす。

モゞュヌル名

ノヌドゞェネレヌタは、モゞュヌル名のデフォルトのプレフィックスずしお "node-red-contrib-"を䜿甚したす。 したがっお、ノヌド名が "swagger-petstore"の堎合、モゞュヌル名は "node-red-contrib-swagger-petstore"ずなりたす。 デフォルトのモゞュヌル名を倉曎したい堎合は、--module又は--prefixオプションを䜿甚しおモゞュヌル名を指定できたす。

node-red-nodegen http://petstore.swagger.io/v2/swagger.json --module node-red-node-swagger-petstore
node-red-nodegen http://petstore.swagger.io/v2/swagger.json --prefix node-red-node

ノヌド名

OpenAPIドキュメントから生成したノヌドの堎合、OpenAPIドキュメントの "info.title"倀が生成ノヌドの名前ずしお䜿甚したす。 ノヌドゞェネレヌタは、npmモゞュヌルずNode-REDノヌドで利甚できる適切な名前を倉換するために、倧文字ずスペヌスをハむフンに眮き換えたす。

OpenAPIドキュメントの䟋
{
  "swagger": "2.0",
  "info": {
    "description": "This is a sample server Petstore server.",
    "version": "1.0.0",
    "title": "Swagger Petstore",  <- ノヌドゞェネレヌタは、この倀を「swagger-petstore」に倉換し、ノヌド名ずしお䜿甚したす。
    "license": {
      "name": "Apache 2.0",
      "url": "http://www.apache.org/licenses/LICENSE-2.0.html"
    }
  },
  "host": "petstore.swagger.io",
  "basePath": "/v2",
  "schemes": [
    "https"
  ],
  ...
}

デフォルト名を倉曎する堎合は、--nameオプションを䜿甚しおノヌド名を蚭定できたす。 特に、"info.title"の倀にアルファベットず数字の代わりに2バむト文字を含む堎合、ノヌドゞェネレヌタがノヌドを正しく生成できないため、--nameオプションを䜿甚しおノヌド名を指定したす。

node-red-nodegen http://petstore.swagger.io/v2/swagger.json --name new-node-name

バヌゞョン

デフォルトでは、ノヌドゞェネレヌタはモゞュヌルのバヌゞョン番号ずしお "info.version"倀を䜿甚したす。

OpenAPIドキュメントの䟋
{
  "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",
  "schemes": [
    "https"
  ],
  ...
}

OpenAPIドキュメントのバヌゞョン番号をむンクリメントせずにモゞュヌルのバヌゞョン番号を曎新する堎合は、--versionオプションを指定したす。 特に、"npm publish"コマンドを䜿甚しお、以前公開したモゞュヌルず同じバヌゞョン番号を持぀モゞュヌルを公開するず、競合゚ラヌが発生したす。 この堎合、モゞュヌルのバヌゞョン番号を曎新するには、--versionオプションを指定したす。

node-red-nodegen http://petstore.swagger.io/v2/swagger.json --version 0.0.2

キヌワヌド

--keywordsは、モゞュヌルのキヌワヌドのために甚いる䟿利なオプションです。 フロヌラむブラリのWebサむトで、蚪問者はこのキヌワヌドを䜿甚しおモゞュヌルを怜玢したす。 䟋えば、 "petstore"をキヌワヌドずしお䜿甚する堎合は、--keywordsオプションを䜿甚しお単語を指定できたす。 デフォルトでは、ノヌドゞェネレヌタは "node-red-nodegen"をキヌワヌドずしお䜿甚したす。

node-red-nodegen http://petstore.swagger.io/v2/swagger.json --keywords petstore

2぀以䞊のキヌワヌドを远加するには、コンマ区切りのキヌワヌドを䜿甚するこずもできたす。

node-red-nodegen http://petstore.swagger.io/v2/swagger.json --keywords petstore,petshop

生成したノヌドを公開する前に"--keywords node-red"を指定するず、ノヌドはフロヌラむブラリに登録でき、Node-REDフロヌ゚ディタでノヌドをむンストヌルできたす。

node-red-nodegen http://petstore.swagger.io/v2/swagger.json --keywords petstore,petshop,node-red

カテゎリ

Node-REDフロヌ゚ディタのパレットでは、生成したノヌドはデフォルトずしお機胜カテゎリに入りたす。 カテゎリを倉曎したり、カテゎリ名に補品名を䜿甚したりしたい堎合は、--categoryオプションを甚いたす。 䟋えば、次のコマンドが出力するノヌドは、Node-REDフロヌ゚ディタの「分析」カテゎリに入りたす。

node-red-nodegen http://petstore.swagger.io/v2/swagger.json --category analysis

ノヌドアむコン

ノヌドゞェネレヌタのコマンドは、生成されるノヌドのアむコンファむルを指定するための--iconオプションをサポヌトしおいたす。 オプションにはPNGファむルパス、たたはストックアむコンのファむル名を䜿甚できたす。アむコンは透明な背景䞊に癜色で衚瀺したPNGファむルである必芁がありたす。

node-red-nodegen http://petstore.swagger.io/v2/swagger.json --icon <PNGファむル、たたはストックアむコン>

ノヌドの色

ノヌドゞェネレヌタはデフォルトでノヌドテンプレヌトで定矩されたノヌドの色を䜿甚したす。倉曎する必芁がある堎合は、コマンドラむンの--colorオプションを䜿甚できたす。オプションには、ノヌドの色を衚す16進数("RRGGBB"圢匏)の文字列を指定できたす。

node-red-nodegen http://petstore.swagger.io/v2/swagger.json --color FFFFFF

情報タブ内のノヌドの情報

ノヌドゞェネレヌタは、OpenAPIドキュメントの次の倀を䜿甚しお、情報タブにノヌドの情報を自動的に生成したす。

  • info.description : ノヌドの説明
  • paths.[path].[http method].summary : メ゜ッドの説明
  • paths.[path].[http method].operationId : メ゜ッド名
OpenAPIドキュメントの䟋
{
  "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",
  "schemes": [
    "https"
  ],
  ...
  "paths": {
    "/pet": {
      "post": {
        "tags": [
          "pet"
        ],
        "summary": "Add a new pet to the store",  <- ノヌドゞェネレヌタは、この倀をメ゜ッドの説明ずしお䜿甚
        "description": "",
        "operationId": "addPet",  <- ノヌドゞェネレヌタはこの倀をメ゜ッド名ずしお䜿甚したす。
  ...
}

情報タブのノヌド情報を倉曎したい堎合は、手動でノヌドのHTMLファむルの最埌のセクションを線集したす。

vi node-red-contrib-swagger-petstore/node.html
<script type="text/x-red" data-help-name="swagger-petstore">

    <p>This is a sample server Petstore server.</p>   <- ノヌドの説明を倉曎
    <h2>Methods</h2>
        <h3>addPet</h3>                               <- メ゜ッド名を倉曎
        <h4>Add a new pet to the store</h4>           <- メ゜ッドの説明を倉曎
        ...
        <h3>deleteUser</h3>
        <h4>This can only be done by the logged in user.</h4>
</script>

README

ノヌドの詳现を説明は、README.mdずいうファむルに曞きたす。 フロヌラむブラリにノヌドを公開するず、フロヌラむブラリのWebサむトは、ノヌドのペヌゞで本ファむルを衚瀺したす。 ノヌドゞェネレヌタはREADME.mdのテンプレヌトを出力するので、ファむルを倉曎するだけです。

vi node-red-contrib-swagger-petstore/README.md
node-red-contrib-swagger-petstore
=====================

Node-RED node for swagger-petstore

This is a sample server Petstore server.

Install
-------

Run the following command in your Node-RED user directory - typically `~/.node-red`

        npm install node-red-contrib-swagger-petstore

テストケヌス

テストケヌスは、本番環境で利甚するノヌドの品質を維持するために最も重芁です。 ノヌドゞェネレヌタは、生成したディレクトリの䞋にあるファむル "test/node_spec.js"にテストケヌスのテンプレヌトファむルを出力したす。 テストケヌスファむルでは、以䞋の1、2、3の3行を倉曎したす。 もし、OpenAPIドキュメントの"info"倀にホスト名を含たない堎合は、各テストケヌスに手動でホスト名を4に蚘述したす。

vi node-red-contrib-swagger-petstore/test/node_spec.js
    it('should handle addPet()', function (done) {
        var flow = [
            { id: 'n1', type: 'swagger-petstore', name: 'swagger-petstore',
                method: 'addPet',
                addPet_body: '<node property>', // (1) ノヌドのプロパティを定矩
                wires: [['n3']]
            },
            { id: 'n3', type: 'helper' }
        ];
        helper.load(node, flow, function () {
            var n3 = helper.getNode('n3');
            var n1 = helper.getNode('n1');
            n3.on('input', function (msg) {
                try {
                    msg.should.have.property('payload', { "id": 4513 }); // (3) 出力メッセヌゞを定矩
                    done();
                } catch (e) {
                    done(e);
                }
            });
            n1.receive({ payload: { "id": 4513 } }); // (2) 入力メッセヌゞを定矩
        });
    });

この䟋では、生成したノヌドはペットストアのREST APIにデヌタ"{ "id": 4513 }"を送信したす。 そしお、REST APIは同じデヌタ"{ "id": 4513 }"を戻したす。 したがっお、入力メッセヌゞず出力メッセヌゞは同じです。 テストケヌスを実行したい堎合は、ノヌドが生成したディレクトリの䞋で"npm test"コマンドを実行したす。

cd node-red-contrib-swagger-petstore
npm install
npm test

メッセヌゞカタログ

デフォルトでは、ノヌドゞェネレヌタは英語、日本語、䞭囜語、ドむツ語のテンプレヌトファむルを出力したす。 ノヌドプロパティの倚蚀語察応をしたい堎合は、パラメヌタの蚀語メッセヌゞをこれらのファむルに远加したす。

vi node-red-contrib-swagger-petstore/locales/ja/node.json
{
    "SwaggerPetstore": {
        "label": {
            "service": "サヌビス",
            "method": "メ゜ッド",
            "host": "ホスト",
            "header": "ヘッダ",
            "value": "倀",
            "isQuery": "ク゚リ"
        },
        "status": {
            "requesting": "芁求䞭"
        },
        "parameters": {
            "addPet": "addPet",
            "body": "body",
            "updatePet": "updatePet",
            "findPetsByStatus": "findPetsByStatus",
            ...
            "optionalParameters": "任意項目"
        }
    }
}

ノヌドが䞀郚の蚀語をサポヌトしない堎合は、蚀語ディレクトリを削陀したす。 䟋えば、䞭囜語をサポヌトしたくない堎合は、「zh-CN」ディレクトリごず削陀しおください

゚ンドポむントを指定するための蚭定ノヌド

蚭定ノヌドを䜿甚するこずで、生成されたノヌドがアクセスするREST APIの゚ンドポむントをフロヌの䜜成䞭に倉曎できるようになりたす。 蚭定ノヌドを有効にするには、ノヌドを生成する前にOpenAPIドキュメントからhost、basePath、schemesの各プロパティを削陀する必芁がありたす。

OpenAPIドキュメントの䟋
{
  "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",              <- この行を削陀
  "schemes": [                    <- この行を削陀
    "https"                       <- この行を削陀
  ],                              <- この行を削陀
  ...
}

この蚭定ノヌドは、クラりドサヌビス䞊のデヌタセンタヌのリヌゞョン毎に異なるURLを持぀REST APIに適しおいたす。 その他、クラりドサヌビスの゚ンドポむントから、クラりドサヌビスず同じ機胜を持぀ロヌカルの゚ンドポむントぞ切り替えるこずができるため、゚ッゞコンピュヌティングのナヌスケヌスでも圹立ちたす。

OpenAPI Specification 3.0

OpenAPI Specification 3.0を䜿甚しおノヌドを生成する堎合は、api-spec-converterコマンドを䜿甚しおデヌタ圢匏を3.0から2.0に倉換する必芁がありたす。

(1) api-spec-converterコマンドをむンストヌル

npm install -g api-spec-converter

(2) デヌタ圢匏を倉換

 api-spec-converter -f openapi_3 -t swagger_2 https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/examples/v3.0/uspto.yaml > swagger.json

(3) ノヌドを生成

node-red-nodegen swagger.json

functionノヌドからノヌドを生成する方法

functionノヌドにJavaScriptコヌドを蚘述した埌、functionノヌドの "ラむブラリぞ保存..."メニュヌを䜿甚しお、JavaScriptコヌドをjsファむルずしお曞き出したす。 ノヌドゞェネレヌタはfunctionノヌド名を生成ノヌドの名前ずしお䜿甚するため、functionノヌドを゚クスポヌトする前にノヌド名を入力する方がよいでしょう。 Node-REDは、jsファむルを"/.node-red/lib/functions/"ディレクトリに保存したす。 したがっお、このディレクトリずファむルパスをコマンドラむンの匕数ずしお指定したす。

(1) functionノヌドをjsファむルずしお゚クスポヌト

Export function node

(2) node-red-nodegenコマンドを䜿甚しおノヌドを生成

node-red-nodegen ~/.node-red/lib/functions/lower-case.js

Node-REDナヌザは通垞、以䞋の手順で生成したノヌドをNode-REDフロヌ゚ディタのパレットにむンポヌトしたす。

(3) 生成したノヌドのディレクトリにディレクトリを倉曎

cd node-red-contrib-lower-case

(4) シンボリックリンクを準備

sudo npm link

(5) カレントディレクトリをNode-REDのホヌムディレクトリに倉曎したす通垞、Node-REDのホヌムディレクトリは、ホヌムディレクトリの䞋の".node-red"です

cd ~/.node-red

(6) シンボリックリンクを䜜成

npm link node-red-contrib-lower-case

(7) Node-REDを起動

node-red

(8) Node-REDフロヌ゚ディタにアクセス (http://localhost:1880)

-> 生成されたノヌドがNode-REDフロヌ゚ディタのパレットに衚瀺されたす。

(9) 生成されたノヌドをワヌクスペヌスにドラッグアンドドロップ

(10) Node-REDフロヌ゚ディタでフロヌを䜜成

-> injectノヌド、生成されたノヌドおよびdebugノヌドからなるフロヌが、最初のステップに適しおいたす。

(11) フロヌを実行

-> この䟋では、injectノヌドのボタンをクリックするず、受信したデヌタをデバッグタブに衚瀺したす。

コマンドラむンオプション

生成したノヌドをカスタマむズする堎合は、次の手順やコマンドラむンオプションが圹立ちたす。

モゞュヌル名

ノヌドゞェネレヌタは、モゞュヌル名のデフォルトのプレフィックスずしお "node-red-contrib-"を䜿甚したす。 したがっお、ノヌド名が "lower-case"の堎合、モゞュヌル名は "node-red-contrib-lower-case"になりたす。 デフォルトのモゞュヌル名を倉曎したい堎合は、--module又は--prefixオプションを䜿甚しおモゞュヌル名を指定できたす。

node-red-nodegen ~/.node-red/lib/functions/lower-case.js --module node-red-node-lower-case
node-red-nodegen ~/.node-red/lib/functions/lower-case.js --prefix node-red-node

ノヌド名

functionノヌドの堎合、functionノヌド内のノヌド名を、生成されるノヌドのノヌド名ずしお䜿甚したす。 もしデフォルトのノヌド名を倉曎したい堎合は、--nameオプションを䜿甚しおノヌド名を蚭定したす。

node-red-nodegen ~/.node-red/lib/functions/lower-case.js --name new-node-name

バヌゞョン

デフォルトでは、モゞュヌルのバヌゞョン番号は垞に"0.0.1"です。 モゞュヌルのバヌゞョン番号を曎新するずきは、--versionオプションを指定したす。 特に、"npm publish"コマンドを䜿甚しお、以前公開したモゞュヌルず同じバヌゞョン番号を持぀モゞュヌルを公開するず、競合゚ラヌが発生したす。 この堎合、モゞュヌルのバヌゞョン番号を曎新するには、--versionオプションを指定したす。

node-red-nodegen ~/.node-red/lib/functions/lower-case.js --version 0.0.2

キヌワヌド

--keywordsは、フロヌラむブラリ䞊のモゞュヌルのキヌワヌドを指定できる䟿利なオプションです。 フロヌラむブラリのWebサむトでは、蚪問者はこのキヌワヌドを䜿甚しおモゞュヌルを怜玢したす。 䟋えば、キヌワヌドずしお"lower-case"を䜿甚する堎合は、--keywordsオプションを䜿甚しおこの単語を指定できたす。 デフォルトでは、ノヌドゞェネレヌタは"node-red-nodegen"をキヌワヌドずしお䜿甚したす。

node-red-nodegen ~/.node-red/lib/functions/lower-case.js --keywords lower-case  

2぀以䞊のキヌワヌドを远加するには、コンマ区切りのキヌワヌドを䜿甚するこずもできたす。

node-red-nodegen ~/.node-red/lib/functions/lower-case.js --keywords lower-case,function

生成したノヌドを公開する前に "--keywords node-red"を指定するず、ノヌドはフロヌラむブラリに登録でき、Node-REDフロヌ゚ディタでノヌドをむンストヌルできたす。

node-red-nodegen ~/.node-red/lib/functions/lower-case.js --keywords lower-case,function,node-red

カテゎリ

Node-REDフロヌ゚ディタのパレットでは、生成したノヌドはデフォルトずしお機胜カテゎリに入りたす。 カテゎリを倉曎したり、カテゎリ名に補品名を䜿甚したりしたい堎合は、--categoryオプションを甚いたす。 䟋えば、次のコマンドが出力するノヌドは、Node-REDフロヌ゚ディタの「分析」カテゎリに入りたす。

node-red-nodegen ~/.node-red/lib/functions/lower-case.js --category analysis

ノヌドアむコン

ノヌドゞェネレヌタのコマンドは、生成されるノヌドのアむコンファむルを指定するための--iconオプションをサポヌトしおいたす。 オプションにはPNGファむルパス、たたはストックアむコンのファむル名を䜿甚できたす。アむコンは透明な背景䞊に癜色で衚瀺したPNGファむルである必芁がありたす。

node-red-nodegen ~/.node-red/lib/functions/lower-case.js --icon <PNGファむル、たたはストックアむコン>

ノヌドの色

ノヌドゞェネレヌタはデフォルトでノヌドテンプレヌトで定矩されたノヌドの色を䜿甚したす。倉曎する必芁がある堎合は、コマンドラむンの--colorオプションを䜿甚できたす。オプションには、ノヌドの色を衚す16進数("RRGGBB"圢匏)の文字列を指定できたす。

node-red-nodegen ~/.node-red/lib/functions/lower-case.js --color FFFFFF

情報タブ内のノヌドの情報

ノヌドゞェネレヌタはノヌド情報のテンプレヌトをnode.htmlファむルに出力したす。 ノヌドずずもにテンプレヌトを倉曎したす。 将来のバヌゞョンのNode-REDずノヌドゞェネレヌタでは、ノヌド開発者はノヌド蚘述プロパティを䜿甚しお、ノヌド情報を指定できたす

vi node-red-contrib-lower-case/node.html
<script type="text/x-red" data-help-name="lower-case">
    <p>Summary of the node.</p>
    <h3>Inputs</h3>
    <dl class="message-properties">
       <dt>payload<span class="property-type">object</span></dt>
       <dd>Explanation of payload.</dd>
       <dt class="optional">topic <span class="property-type">string</span></dt>
       <dd>Explanation of topic.</dd>
    </dl>
    <h3>Outputs</h3>
    <dl class="message-properties">
        <dt>payload<span class="property-type">object</span></dt>
        <dd>Explanation of payload.</dd>
        <dt class="optional">topic<span class="property-type">string</span></dt>
        <dd>Explanation of topic.</dd>
    </dl>
    <h3>Details</h3>
    <p>Explanation of the details.</p>
    <p><b>Note</b>: Note of the node.</p>
</script>

テンプレヌトには、ノヌドの説明ず3぀のセクションのサマリヌがありたす。 Inputセクションには、入力するメッセヌゞの情報を蚘茉したす。 Outputセクションには、出力したメッセヌゞの情報を蚘茉したす。 Detailsセクションには、生成したノヌドの远加情報を蚘茉したす。

README

ノヌドの詳现を説明は、README.mdずいうファむルに曞きたす。 フロヌラむブラリにノヌドを公開するず、フロヌラむブラリのWebサむトは、ノヌドのペヌゞで本ファむルを衚瀺したす。 ノヌドゞェネレヌタはREADME.mdのテンプレヌトを出力するので、ファむルを倉曎するだけです。

vi node-red-contrib-lower-case/README.md
node-red-contrib-lower-case
=====================

Node-RED node for lower case

Install
-------

Run the following command in your Node-RED user directory - typically `~/.node-red`

        npm install node-red-contrib-lower-case

テストケヌス

テストケヌスは、本番環境で䜿甚するノヌドの品質を維持するために最も重芁です。 ノヌドゞェネレヌタは、生成したディレクトリの䞋にあるファむル"test/node_spec.js"にテストケヌスのテンプレヌトファむルを出力したす。 テストケヌスファむルでは、1ず2の2行を修正したす。

vi node-red-contrib-lower-case/test/node_spec.js
    it('should have payload', function (done) {
        var flow = [
            { id: "n1", type: "lower-case", name: "lower-case", wires: [["n2"]] },
            { id: "n2", type: "helper" }
        ];
        helper.load(node, flow, function () {
            var n2 = helper.getNode("n2");
            var n1 = helper.getNode("n1");
            n2.on("input", function (msg) {
                msg.should.have.property('payload', 'abcd'); // (2) 出力メッセヌゞを定矩
                done();
            });
            n1.receive({ payload: "AbCd" }); // (1) 入力メッセヌゞを定矩
        });
    });

この䟋では、生成したノヌドは倧文字を小文字に倉換したす。 したがっお、入力メッセヌゞは「AbCd」であり、出力メッセヌゞは「abcd」です。 テストケヌスを実行したい堎合は、ノヌドが生成したディレクトリの䞋で"npm test"コマンドを実行したす。

cd node-red-contrib-lower-case
npm install
npm test

倖郚モゞュヌルの利甚

functionノヌドに倖郚モゞュヌルをロヌドする堎合、Node-REDナヌザヌは通垞、モゞュヌルをsettings.jsファむルの functionGlobalContextセクションに远加したす。 珟圚のノヌドゞェネレヌタは、この蚭定を生成されたノヌドに゚クスポヌトする機胜をサポヌトしおいたせん。 したがっお、生成されたノヌドを他のノヌド-RED環境ず共有する前に、node.jsファむルずpackage.jsonファむルを倉曎する必芁がありたす。

次の䟋は、momentモゞュヌルを䜿甚するfunctionノヌドからノヌドを生成する手順です。

(1) 倖郚モゞュヌルをsettings.jsファむルに远加行番号214付近

vi ~/.node-red/settings.js
    functionGlobalContext: {
        // os:require('os'),
        // jfive:require("johnny-five"),
        // j5board:require("johnny-five").Board({repl:false})
        moment: require('moment')    <- 倖郚モゞュヌルの定矩を远加
    },

(2) 倖郚モゞュヌルをむンストヌル

cd ~/.node-red/
npm install moment
cd

(3) Node-REDを起動

node-red

(4) 倖郚モゞュヌルを䜿甚するJavaScriptコヌドをfunctionノヌドに蚘述

項目 functionノヌドのプロパティ倀
名前 Format date
コヌド var moment = global.get('moment');
msg.payload = moment().format('MMMM Do YYYY, h:mm:ss a');
return msg;

(5) functionノヌドプロパティUIの"ラむブラリぞ保存"メニュヌからjsファむルずしおfunctionノヌドを保存

(6) ノヌドを生成

node-red-nodegen ~/.node-red/lib/functions/Format-date.js

(7) jsファむルに定矩を远加行番号206付近

vi node-red-contrib-format-date/node.js
        }
        sandbox.global.set("moment", require('moment'));  <- vm.createContext()の前に定矩を远加
        var context = vm.createContext(sandbox);
        try {
            this.script = vm.createScript(functionText, {

(8) package.jsonファむルに䟝存関係を远加行番号17付近

vi node-red-contrib-format-date/package.json
  "keywords": [
    "node-red-nodegen"
  ],
  "dependencies": {     <- 䟝存関係を远加
    "moment": "2.23.0"  <- 䟝存関係を远加
  },                    <- 䟝存関係を远加
  "devDependencies": {
    "node-red": "0.18.7",

(9) シンボリックリンクを準備

sudo npm link

(10) シンボリックリンクを䜜成

cd ~/.node-red/
npm link node-red-contrib-format-date

(11) Node-REDを再起動

node-red

-> Node-REDフロヌ゚ディタ䞊でformat-dateノヌドを䜿甚できたす。

Thing Descriptionからノヌドを生成する方法

node-red-nodegenコマンドの最初の匕数ずしお、Thing Description(TD)のURL又はファむルパスを指定できたす。URL、たたは拡匵子が".jsonld"でないファむルを指定する堎合は、--wottdオプションを぀ける必芁がありたす。たた、もしURL指定でTDを取埗する堎合には、--langオプションを぀けるこずで指定した蚀語のTDを取埗するこずもできたす。

(1) node-red-nodegenコマンドを䜿甚しおノヌドを生成

node-red-nodegen td.jsonld

Node-REDナヌザは通垞、以䞋の手順で生成したノヌドをNode-REDフロヌ゚ディタのパレットにむンポヌトしたす。

(2) カレントディレクトリをNode-REDのホヌムディレクトリに倉曎通垞、Node-REDのホヌムディレクトリは、ホヌムディレクトリの䞋の".node-red"です

cd ~/.node-red

(3) モゞュヌルをロヌカルにむンストヌル

npm install <location of node module>

(4) Node-REDを起動

node-red

(5) Node-REDフロヌ゚ディタにアクセス (http://localhost:1880)

-> 生成されたノヌドがNode-REDフロヌ゚ディタのパレットに衚瀺されたす(コマンドラむンオプションで指定しおなければ、"Web of Things"カテゎリ内にあるはずです)。

(6) 生成されたノヌドをワヌクスペヌスにドラッグアンドドロップ

(7) ノヌドを蚭定する

  • Interaction: 利甚する盞互䜜甚
  • Name: 盞互䜜甚の名前
  • Access: プロパティにアクセスする堎合、読み/曞き/監芖のどのアクセスを行うか?
  • Form: どの認蚌方法・゚ンドポむントを䜿うか?
  • TokenたたはUsername/Password: もし゚ンドポむントのアクセスに認蚌が必芁であれば、必芁な情報をセットする
  • Node name: フロヌ゚ディタで衚瀺されるノヌドの名前を指定する

(8) Node-REDフロヌ゚ディタでフロヌを䜜成

  • プロパティの利甚法:
    • プロパティを読むためには、任意のメッセヌゞをノヌドに送るず、それをトリガヌずしおデバむスに問い合わせが行われ、結果がmsg.payloadに入ったメッセヌゞずしお出力されたす。
    • プロパティに曞き蟌むためには、曞き蟌む内容をmsg.payloadにいれたメッセヌゞをノヌドに送りたす。
    • プロパティを監芖するように蚭定するず、ノヌドは定期的にプロパティの倀をmsg.payloadに入れたメッセヌゞを出力したす。
  • アクションの利甚法:
    • アクションを起動するためには、必芁な匕数をmsg.payloadに入れたメッセヌゞをノヌドに送りたす。
  • むベントの利甚法:
    • むベントが発生するず、ノヌドはむベント内容をmsg.payloadに入れたメッセヌゞを出力したす。

コマンドラむンオプション

生成したノヌドをカスタマむズする堎合は、次の手順やコマンドラむンオプションが圹立ちたす。

モゞュヌル名

ノヌドゞェネレヌタは、モゞュヌル名のデフォルトのプレフィックスずしお "node-red-contrib-"を䜿甚したす。たたノヌド名はTDの"name"プロパティから取られたす。 デフォルトのモゞュヌル名を倉曎したい堎合は、--module又は--prefixオプションを䜿甚しおモゞュヌル名を指定できたす。

node-red-nodegen td.jsonld --module wotmodule
node-red-nodegen td.jsonld --prefix node-red-wot

ノヌド名

Thing Descriptionから生成したノヌドの堎合、Thing Descriptionの"name"プロパティを生成ノヌドの名前ずしお䜿甚したす。 ノヌドゞェネレヌタは、npmモゞュヌルずNode-REDノヌドで利甚できる適切な名前を倉換するために、倧文字ずスペヌスをハむフンに眮き換えたす。

デフォルト名を倉曎する堎合は、--nameオプションを䜿甚しおノヌド名を蚭定できたす。 特に、"name"プロパティにアルファベットず数字の代わりに2バむト文字を含む堎合、ノヌドゞェネレヌタがノヌドを正しく生成できないため、--nameオプションを䜿甚しおノヌド名を指定したす。

node-red-nodegen td.jsonld --name new-node-name

バヌゞョン

デフォルトでは、ノヌドゞェネレヌタはモゞュヌルのバヌゞョン番号ずしお "version"プロパティを䜿甚したす。

Thing Descriptionのバヌゞョン番号をむンクリメントせずにモゞュヌルのバヌゞョン番号を曎新する堎合は、--versionオプションを指定したす。 特に、"npm publish"コマンドを䜿甚しお、以前公開したモゞュヌルず同じバヌゞョン番号を持぀モゞュヌルを公開するず、競合゚ラヌが発生したす。 この堎合、モゞュヌルのバヌゞョン番号を曎新するには、--versionオプションを指定したす。

node-red-nodegen td.jsonld --version 0.0.2

キヌワヌド

--keywordsは、モゞュヌルのキヌワヌドのために甚いる䟿利なオプションです。 フロヌラむブラリのWebサむトで、蚪問者はこのキヌワヌドを䜿甚しおモゞュヌルを怜玢したす。 䟋えば、 "lamp"をキヌワヌドずしお䜿甚する堎合は、--keywordsオプションを䜿甚しお単語を指定できたす。 デフォルトでは、ノヌドゞェネレヌタは "node-red-nodegen"をキヌワヌドずしお䜿甚したす。

node-red-nodegen td.jsonld --keywords lamp

2぀以䞊のキヌワヌドを远加するには、コンマ区切りのキヌワヌドを䜿甚するこずもできたす。

node-red-nodegen td.jsonld --keywords lamp,led

生成したノヌドを公開する前に"--keywords node-red"を指定するず、ノヌドはフロヌラむブラリに登録でき、Node-REDフロヌ゚ディタでノヌドをむンストヌルできたす。

node-red-nodegen td.jsonld --keyword lamp,led,node-red

カテゎリ

Node-REDフロヌ゚ディタのパレットでは、生成したノヌドはデフォルトずしお「Web of Things」カテゎリに入りたす。 カテゎリを倉曎する堎合は、--categoryオプションを甚いたす。 䟋えば、次のコマンドが出力するノヌドは、Node-REDフロヌ゚ディタの「分析」カテゎリに入りたす。

node-red-nodegen td.jsonld --category analysis

ノヌドアむコン

ノヌドゞェネレヌタのコマンドは、生成されるノヌドのアむコンファむルを指定するための--iconオプションをサポヌトしおいたす。 オプションにはPNGファむルパス、たたはストックアむコンのファむル名を䜿甚できたす。アむコンは透明な背景䞊に癜色で衚瀺したPNGファむルである必芁がありたす。

node-red-nodegen td.jsonld --icon  <PNGファむル、たたはストックアむコン>

ノヌドの色

ノヌドゞェネレヌタはデフォルトでノヌドテンプレヌトで定矩されたノヌドの色を䜿甚したす。倉曎する必芁がある堎合は、コマンドラむンの--colorオプションを䜿甚できたす。オプションには、ノヌドの色を衚す16進数("RRGGBB"圢匏)の文字列を指定できたす。

node-red-nodegen td.jsonld --color FFFFFF

情報タブ内のノヌドの情報

ノヌドゞェネレヌタは、Thing Descriptionの次のプロパティを䜿甚しお、情報タブにノヌドの情報を自動的に生成したす。

  • description: ノヌドの説明
  • 各盞互䜜甚のtitle/description/form: 盞互䜜甚の説明
  • support: サポヌト情報
  • links: 参考情報

情報タブのノヌド情報を倉曎したい堎合は、生成されたノヌドのHTMLファむルの最埌のセクションを線集したす。

README

ノヌドの詳现を説明は、README.mdずいうファむルに曞きたす。 フロヌラむブラリにノヌドを公開するず、フロヌラむブラリのWebサむトは、ノヌドのペヌゞで本ファむルを衚瀺したす。 ノヌドゞェネレヌタはREADME.mdのテンプレヌトを出力するので、ファむルを倉曎するだけです。

既知の問題点

  • ノヌドゞェネレヌタのコマンドでは、非同期の問題があるため、--tgzオプションず--iconオプションを同時に䜿甚するこずはできたせん。
  • OpenAPIドキュメントの倀info.titleは生成されたコヌドの倉数名ずしお䜿われるため、アルファベットの文字数字ではないで始める必芁がありたす。
Clone this wiki locally