Node-RED 2.0の新機能: 概要紹介

# Node-RED 2.0の新機能: 概要紹介

株式会社日立製作所 
サービスコンピューティング研究部
西山博泰

## はじめに

[Node-RED](https://nodered.org/)はコーディングレスでプログラムを作成できるプログラミングツールです。このようなプログラミングはLow Code/No Codeプログラミングと呼ばれ、最近大きな注目を集めています。Node-REDは、IoT分野を筆頭に様々な分野で広く活用されているLow Codeプログラミングツールの一つです。

Node-REDでは、ノードと呼ばれる機能ブロックををつなぎ合わせることで、とても簡単にプログラムを作成することができます。こういったノードには、乱数生成など簡単なユーティリティノードから、SNSからの情報収集、今流行りの機械学習を行うためのノードなど様々なノードが存在し、それらはOSSノードとして[多数公開](https://flows.nodered.org/)されています。

2021年7月、Node-REDの最新版であるバージョン2.0がリリースされました。Node-REDは[一年毎のメジャーリリース](https://nodered.org/about/releases/)が予定されており、今回は2.0系列の最初のリリースになります。Node-RED 2.0では、アプリケーションの開発を容易化するさまざまな機能が新しく導入されました。また、メジャーリリースということで、いくつか大きな変更が加えられています。一連の記事でNode-RED 2.0の新機能を紹介したいと思います。

この記事では、Node-RED 2.0で導入された下記主要機能の概要と注意事項を紹介します。

- `admin init` - 設定ファイルの作成
- `monaco` - モダンなテキストエディタ
- Injectノード - Inject実行機能
- フローデバッガ
- フローリンタ

主要機能のうち、フローデバッガとフローリンタについては別記事で詳しく紹介します。

## 新機能

### 1. `admin init` - 設定ファイルの作成
  
  Node-REDの設定は`settings.js`という初期化ファイルに記述します。従来のNode-REDでは、Node-REDを起動した際に`settings.js`がホームディレクトリの`.node-red`ディレクトリ、もしくは、`-u`オプションで指定したディレクトリの下に作られます。このファイルはJSON形式のデータのため、エディタで適切に編集した後、Node-REDを再起動する必要がありました。
  
  Node-RED 2.0では、`admin init`コマンドにより、Node-REDエディタを起動することなく`settings.js`を対話的に設定することができます。
  

```bash
$ node-red admin init

Node-RED Settings File initialisation
=====================================
This tool will help you create a Node-RED settings file.

✔ Settings file · /home/john/.node-red/settings.js
✔ That file already exists. Are you sure you want to overwrite it? · Yes

User Security
=============
✔ Do you want to setup user security? · No

Projects
========
The Projects feature allows you to version control your flow using a local git repository.

✔ Do you want to enable the Projects feature? · Yes
? What project workflow do you want to use? …
  manual - you must manually commit changes
❯ auto - changes are automatically committed
```

### 2. `moncaco` - モダンなテキストエディタ
  
  Node-REDエディタでFunctionノードのJavaScriptコードや、TemplateノードのJSONデータを編集するために用いるテキストエディタには、基本的な編集機能を備えた[**ACE**](https://ace.c9.io/)と呼ばれるエディタが使われていました。
  
  Node-RED 2.0では、最近のモダンなエディタで利用可能な入力補完機能などをサポートした[**Monaco**](https://microsoft.github.io/monaco-editor/)エディタをACEの代わりに利用でき流ようになりました。
  
`monaco`エディタの例を以下に示します。
  
![monaco_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/546217/0eb9d455-4754-896d-a578-36718db0e8da.png)


エディタを`ACE`から`monaco`に変更するには、`settings.js`の`editorTheme.codeEditor.lib`の値を`"monaco"`に変更し、Node-REDを再起動します。

```
...
        codeEditor: {
            /** Select the text editor component used by the editor.
             * Defaults to "ace", but can be set to "ace" or "monaco"
             */
            lib: "monaco",
            options: {
...
```

### 3. Injectノード - Inject実行機能
  
  Injectノードは、ノードの左に配置されたボタンを押すことで、指定したプロパティを持つメッセージを送信できます。ただし、Injectノードの送信メッセージの変更を行った場合、設定パネルを閉じてフローの再デプロイを行わないとメッセージ送信ができませんでした。
  
Node-RED 2.0では、Injectノードの設定パネルのプロパティリストの右下に「**Inject実行**」ボタンが追加されました。「Inject実行」ボタンを使うと、送信メッセージのプロパティの値を変更した後、直接メッセージの送信を行うことができます。

![inject_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/546217/0f626ec4-ab05-e872-703b-3238628088dc.png)

### 4. フローデバッガ
  
フローデバッガは、Node-REDで作成したフローのデバッグを支援するための機能です。他のプログラミング言語でのデバッガと同様に、フローの実行を指定したポイントで停止し、処理状況を確認、実行を再開する機能を備えています。これにより、フローを修正しないでその詳細な動作を確認することができます。
  
Node-REDのフローデバッガは、Node-RED本体の基本機能ではなく、Node-RED 1.3で導入された[プラグイン機能](https://qiita.com/k-toumura/items/9131b4a7cbce66cc088b)を活用した拡張機能です。ノードと同様に、Node-REDエディタへの追加インストールが可能です。
  
フローデバッガについては、[別記事](https://qiita.com/HiroyasuNishiyama/items/5a416762fb0024b7e403)で詳細に説明しています。
  
![デバッガ_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/546217/6a715a75-b80f-9710-4486-5cc6b830cfd1.png)

### 5. フローリンタ
  
フローデバッガがNode-REDフローを実際に動作させながらチェックするための機能であるのに対し、フローリンタは作成済み、もしくは、作成中のフローの問題点を検出する機能です。フローを実際に動作させることなく、問題点の把握を行うことができます。

フローリンタはフローデバッガと同じく、プラグイン機能を用いたNode-REDエディタへの追加拡張機能として実現されています。また、コマンドラインチェックツールとして利用することも可能です。

フローリンタについては、[別記事](https://qiita.com/k-toumura/items/37f23c9fe43fe16453bb)で詳細に説明します。

![リンタ_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/546217/2f32faf3-93c0-cf5b-9c36-bc00a845b5ea.png)


## 注意すべき変更点

### 1. Node.jsバージョン
  
  Node-RED 2.0では、実行系としてサポートするNode.jsのバージョンが12.17以降になりました。これはNode.jsのメンテナンススケジュールと合わせるためです。
  
### 2. フローファイル名の変更
  
  デフォルト設定でのフローファイル名が`flows.json`に変更されました。従来はNode-REDを実行しているホスト名を元にファイル名が決定されていたため、環境によってホスト名が変更された場合に問題が生じていました。本変更でファイル名が固定となるため、この問題を避けることができます。
  
### 3. RBEノードの名称変更
  
  変化した入力メッセージをフィルタリングする機能を持つRBE(Report by Exception)ノードの名称が意味するところが分かりにくいという理由から、Filterノードに変更されました。既存のRBEノードを使っているフローはそのまま動作します。
  
### 4. tailノードの削除
  
  ファイルの最後の部分の内容を出力する`tail`がデフォルトではインストールされなくなりました。パレットの管理メニューから追加インストール可能です。
  

## おわりに

Node-RED 2.0では、プラグイン機能を用いたフローデバッガやフローリンタといった機能が実現されました。これらの機能を用いることで、信頼性の高いフローの作成が容易化されることが期待されます。

## Node-RED 2.0の新機能紹介

- [Node-RED 2.0の新機能: 概要紹介](https://qiita.com/HiroyasuNishiyama/items/ff8f44cec8c6ffb4f525)
- [Node-RED 2.0の新機能: フローデバッガ](https://qiita.com/HiroyasuNishiyama/items/5a416762fb0024b7e403)
- [Node-RED 2.0の新機能: Flow Linter](https://qiita.com/k-toumura/items/37f23c9fe43fe16453bb)
 
*Node-RED: Node-REDは，OpenJS Foundationの米国およびその他の国における登録商標または商標である。*
*JavaScript: JavaScriptは、Oracleの米国およびその他の国における登録商標または商標である。*