Node-REDのフロー読み込みは慎重に行いましょう

Node-REDを仕事で使用しており、毎日フローを書いています。

新人の書いたNode-REDのフローを見たときに、意図的に作成していないのにノードの設定にhttpリクエストノードのTLS設定が沢山増えているという現象が起きて、フロー読み込み時のある挙動に気づいたので、情報共有したいと思い本記事を書きました。

# TLS設定ありのhttpリクエストノードのフローを読み込むとTLS設定が増えていく

現象
<blockquote class="twitter-tweet"><p lang="und" dir="ltr"><a href="https://t.co/bHa9sbnTnj">pic.twitter.com/bHa9sbnTnj</a></p>&mdash; Tosihiro Kominami (@komitosihiro) <a href="https://twitter.com/komitosihiro/status/1205112495020498944?ref_src=twsrc%5Etfw">December 12, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

他のNode-REDから、TLS設定ありのhttpリクエストノードを書き出したJSONデータを自分のNode-REDに読み込むとTLS設定が増えるということがわかりました。  

以下のJSONデータは、他のNode-REDからTLS設定ありのhttpリクエストノードを書き出したJSONデータです。動画では、このJSONデータを使用しました。

```
[{"id":"80f14d9f.3f28c","type":"http request","z":"e96a61d5.7593b","name":"","method":"GET","ret":"txt","paytoqs":false,"url":"https://example.com/hello","tls":"2f868ea4.38f572","persist":false,"proxy":"","authType":"","x":270,"y":120,"wires":[[]]},{"id":"2f868ea4.38f572","type":"tls-config","z":"","name":"","cert":"","key":"","ca":"","certname":"cert.pem","keyname":"key.pem","caname":"","servername":"","verifyservercert":true}]
```

JSONデータにTLS設定がある(`tls-config`以降の内容)ので、読み込むたびにTLS設定が増えると想定していたのですが、自分のNode-REDでhttpリクエストノードを書き出して、自分のNode-REDに読み込んだ場合はTLS設定が増えませんでした。
<blockquote class="twitter-tweet"><p lang="und" dir="ltr"><a href="https://t.co/goRcCCmgdn">pic.twitter.com/goRcCCmgdn</a></p>&mdash; Tosihiro Kominami (@komitosihiro) <a href="https://twitter.com/komitosihiro/status/1205328814416334849?ref_src=twsrc%5Etfw">December 13, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

以下のJSONデータは、自分のNode-REDからTLS設定ありのhttpリクエストノードを書き出したJSONデータです。動画では、このJSONデータを使用しました。

```
[{"id":"ee879241.2969f","type":"http request","z":"d5564071.3bb79","name":"","method":"GET","ret":"txt","paytoqs":false,"url":"https://example.com/hello","tls":"e341b60.d181c48","persist":false,"proxy":"","authType":"","x":110,"y":80,"wires":[[]]},{"id":"e341b60.d181c48","type":"tls-config","z":"","name":"","cert":"","key":"","ca":"","certname":"cert.pem","keyname":"key.pem","caname":"","servername":"","verifyservercert":true}]
```

以前、`node-red-contrib-aws-sdk`のカスタムノードを使用したときにも同じような現象が起きたことがありました。`node-red-contrib-aws-sdk`は、ノードの設定タブに`asw-sdk-config`（AWSアカウントのaccesskeyとsecretkeyの設定）が追加されるのですが、他のメンバーが作成しているNode-REDの`aws-sdk`ノードを自分のNode-REDの読み込むと他のメンバーの`aws-sdk-config`がノードの設定タブに追加されて、知らない間に他のメンバーのAWSアカウントを使いそうになったことがあります。（危険）

現在も次の動画のような感じでノードの設定タブに追加されます。
<blockquote class="twitter-tweet"><p lang="und" dir="ltr"><a href="https://t.co/K1FiKAnpKH">pic.twitter.com/K1FiKAnpKH</a></p>&mdash; Tosihiro Kominami (@komitosihiro) <a href="https://twitter.com/komitosihiro/status/1205266746518585344?ref_src=twsrc%5Etfw">December 12, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

以下のJSONデータは、他のNode-REDからaws-sdkノードを書き出したJSONデータです。動画では、このJSONデータを使用しました。

```
[{"id":"d3f782b9.e528a","type":"aws sdk","z":"d5564071.3bb79","name":"","func":"","outputs":1,"noerr":0,"config":"ea003768.3e5a38","x":800,"y":200,"wires":[[]]},{"id":"ea003768.3e5a38","type":"aws-sdk-config","z":"","name":"","accesskey":"YEKSSECCA","secretkey":"YEKSECRET","region":"ap-northeast-1","iamrole":false}]
```

# まとめ
1. 他のNode-REDのノードの設定ありのノードを読み込むとノードの設定タブに追加されます。
1. 自分のNode-REDの中でフローの書き出しと読み込みを行う場合は、ノードの設定タブに新たに追加されません。
1. 知らないうちに他人のクレデンシャル情報などを使う危険性があります。

他のNode-REDのノードの設定ありのノードを読み込む場合は、読み込んでデプロイする前にノードの設定タブを確認して適切な設定を使用しましょう。