Node-RED v1.0で追加された機能のまとめ

# はじめに
* 9/30にNode-REDがV1.0をリリースした。
* これだけ普及して商用にも利用されているのにv0.20とかだったので大幅な区切りがあったのだろうと推測し、どんな機能が追加されたのか確認した


## TL;DR
* Node-REDがついにV1.0になったので、何が変わったか公式サイトの情報から和訳/意訳してみた
* 大きいところでは、メッセージが非同期になりmsgオブジェクトがクローンで渡っていくようになった
* エディタやショートカットやサブフローなどで、UIや機能が強化された
* 内部的なJqueryやCSSが最適化され、ノードのbugfixやオプション追加も行われた
* Node-RED Libraryの画面が新しくなり、コレクションの概念が増えた

## 免責事項
* 検証をして確実と思われる情報を載せておりますが、誤っている可能性もゼロではないので、参考程度にご利用ください
* 自分は英語は苦手なので、和訳サイトと今までのNode-REDのノウハウからなんとなくで理解しているのでご容赦ください


# 追加機能
[公式サイト](https://nodered.jp/blog/2019/09/30/version-1-0-released)から抜粋

## Asynchonous message passing
* 同期から非同期のメッセージパッシングに変更
* [このブログ記事](https://nodered.org/blog/2019/08/16/going-async)にアニメーション付きでついているのでわかりやすい。
    * 今まで(同期)：先に発火したフローが最後まで行くまで、次に発火したイベントは開始しない
    * これから(非同期):後から発火したフローも非同期で動作する。場合によっては追い越すこともあるので、直感に合わないこともある。
        * 分岐においても、分岐先Aが完了するのを待って、分岐Bが開始されるだったが、分岐A,Bが並列で処理される

* 今まで通りに処理したい場合は、`runtimeSyncDelivery: true` のオプションを付けると良いらしい

## Node Send API
* ランタイムでsendやdoneしたときに、コールバックが設定できるようになった
    * send:node.send()でメッセージを送るタイミングで呼ばれる
    * done:メッセージの送信が完了した時(↑が終わった時?)に呼ばれる
* 具体的には、`this . on ( ' input ' , function ( msg , send , done ) {/*ここにロジック*/} }) `のように仕掛ける

## Cloning messages
* Asynchonous message passingが導入されたことにより、msgオブジェクトが参照渡しのままでは安全ではなくなったので、クローンする
* 分岐処理などで従来どおりのメッセージの参照のやり方だと、非同期時に不整合を引き起こす可能性がある。
    * 分岐Aと分岐Bで並列処理をすると、ロジックによっては不整合になる
    * 直列であっても、非同期で順番が保証されないので、別のイベントが追い越すことでも起こり得る
* そこで、デフォルトでクローンをするように変更した。
    * ただし、クローンはコストが高い。
        * 一般的にはコスト的にも、影響範囲的にも問題になることは少ないが、ビデオフレームの高速処理など特定の場合には問題になる。
            * その場合は、 `node . send ( msg , false ); `とすれば前の動きになる

## Reorganised palette
* ノードのカテゴリを見直し、より良いと思われる順番になるようにした
    * 入力/機能/出力から、一部を取り出し、共通/機能/ネットワーク/入力/出力/シーケンス/パーサ/ストレージになった
    * 共通には、Inject,debug,catch,status,linkin,linkout,commentなど
    * シーケンスがsplit,join,sort,batchなど
    * パーサーはcsv,html,json,xml,yamlなど

## Removed nodes
* Twitter,Email,Feedparser,Sentiment,(RaspberryPi)のGPIOはデフォルトでは入らなくなったので、使う場合は明示的にインストールする必要がある

## Subflow Instance property UI
* サブフローに環境変数を設定できるようになり、サブフローに引き渡す個々のインスタンス値をオーバライドして、個別の振る舞いができるようになった
    * サブフローのテンプレート編集からチェックボックスや文字列を設定できるようにしておき、呼ばれる側のインスタンスでのプロパティで値を変えられる
* また、フローの外観を変えられるようになった

## Action List
* 表示->動作一覧が追加され、アクションリストが表示されるようになった
    * ショートカットキーでも可能：Ctrl+Shift+P(Windows) / Command+Shift+P(Mac)
* アクションリストは、エディタでできる多くのことをサポートしている
* また、ショートカットに、新しいデフォルトが追加された。
    * Cmd/Ctrl-Y ： Cmd/Ctrl-z元にCmd/Ctrl-zた最後の編集をやりなす
    * Cmd/Ctrl-Alt-L ：メッセージのデバッグサイドバーをクリア
    * Cmd/Ctrl-d ：フローを展開

## Visual JSON Editor
* JSONエディターに視覚的にJSONを編集できるモードを追加した
    * changeノードなどで、JSONを設定した場合に、「JSONを編集」の横に「ビジュアルエディタ」のタブが増えている
    * 編集も可能

## New wiring tricks
* ワークスペースでCtrlを押しながらクリックするとノードのクイック追加ダイアログが表示され、選択するとノードを追加できる
* 線の上で、Ctrlを押しながらクリックするとノードのクイック追加ダイアログが表示され、選択すると、２つのノードの間に挿入される

## More search results
* ノードの検索(Ctrl+F)は25件しか返さなかったが、25件以上返すようになった。(and moreが増えた)
    * 画面左のノードテンプレートの部分ではないです。

## New Import/Export dialogs
* 読み出し/書き出しで、クリップボード/ライブラリを選択するやり方だったが、読み込み/書き出しをクリックすると別のダイアログが起動し、ダイアログ内ですべてを操作できるようにUIが変更された

## Context Sidebar auto-refresh
* コンテキストサイドバー(コンテキストデータ)で、ノードとフローのコンテキストに、「選択対象が変化した場合更新」というチェックボックスが追加された

## Picking your language
* 設定 > 表示 の一番上に表示言語が追加された
    * デフォルトは「ブラウザのデフォルト」が選択されているが、日本語、英語、ドイツ語、韓国語、中国語が選べるようになった

## Editor CSS restructuring
* エディターの内部のスタイルが見直された
    * エディターで使用されるほとんどすべてのCSSクラスとDOM IDが変更された
* カスタムテーマなど外観を独自にいじっている人は、マイグレーションの対応を確認して、自分で修正をする必要がある


## Editor dependencies
* jQueryとjQuery-UIのバージョンをそれぞれ最新の3.4.1と1.12.1に更新
    * jQuery 3.x以前に依存していた多くの廃止されたAPIを削除するため、今のところ機能し続けるjquery-migrateも入れた
* Bootstrapは完全に削除した

## Node updates
* 軽微なバグFIXとコアノードの拡張が行われた。
    * CSVノード：数値のスマート検出をオフにして、それらを文字列のままにするオプションが追加
    * テンプレートノード：編集ボックスをフルスクリーンエディターに展開するオプションが追加
    * キャッチノードとステータスノード：対象とするノードを選択するのが簡単になった
        * ノードの長いリストから選択するだけでなく、ワークスペースに戻って必要なノードをクリックすることができる
    * MQTTノード：プロトコルの古い3.1バージョンではなく、デフォルトで3.1.1になった
    * Switchノード：値に関係なくオブジェクトに特定のプロパティが含まれているかどうかをチェックする新しい「has key」ルールが追加
    * HTTP Requestノード：キープアライブオプションを設定できるようになったため、接続を再利用できる
    * 
## New Docker Images
* 新しく提供するDockerImageに対して、大幅なオーバーホールが行われた。
    * 詳しくは[こちら](https://github.com/node-red/node-red-docker/blob/master/README.md)

## Flow Library Update
* [FlowLibrary](https://flows.nodered.org/) を刷新
    * 外見を新しくした
    * ノードと同じくフローも評価できるようにした
    * ノードとフローの集まりであるコレクションの概念を増やした
        * ダッシュボードやタスクスケジュールなどはすでにコレクションとして作成済