Node-RED Version1.1 の更新まとめ (1.1 released ブログのざっくり翻訳)


Node-RED [Version 1.1 released](https://nodered.org/blog/2020/06/30/version-1-1-released#inject-node-properties) されましたね！更新内容をざっくり翻訳して実際に眺めてみましたので、簡単にまとめておきます。

# Node-RED v1.1 環境を用意する

Node-RED をちょっと試したい場合、IBM Cloud の無料スターターキットか、ローカルでのフォルダを指定したインストールがお勧めです。

## IBM Cloud でサービス作成してみる

IBM Cloud では無料のライトプランで Node-RED 環境を構築できるので、新規に再作成してみました。2020年7月4日現在、v1.1.0 になっています！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/52c4d97b-2c09-153a-71c8-df65bdb108fa.png)
ちなみに、Node-RED スターターキットの作成方法が変わって、アプリ作成とデプロイなどを別に実施する必要があって、お手軽感がだいぶ薄まった気がします。でもまぁ、無料で使える環境であることは変わらないので、今後ともお世話になるとは思います。

## ローカルでサービス作成してみる

ローカルで試したい場合は、[こちらのページ](https://qiita.com/yamachan360/items/9583ac24b2188e36fae0#%E9%96%8B%E7%99%BA%E7%94%A8%E3%81%AE-node-red-%E7%92%B0%E5%A2%83%E3%82%92%E6%BA%96%E5%82%99) を参考に、数分あればお試し環境を用意できます。Windows の場合ですが以下のように実行しました：

```
md node-red-test
cd node-red-test
npm init -y
npm install --unsafe-perm --save node-red
md .node-red
echo 2> .node-red/settings.js
node_modules\.bin\node-red -u .node-red -s .node-red/settings.js
```

2020年7月4日現在、こちらも v1.1.0 がインストールされました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/2680585c-d325-a1ca-1e39-238494a74291.png)
この方法で実行すると、必要なファイルが同じフォルダ内に揃うため、不要になったらフォルダを丸ごと削除するだけでお掃除が完了します。

# 新要素を確認してみる

[Version 1.1 released](https://nodered.org/blog/2020/06/30/version-1-1-released#inject-node-properties) ブログを参照しつつ、新要素を確認しましたので、ざっくり翻訳と一緒にメモを残しておきます。

## エディターの更新

### 情報サイドバーの再設計

情報サイドバーには、フローのツリービューが含まれています。これをアウトライナーと呼びます。フローをナビゲートして、すばやく要素を見つける別の方法を提供します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/20cdb185-33c1-07db-0bdb-6923e5bcf46a.png)
各ノードには、ワークスペースでノードに移動するためのボタン、ノードを有効/無効にするためのボタンがあります。また Inject および Debug ノードの場合は、それらのアクションをトリガーするためのボタンもあります。ノードをダブルクリックすると、編集ダイアログが表示されます。

[詳細 (英語)](https://nodered.org/docs/user-guide/editor/sidebar/info) を参照してください。

### 新しいヘルプ サイドバー

アウトライナーのためのスペースを作るため、サイドバーのヘルプ セクションが独自のサイドバータブに移動しました。ヘルプを独自のタブに配置することで、ワークスペースで適切なタイプのノードを選択しなくても、使用可能なすべてのヘルプトピックを参照できるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/44234379-a1dc-2648-bec6-f7ee574aa8e8.png)
また、将来エディターに、他のヘルプトピックを追加するスペースも提供します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/f16d059c-f5a8-a395-59a2-bdab0199c682.png)

[詳細 (英語)](https://nodered.org/docs/user-guide/editor/sidebar/help) を参照してください。

### ノードのグループ化

フローを整理するために、エディターでノードをグループ化できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/4601ac3d-f2d4-fa80-b34b-632049c9afb7.png)
グループには、カスタムの境界線と背景色、およびオプションのラベルを付けることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/6a3646c9-d0c1-0d25-82a2-92b0781e37dc.png)
グループは新しいタイプのノードとしてフローに追加されます。ユーザーがこの機能を使用し始めると、まだアップグレードしていないユーザーとフローを共有することが難しくなります。

これを助けるため、グループノード タイプを登録するがまったく何もしない node-red-node-group を公開しました。このモジュールをインストールすると、Node-RED の古いバージョンがグループを含むフローをインポートできるようになりますが、エディターにグループは表示されません。また、モジュールは必要のないときには登録されないため、インストールしたままで 1.1 にアップグレードしても問題はありません。

[詳細 (英語)](https://nodered.org/docs/user-guide/editor/workspace/groups) を参照してください。

## ランタイム機能

### node-red-admin ビルトイン

``node-red-admin`` コマンドラインツールは、プロジェクトの開始時から存在していますが、あまり知られていませんでした。Node-RED ランタイムをリモートで管理するため使用できます。

より便利に使えるよう、この機能は ``node-red`` コマンドに統合されました。以下のように実行します：

```shell
node-red admin
```

この機能で提供される便利なコマンドの1つは、``adminAuth`` のためパスワードをハッシュするものです。使用するパスワードの入力を求められ、設定ファイルに貼り付けることができるハッシュが返されます。

```shell
$ node-red admin hash-pw
```

Windows ローカル環境での実行例がこちら：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/8fee1484-24bc-988d-45a5-f8c5d4ce6963.png)
[詳細 (英語)](https://nodered.org/docs/user-guide/node-red-admin) を参照してください。

### 個別の設定の上書き

node-red コマンドは、個々の設定を上書きする -D オプションをサポートするようになりました。例えば異なるレベルのロギングで一時的に実行するには、次のように指定します：

```shell
node-red -D logging.console.level=trace
```

[詳細 (英語)](https://nodered.org/docs/getting-started/local#override-individual-settings) を参照してください。

### httpAdminMiddleware 設定

少し前に ``httpNodeMiddleware`` オプションが追加され、カスタムミドルウェアをHTTP入力ノードルートに追加できるようになりました。詳細は[こちら](https://nodered.jp/docs/user-guide/runtime/configuration)。今回のリリースで、エディター自体を含むすべての管理ルートに対して同じことを行う ``httpAdminMiddleware`` を追加します。

これは例えば、すべての管理リクエストにカスタム http ヘッダーを追加するため使用できます。ほとんどのエンドユーザーが必要とするものではありませんが、独自のアプリケーションにエディターを埋め込むユーザーのための機能です。

[詳細 (英語)](https://nodered.org/docs/user-guide/runtime/securing-node-red#custom-middleware) を参照してください。

### カスタムadminAuthトークンの処理

``adminAuth`` は、admin api に渡された認証トークンの検証に使用できる、カスタムトークン関数をサポートするようになりました。これにより、Node-RED 管理セキュリティを他の認証システムと統合するため、いくつかのより柔軟なオプションを利用できます。

[詳細 (英語)](https://nodered.org/docs/user-guide/runtime/securing-node-red#custom-authentication-tokens) を参照してください。

### 他の場所からのノードのインストール

新しいノードをインストールするための管理 API が拡張され、「url」パラメータをサポートするようになりました。これは、インストールするノードを含む tgz ファイルへの完全な URL である必要があります。

これはまだドキュメントに記載されていませんので、現時点では、元のデザインノートを参照してください。

### HTTPS証明書の更新

https 証明書を定期的に更新するようにランタイムを構成できます。この機能の利用には、Node.js 12以降が必要です。

デフォルト設定ファイルは、この構成に関するサンプルを含んでいます。

[詳細 (英語)](https://nodered.org/docs/user-guide/runtime/securing-node-red#refreshing-https-certificates) を参照してください。

## ノードの更新

### JSONata $moment のサポート

``$moment`` 関数により、JSONata 式内のモーメント日付/時間ライブラリのサポートを追加しました。

これにより、Node-RED のコアに、以前から要望のあったタイムゾーン認識が追加されます。例えば次の式でオークランドの現在の時刻を取得できます:

```
$moment().tz("Pacific/Auckland")
```

2時間後の時刻を取得したい場合は、次のように記述できます：

```
$moment().add(2, "hours")
```

また日付の解析で、より良い処理ができます：

```
$moment($.payload, "YYYY-MM-DD")
```

Moment ライブラリを Function ノードのデフォルトの組み込みとして利用可能にすることも検討していますが、これは将来のリリースで対応予定です。

※ JSONata に関しては、以前に [言語ガイドを翻訳](https://qiita.com/yamachan360/items/91805334890d18ef6e23) しましたので、ご参照ください

### ノードのプロパティを挿入する

Inject ノードは、送信するメッセージに任意のプロパティを設定できるようになりました。``topic`` と ``payload`` だけに限定されません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/c31c9ec2-1747-2249-ee5e-8138cb9cf33b.png)

### Function ノードのライフサイクル

Function ノードでは、ノードのデプロイ時と停止時に実行する必要のあるコードを提供できるようになりました。 これにより、メッセージの処理を開始する前にノードの状態を初期化できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/9002ab54-7344-1b0c-43b9-dc5ce1cd90e2.png)
コードの各部分は別々のスコープにあることに注意してください。どれかの中で変数を宣言して、他からアクセスすることはできません。それらの間で情報を共有するには、[コンテキストを使用する](https://nodered.jp/docs/creating-nodes/context) 必要があります。

メイン関数も非同期になっているので、トップレベルで await を使用できます。

### Debug ノードのステータス

Debug ノードは、Debug サイドバーに何を渡すかに関係なく、ステータスメッセージを設定できるようになりました。スペースのあるサイドバーに完全な情報を表示しながら、ステータスに短い要約を表示することができ、デバッグする場合に役立ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/daa4c77b-3979-10c3-cf60-fde6afae76fb.png)
デバッグノードについて補足ですが、多数のノードを一度にアクティブ化/非アクティブ化できるように、エディターにいくつかのアクションを追加しました。

アクションリスト (Ctrl / Cmd-Shift-Pまたは表示->動作一覧) でそれらを検索し、キーボードショートカットを割り当てることができます。

* core:activate-selected-debug-nodes
* core:activate-all-debug-nodes
* core:activate-all-flow-debug-nodes
* core:deactivate-selected-debug-nodes
* core:deactivate-all-debug-nodes
* core:deactivate-all-flow-debug-nodes

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/818f77e7-db95-4e04-4ddb-3fbb4da74d0c.png)

### トリガーノード

トリガーノードは、オプションで別の出力に「2番目のメッセージ」を送信できるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/a5c21b9d-c3dc-bc3f-aa98-833904ae9b75.png)
メッセージの個別のストリームを処理する場合、``msg.topic`` を使用してストリームを識別する必要がなくなります。任意のメッセージプロパティを使用できます。

# Node-RED 1.1.1 リリース

7月9日ぐらいに [Node-RED 1.1.1 released](https://discourse.nodered.org/t/node-red-1-1-1-released/29715) のお知らせがあったので、追記しておきます。

Node-RED 1.1.1 は、1.1.0 に対して報告されていた少数の問題を修正します：

* タッチスクリーンにおけるサブフローポートの結線に関する問題
* テーマに対応していないハードコードされた CSS 値を幾つか削除しました
* グループを含むサブフローの削除によって引き起こされる問題を修正しました

少数のユーザーが「エディターに戻ったときに、数秒間(またはそれ以上)空白になる」問題を報告しています。根本的な原因は完全にはわかりませんが、このリリースでは、関連しそうなビュー更新の処理方法が少し変更されています。これが発生した場合は [この issue](https://github.com/node-red/node-red/issues/2631#issuecomment-654766586) を参照してフィードバックしてください。

[詳細 (英語)](https://github.com/node-red/node-red/releases/tag/1.1.1) を参照してください。

# というわけで

Node-RED どんどん使いやすく改良されていく感じで、良いですね！更新された機能、実際にいろいろ試してみたいと思っています。

それではまた！