LoginSignup
3
0

More than 1 year has passed since last update.

[#Node-RED]flows.jsonのフォーマットを見てみる

Last updated at Posted at 2022-12-14

目的

Node-REDはビジュアル言語なので、他の言語のようなユーティリティは作りにくそうに思えます。しかし、プログラムはflows.jsonというJSONファイルに保存されますので、基本的な構造さえわかれば色々なツールを作ることができます。今回は、flows.jsonのフォーマットのうち、解析に役立ちそうな内容を説明します。

flows.json

Node-REDのプログラムをデプロイするとユーザディレクトリ(デフォルトは~/.node-red)に出力されるのがflows.jsonです。このjsonファイルはプログラムそのもので、タブとタブ内のノード(モジュール)などのオブジェクトの各プロパティ(設定値)が保存されています。
flows.jsonは書き出しメニューから、全体、タブ単位、選択部分をクリップボードやファイルに書き出すこともでき、整形出力も可能です。

すべては一つの配列に

複数の種類のオブジェクトが、すべて一つの配列に並んでいて、種類(type)で区別されます。種類ごとに配列を分けた方がわかりやすいかなとも思いますが、

  • 階層が深くならない
  • すべてのオブジェクトを同じように扱える
  • 拡張性が高い
    といった利点があると思います。

配列の並び順

配列の並び順は、タブ、グループ、オブジェクトの順で、同じ種類の中は基本的に作成した順に並んでいます。ただし、タブは表示位置を変えると表示順に並べ変えられます。

オブジェクトはidで識別

タブ、グループ、ノードなどオブジェクトはidで識別されます。ノード間の接続はオブジェクトではないのでidはなく、接続先のノードのidが示されるだけです。

ノード間の接続とタブは一方向、グループとリンクは双方向

ノード間の接続は接続元のwiresで、タブはノードのzで一方向に示されます。グループはグループのnodesとノードのg
で、リンクはlink in、link out、link callのlinksで双方向に示されます。エディタの操作の都合浄双方向にしないと不便なのでしょう。
なお、link outはmodeによってlinkとreturnが示されます。

タブの名前はlabel、それ以外はname、説明はinfo

flows.jsonを解析すると名前を使いたくなると思います。タブの名前はlabel、それ以外はnameで示されます。なお、、説明はすべてinfoです。

今は昔

かつてのNode-REDはflows.jsonのバックアップファイルがなく、起動時の処理で無限ループになると整形されていないflowsjsonを編集して直すなどしていました。今はそんな必要はなくなりましたが、整形されたJSONはわかりやすいので、ぜひ一度覗いてみてください。Node-REDの処理の都合や様々なツールへの応用が思い浮かぶでしょう。

サンプルフロー

[#Node-RED]flows.jsonからノード一覧を作成する
[#Node-RED]flows.jsonからリンクノード一覧を作成する

3
0
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
3
0