プログラミングの基本の処理のひとつとして、「繰り返し」「反復」処理があげられます。
この記事では、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)