enebularでif分岐やwhileループのようなデータの流れを組むときのTIPSをまとめてみました。
Flow Editorではデータの流れを作る
enebularのFlow Editorでは、Flowの名前の通りデータの流れを作ることになります。
周辺でenebularを試される方が外部ユーザーの方も増えてきまして、私がNode-REDやenebular触りはじめたときに困ったことして、普段のプログラムでよく使うif分岐やfor文のようなデータの流れを表現するのが一つハードルだったなーと思い、書いてみます。
もちろんfunctionノードでいろいろできる
まずはじめにですが、functionノード。これは中にJavaScriptが書けるので、いろいろできるでしょう。
ですが、functionノードを駆使しすぎると、functionノードの中の自由度が高すぎるゆえに、あまりひとつのfunctionノードに処理をたくさん書いてしまいます。そうすると、ノードの中身を見ないと処理が分からないため、データの流れが見えにくくなる場合があるので注意です。
さて、今回はfunctionノードのアプローチでなく、ほかのノード群を使う用途をお伝えしていきます。
Discover Flowで今回の仕組みをFork
まず、Discover Flowから今回の処理を持ってきましょう。Flowの取り込み方はDiscovering Assetsドキュメントを参考ください。
if分岐のフローサンプル
if分岐のフローサンプルです。
仕組みを説明していきます。
今回判定したい文言はinjectノードで出力します。
injectノードを使ってdogという文字を出力しています。これがフローに従って流れていきます。
実際の分岐 switchノード
実際の分岐は「猫かチェック」と書かれているswitchノードというのを使います。
こちらです。ダブルクリックして詳細を見てみます。
このように2つの判定をしています。1番目はcatかどうかの判定。2番目は if文 でいうとelseにあたるotherwiseです。msg.payload に「dog」という文字として来たものを判定してます。
実際には、つくった分岐の数だけコネクタが出ていまして、debugノードに結果を出力しています。
var name = "dog"; if(name == "cat"){ // 猫の結果 } else { // それ以外 }
プログラムで言うとこのようなイメージです。
if分岐のフローを動かしてみる
実際に動かしてみます。
injectノードの左のボタンをクリックして動かします。
今回はdogなので otherwise の分岐に動作します。
デバックタブに結果が表示されます。
デバッグタブでは、どこの debug ノードから出力されたかが、このように表示されます。
cat になおしてみる
injectノードでcatを出力してみましょう。
ダブルクリックしてinjectノードを編集します。
Payloadをcatに変更して、
デプロイしましょう。
動作させてみると、無事分岐してデバックタブにはこのように表示されます。猫の結果 debug ノードの方に分岐してますね。
whileループのフローサンプル
つづいて、whileループのフローサンプルです。
プログラムで言うとこのようなイメージです。
var loopCount= 0; while( loopCount < 5 ){ // ループ中結果 } // 最終結果
値の初期化
まず loopCount を0で準備します。
変数を設定できるノードとして change ノードがあります。ダブルクリックして詳細を見てみます。
このようにRulesのところで、loopCountを0にする設定をしています。
whileループ部分
whileループ部分はこのあたりです。
if分岐でも使った switch ノードで判定をしています。
このように、5以下と到達したときのotherwiseの設定をしています。
そして、ループ中の分岐は、
このように動作します。
カウントする部分は、functionノードを使っていて、
このように加算しています。
whileループのフローを動かしてみる
startと書かれている inject ノードを動作させてみます。
whileループが動作してループ中結果、最終結果と書かれているdebugノードがそれぞれ反応します。
このように無事動作しました!
Node-REDでもデザインパターンとして良い記事がある
2018/10/22時点で、enebularのFlow Editor部分はNode-REDでできていまして、実はNode-REDでも zuhito さんが書かれた良い記事があります。
目からウロコ!Node-REDのデザインパターン10選 – Qiita
ifやwhileだけでなく、さまざまな処理のパターンがあるので気になる方は是非参考にしてください。
まとめ
ということで、今回はenebularでif分岐やwhileループのようなデータの流れを組むときのTIPSをお伝えしました。
働きとしては小さなものですが、複雑な構造を作っていく上では大切ですし、なにより、他のプログラムでデータの流れを作れる方が、うまく置き換えやすいTIPSだと思いますので、参考にしてみてください!