LoginSignup
14
5

More than 3 years have passed since last update.

Node-REDのfunctionノードをフローライブラリに登録できるオリジナルノードに変換してみよう

Last updated at Posted at 2019-12-11

 こんにちは、(株)日立製作所 研究開発グループ サービスコンピューティング研究部の横井一仁です。

 本ドキュメントでは、ノード開発容易化ツール「Node generator」の使い方をご紹介します。前の記事で紹介した画像認識を行うNode-REDのfunctionノードを、共有可能なオリジナルノードに変換してみます。

imagerecognition2.png

Node generatorとは

 Node generatorとは、Node-REDのオリジナルノードを自動生成するコマンドラインツールです。

 JavaScriptコードを書いたfunctionノードを共有可能なオリジナルノードに変換したり、Swagger Codegenの様にOpenAPIドキュメント(Swagger)からノードのソースコードを生成したりできます。

 日立が開発し、OSS化した本ツールは、現在OpenJS Foundation (Linux Foundation)管理下のNode-RED公式のサブプロジェクトとなっており、開発コミュニティと協力して機能拡張が行われているOSSになっています。

 本ツールは下記サイトで紹介されている様に、CiscoやIBMなどのNode-RED活用企業でも活用されています。

functionノードからオリジナルノードを生成

 本ドキュメントで用いた動作環境は、Node-REDをインストール済のWindows環境です。Node generatorはmacOSやLinuxにも対応していますので、その場合は適宜ファイルパス等を変更して試してみてください。

(1) functionノードのコードをライブラリに書き出す

 まず、functionノードのJavaScriptコードをファイルとして書き出す操作を行います。

 本操作は、functionノードのノードプロパティ上にある本のマークのボタンをクリックし、「ライブラリへ保存」を選択すればOKです。ライブラリにコードを書き出すと、Node-REDのホームディレクトリの下の「lib¥functions」ディレクトリ(Windowsの場合は「C:¥Users¥<ユーザ名>¥.node-red¥lib¥functions」)にJavaScriptのコードが入ったファイルが書き出されます。

(2) Node generatorをインストール

 管理者モードでコマンドプロンプトを起動し、ビルドツール(Windowsの場合のみ)とNode generatorをインストールします。

npm install -g node-red-nodegen
npm install -g windows-build-tools    (Windowsの場合のみ)

(3) 管理者モードのコマンドプロンプトを閉じる

(4) コマンドプロンプトを開き、ホームディレクトリへ移動

 ユーザモードでコマンドプロンプトを開き直し、cdコマンドを実行してホームディレクトリに移動します。

cd

(4) functionノードのJavaScriptコードからノードを生成

 Node generatorを用いてfunctionノードのJavaScriptコードからノードを生成します。

node-red-nodegen .node-red¥lib¥functions¥image-segmenter.js

 以上でノードの作成ができました。カレントディレクトリ内にnode-red-contrib-image-segmenterディレクトリが生成されているはずです。このディレクトリの中には、以降の手順で編集するpackage.json(モジュールの情報が記載されているファイル)とnode.js(Node-REDランタイムで実行されるノードのソースコードファイル)が含まれています。

 次にこのノードをNode-REDから呼び出せるように設定してみます。

(5) 生成されたディレクトリに移動

cd node-red-contrib-image-segmenter

 今回は、外部モジュールを利用しているため、追加で下記(5-A)(5-B)の手順も行います(functionノードが外部のnpmモジュールを使っていない場合は(5-A)(5-B)の手順はスキップしてください)。

(5-A) package.jsonファイルに依存関係を追加(17行目付近)

  "keywords": [
    "node-red-nodegen"
  ],
  "dependencies": {     <- 依存関係を追加
    "@codait/max-image-segmenter": "0.1.4"  <- 依存関係を追加
  },                    <- 依存関係を追加
  "devDependencies": {
    "node-red": "0.18.7",

(5-B) node.jsファイルに定義を追加(206行目付近)

        }
        sandbox.global.set("imageSegmenter", require('@codait/max-image-segmenter'));  <- vm.createContext()の前に定義を追加
        var context = vm.createContext(sandbox);
        try {
            this.script = vm.createScript(functionText, {

(6) 依存モジュールのインストール、シンボリック作成の準備

npm link

(7) Node-REDのホームディレクトリに移動

cd
cd .node-red

(8) シンボリックリンク作成

npm link node-red-contrib-image-segmenter

(9) Node-REDを起動

 node-redコマンドを用いてNode-REDを起動します。もし起動中の場合はCtrl+cで終了してから再度Node-REDを起動し直してください。

node-red

 Node-REDフローエディタ( http://:<ポート番号> )にアクセスすると、機能カテゴリの中に青色のimage-segmenterノードが登場しているはずです。

 本ノードは、書き出し元のfunctionノードと同様に、前にnode-red-contrib-browser-utilsモジュールのfile injectノード、後ろにdebugノードをつなぐことで、画像認識を行うことができます。

generatednode.png

最後に

 Node-REDは、非エンジニアでも開発できるビジュアルプログラミングツールであるため、コーディングの能力が必要となるfunctionノードを多用するとNode-REDの良さが薄れてしまいます。Node generatorを用いて、functionノードを再配布可能なノードに変換し、フローライブラリに登録することで、非エンジニアの方も再利用ができる様になるでしょう。

 Node generatorの使い方については、詳細の日本語ドキュメントも公開していますので、ぜひ見てみてください。

14
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
5