この記事は Node-RED Advent Calendar 2019 6日目の記事です。。
本記事では、Node-RED Desktop Ver.1.0 に追加されたオールデバッグ機能を、
Node-RED Desktop以外でも使う方法を説明します。
前書き:標準デバッグ機能の課題
Node-REDでフローをデバッグするには、debugノードをフロー上に置く必要があります。
しかし、これには以下の課題があります。
- 対象フローを直接改変する必要があり、意図せず元のフローを壊す恐れがある
-
debugノードが多くなってくると、フローのわかりやすさが損なわれてしまう
- レイアウト調整や、使用後の削除も面倒
オールデバッグ機能とは
debugノードを置かずに、debugができる機能です。
具体的には、
debugノードの有無に関わらず、
すべてのノードのoutを通るmsg(図の赤丸を通るmsg)がデバッグウィンドウに出力できるようになります。
これは、すべてのノードにdebugノードをぶら下げたのと同じ状態です。
つまり、オールデバッグ機能を使えば、もう個別にdebugノードを置かなくてよくなります。
機能の追加はたった22行で
Node-RED起動用ファイル(node_modules/node-red/red.js
)に、22行を追加するだけです。(ver.1.0.3
で解説しています)
以下で、手順を説明します。
0.node-redをインストール
$ mkdir sagyou
$ cd sagyou
$ npm install node-red
1. red.js
ファイルを red2.js
にコピーして、red2.js
を編集します
$ cp node_modules/node-red/red.js node_modules/node-red/red2.js
$ vi node_modules/node-red/red2.js
2. 差分が以下となるように編集します。
$ diff -c node_modules/node-red/red*.js
*** node_modules/node-red/red.js 2019-11-02 10:44:27.536891600 +0900
--- node_modules/node-red/red2.js 2019-12-01 09:37:25.653174800 +0900
***************
*** 24,29 ****
--- 24,30 ----
var nopt = require("nopt");
var path = require("path");
var fs = require("fs-extra");
+ var Node = require('@node-red/runtime/lib/nodes/Node')
var RED = require("./lib/red.js");
var server;
***************
*** 198,205 ****
--- 199,228 ----
settings.userDir = parsedArgs.userDir;
}
+ function allDebugOut() {
+ Node.prototype._send = Node.prototype.send
+ Node.prototype.send = function(msg) {
+ Node.prototype._send.call(this, msg)
+ var _data = {
+ id: this.id,
+ z: this.z,
+ name: this.name,
+ topic: msg.topic,
+ msg: msg,
+ _path: msg._path
+ }
+ var data = RED.runtime.util.encodeObject(_data);
+ RED.runtime.events.emit("comms", {
+ topic: "debug",
+ data: data,
+ retain: false
+ })
+ }
+ }
+
try {
RED.init(server,settings);
+ allDebugOut();
} catch(err) {
if (err.code == "unsupported_version") {
console.log("Unsupported version of Node.js:",process.version);
$
以上で、オールデバッグ機能 の追加は完了です。
3. オールデバッグ機能を使いたい時は、red.js
ではなく red2.js
を使ってNode-REDを起動します。
$ node node_modules/node-red/red2.js
これで、Nod-REDのすっきり・シンプル・わかりやすい フローを取り戻すことができますね!
それでは、楽しいNode-REDライフを!!
おわりに
Node-RED-Desktop Ver.1.0 では、このオールデバッグ機能がメニューのON/OFFで利用できます。
また、昨年のアドベントカレンダーで紹介された縦フローが使えたり、ngrokやnode-generatorが統合されていたりと便利なツールに仕上がっていると思います。
興味を持たれた方は、是非インストールして試してみてください。
ダウンロードはこちらからできます
Appendix
- Node-RED Desktop
- Node-RED UG勉強会 2019 年末LTパーティ 発表資料: Node-RED Desktop Ver. 1.0 新機能紹介