Contents
Node-RED環境の再構築(引っ越し)
1. 概要
通常、新しい機能を持ったnodeをNode-REDで使用したい場合には、Node-REDの「パレット管理」でそのnodeをインストールします。インストール済みのnodeのバージョンアップの際にも、「パレット管理」で行います。
いつも使い慣れているNode-REDの環境を、別のマシンに移植したい場合にはどのようにすればよいか、基本次の3ステップです。
1) まず、別のマシンにNode-REDをインストールします。
2) そして、既存のNode-REDに入れていたnodeパッケージをインストールします。
3)最後に、元のNode-REDのフローを書き出して(ダウンロードして)読み込ませます。
ここでは、2)の既存のNode-REDに入れていたnodeパッケージを新しいマシンにインストールする方法を説明します。
結論としては、既存のマシンの~/.node-red/package.jsonのファイルをコピーし、$ npm install のコマンドを実行すればよいです。
新しいマシンのNode-REDにフローを再構築した際に、よくはまるポイントは以下の通りです。フローを書き出して、読み込ませた場合には、MQTTやSQLなどのnodeの中に記載したパスワードは引き継がれません。改めて入力する必要がありますので、ご注意ください。
2.Node-REDの「パレット管理」とnpm
Node-REDはNode.jsで動作しています。javascriptでは、nodeなどのパッケージは、npm(Node Package Manager)で管理されます。従って、新機能のnodeは、”npm install <package名>” コマンドを使ってインストールしても「パレット管理」でインストールしたのと同等です。
実際にnodeのページでは、Installationとして、“npm install <package名>”を使う方法が紹介されています(図1参照)。注意事項としては、~/.node-red/の下で“npm install <package名>”を実行することです。

図1. node-red-contrib-aedesの説明ページ
~/.node-red/node_module/の下にパッケージがインストールされ、一覧はpackage.jsonに追記され、package_lock.jsonに実際にインストールしたパッケージの情報が記載されます。
Node-REDの「パレット管理」の画面と、package.jsonの中身を対比した結果を図2に示します。

図2. Node-REDの「パレット管理」とpackage.jsonの対比
図2で新しいバージョンがある4つのnodeのバージョンを上げると、package.jsonの記述も図3のように自動的に変更されます。

図3. バージョンアップ後のpackage.json
3.Node-REDのパッケージの移植(引っ越し)
新たにOSをインストールしたPDH(Raspberry Pi)にNode-REDをインストールし、既存のNode-REDのpackage.jsonを使って、新しいPDHに既存のPDHのnodeパッケージをインストールしてみます(Node-REDのnode環境を引越しします)。
PDHにNode-REDをインストールする際に、
1) Raspberry Pi用のnodeをインストールしないオプションを選んだ場合
2) Raspberry Pi用のnodeをインストールするオプションを選んだ場合
のいずれの場合も、どちらも無事に既存のPDHのnodeパッケージをインストールすることができました。
以下、2)の場合で以下説明します。
3.1. 引っ越しの方法
既存のPDHのNode-REDのnodeパッケージは、第2章で調べたようにpackage.jsonに書かれています。このpackage.jsonを使って、nodeパッケージの引越しを行います。
具体的には、新しいPDHの~/.node-redのディレクトリに既存のPDHのpackage.jsonをコピーして、以下のコマンドを実行します。
npm install
これにより、npmは、package.jsonに書かれたnodeパッケージを追加し、書かれていないnodeパッケージが存在した場合には削除し、package.jsonに書かれた通りのnodeパッケージ環境を作成します。これで、引越しが完了します。
3.2. nodeパッケージ環境の引越し確認
ここから、具体的にnodeパッケージ環境の引越し確認を行います。
図4-1に、OSとNode-REDをインストール直後の”~/.node-red”のファイルと“node.js”と“npm”のバージョンと“package.json”の中身を示します。
あらかじめRaspberry Pi用のnodeがインストールされていますので、package.jsonの”dependencies”にnodeが記載されています。また、package_lock.jsonが存在します。

図5-1. OSとNode-REDインストール直後の状況
ここで、このpackage.jsonを別名(例えば、package.json.old)に変更し、既存のNode-REDのnodeを記載した既存のpackage.jsonを~/.node-red/の下に置きます(sftpで転送してもいいですし、USB経由でコピーしたも構いません)。
図5-2.に既存のpacakge.jsonの中身を示します。

図5-2. インストールするnodeが記載された既存のpackage.json
ここで、package.jsonに書かれたnode環境をインストールするために、以下のコマンドを実行します(注意事項としては、”npm install”だけです。”npm install <package名>”ではありません)。
npm install
図5-3に、”npm install” コマンドを使って、package.jsonの中身をインストールした際の画面を示します。

図5-3. npm installでpackage.jsonに記載のnodeをインストール
”516のパッケージを追加し、3つのパッケージを削除した”とのメッセージがあります。どういうことかというと、もともとRaspberry Pi用のnodeをインストールするオプションを選んだので、図5-1に示すように、7個のnodeが存在しました。既存のpackage.jsonには、以下の3つが無かったため、それらが削除されています。
1) node-red-contrib-buffer-parser
2) node-red-node-ping
3) node-red-node-smooth
図5-4に、nodeがインストールされているNode-REDの”パレット管理”の画面を示します。

図5-4. node-がインストールされたNode-REDのパレット管理
ちなみに、package.json.oldでバックアップしたpackage.jsonを既存のNode-REDのpackage.jsonに置換え、再度、”npm install”を実行すると元の7つnodeがインストールされた状態に戻ります。
実行結果を、図5-5に示します。
以前とは逆に3パッケージを追加し、556パッケージを削除したとコメントがあります。

図5-5. 元のpacakge.jsonを使って再度installし直したpackage.json
図5-6に、Node-REDのパレット管理の画面を示します。図の5-5のnodeの並びに変わっているのが分かります。

図5-6. 元のnodeの並びに戻ったNode-REDのパレット管理

