ループ・ノードを使ってみよう

プログラミングの基本の処理のひとつとして、「繰り返し」「反復」処理があげられます。

この記事では、Node-REDで繰り返し処理を実現するループ・ノードを取り上げたいと思います。

Node-REDで繰り返しってどうやるの?

Node-REDでは、フローを横につなげることで順次処理を行います。分岐処理については、Switchノードが用意されています。ここで、プログラミングを経験された方は繰り返しってどうやるの?という質問をされる方が多いです。Whileループとかforループとか、大抵のプログラミング言語の学習ではif文の次くらいに習うのではないでしょうか。

Node-REDで繰り返し処理を実現するには、いくつかの方法があります。

本記事では、ループ・ノードを使う方法をご紹介します。

ループ・ノードのインストール

Node-REDで繰り返し処理を実現するループ・ノードは標準では用意されていませんが、コントリビューターが作成したノードが公開されています。

https://flows.nodered.org/node/node-red-contrib-loop

Node-REDのメニューのパレットの管理からインストールして使うことができます。

3つのモード

繰り返しする方法は、3つあります。

  • 固定回数(Fixed Count)
  • 条件指定(Condition)
  • 要素の列挙(Enumeration)

固定回数(Fixed Count)

予め指定した回数だけ繰り返す方法です。画像の例では、Kindにfixed countを指定して、最初の値が1で、1つずつ増加していき、9回で繰り返し処理は終了となります。

以下の様なフローを作れば、file1.txtからfile9.txtといった名前のファイルを順番に作成することができます。

条件指定(Condition)

条件が一致した段階で繰り返しを終了する方法です。画像の例では、Kindにconditionを指定して、payloadの中身の最後に”Z”を含まないという条件を、msg.payload.substr(-1) != "Z"のように書いています。

実行した結果は以下の通りです。

要素の列挙(Enumeration)

要素の数だけ繰り返す方法です。

例えば、以下の様なデータがあったとします。

{
    "first": "Hello World",
    "second": 8,
    "third": true
}

画像の様に、Kindにenumerationを指定して実行すれば、3回だけ繰り返します。

まとめ

簡単にループ・ノードの機能のご紹介をしました。

フローについてはDiscoverからインポートできます。

ここで上げた例以外にもいくつかサンプルフローがループ・ノードをインストールした時に含まれていますので、読み込んで、ぜひ試してみてください。

過去の記事ですが、Node-REDで分岐処理や繰り返し処理をするときのコツをまとめています。また、他のブログなどでも方法が紹介されていますので、あわせてご覧ください。

enebularでif分岐やwhileループのようなデータの流れを組むときのTIPS(enebular blog)

https://blog.enebular.com/enebular/enebular-if-for-case/

Node-REDにおけるループ処理(WAKU-TAKE-A PROGRAM)

https://waku-take-a.github.io/node-red_loop_001.html