Node-RED事始め

はじめに

最近Node-REDを触り始めました。「ローコードプログラミングツール」と呼ばれるもので、黒い画面を触らなくてもプログラミングができるのがウリです。個人的にはこの手のツールは学習コストが高いだけ、と敬遠しがちでしたが、実際に触ってみると考え方がとてもシンプルでとっつきやすい上に、自分でノードを開発してnpm上で公開できるということで大きな可能性を感じました。

軽く触ってみた感じ、プロトタイピングに向いたツールのようですが、異常系もスッキリと実装できるので、それなりに規模の大きなアプリケーションの実装にも耐えられるのでは、と期待しています。今回は、Hello World的なデバッグログを出力するだけのゴミサンプルを作ってみます。

前提条件

MacOS上で作業することを前提とします。Node-REDのバージョンは執筆時点で最新版のver.2.0.6です。

nvmのインストール

Node-REDのインストール方法はいろいろありますが、今回はnvm+Node.jsの上にインストールしていきます。いきなりNode.jsをインストールするとNode.jsのバージョン切り替えが面倒になるのでバージョン管理ツール「nvm」を通じてインストールします。というわけで、まずはnvmをインストールします。nvmのインストール方法は公式情報の手順に従います。ちなみに、以下の例で行頭の「$」はプロンプトというものです。よくわからずコピペする場合は省いてください。

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash

Node.jsのインストール

続いてnvmを使ってNode.jsの環境を整えます。Node.jsの最新バージョンを調べてそれをインストールします。以下の例では、Node.jsのv16.9.1をインストールしています。最後に有効なNode.jsとnpmのバージョンを確認します。
$ nvm ls-remote
$ nvm install v16.9.1
$ nvm alias default v16.9.1
$ node --version
v16.9.1
$ npm --version
7.21.1

Node-REDのインストール

いよいよNode-REDをインストールします。Node-RED日本ユーザ会が公式ドキュメントの日本語訳を公開しているのでこれに従います。
$ sudo npm install -g --unsafe-perm node-red

Node-REDの起動

準備ができたのでNode-REDを起動します。
$ node-red
  途中省略
14 Sep 00:00:43 - [info] Server now running at http://127.0.0.1:1880/
14 Sep 00:00:43 - [info] Starting flows
14 Sep 00:00:43 - [info] Started flows
途中色々ログは出ますが、今回はとりあえずスルーして、最後の3行に着目すると、「http://127.0.0.1:1880/」で待ち受けていることがわかります。ブラウザでこのURLにアクセスします。以下のような画面が表示されたら起動完了です。

Hello World!

では、Hello World的なデバッグログを出力するだけのゴミサンプルを作ってみます。まずは、「inject」ノードと「debug」ノードをフローエディタ上にドラッグ&ドロップして図のように線でつなぎます。


次に「inject」ノード(「タイムスタンプ」と書かれている方)をダブルクリックして、「msg.payload」の値を「文字列」に変更して「Hello World」と入力します。最後に「完了」ボタンを選択して保存します。


この変更を有効化するために、画面右上の「デプロイ」ボタンを選択します。


デプロイが成功したら「inject」ノードの左側にある小さなボタンを選択して、フロー実行のトリガを引きます。画面上部に、injectの実行を示すメッセージがポップアップ表示されます。画面右側にある「デバッグ」ボタン(虫みたいなアイコン)を選択すると、デバッグログに「Hello World」と出力されているのが確認できます。フロー実行のトリガボタンを何度か押してみると、そのたびにログが出力されます。


今回のゴミサンプルはこれで完成です。

解説

Node-REDではノード間を「msg」という名前のオブジェクトが受け渡しされてフローが実行されます。今回のサンプルでは、injectノードで「msg.payload」パラメータに「Hellow World」という値を設定して、debugノードにmsgオブジェクトを渡しています。debugノードでは「msg.payload」の値をデバッグウィンドウに出力する設定になっています。
injectノードは手動でフローを始動させるためのノードで、msgオブジェクト配下の任意のプロパティに値を指定できるので、Node-RED単体でフローの設定に間違いがないか確認するのに便利そうです。

まとめ

Node-RED歴の浅い自分が思う一番重要なルールは「ノード間をmsgオブジェクトが受け渡しされてフローが実行される」です。これだけ覚えておけばだいたいNode-REDを理解したことになるんじゃなかろうかと勝手に思っています。

今回は、簡単なゴミサンプルを作ってみました。次回はdebugノードをもう少し見ていきたいと思います。

コメント

このブログの人気の投稿

Joinノードを使う(その1)

Execノードを使う

Joinノードを使う(その4)