Node-REDは、フローで受け渡すメッセージを利用せずに異なるノード間で共有する情報を保管する方法を提供しています。 これは「コンテキスト」と呼ばれます。
特定のコンテキスト値の「スコープ」によって、誰と共有されるかが決定されます。 コンテキストスコープには3つのレベルが存在します。:
特定の値のスコープの選択は、その値がどのように利用されるかに依ります。
もし値が単一のノードからのアクセスだけで足りる場合、例えばFunctionノードなどの場合、 ノードコンテキストで充分です。
しばしば、コンテキストはある種の状態を複数のノード間で共有できるようにします。 例えば、センサーは定期的に1つのフローに値を送出しており、 最新の値を返却するために別のHTTPトリガーフローを作成したいかもしれません。 センサーの測定値をコンテキストに格納することで、HTTPフローが値を返却できるようになります。
設定ファイルのfunctionGlobalContext
プロパティを利用することで、
グローバルコンテキストに事前に値を設定することができます。
flow
コンテキストはこれらのノードで共有されますが、サブフローが存在するフローとは共有されません。
Node-RED 0.20版から、サブフロー内のノードはコンテキストキーの先頭に$parent.
をつけることで、
親フローのコンテキストにアクセスすることができます。
例えば:
var colour = flow.get("$parent.colour");
デフォルトでは、コンテキストはメモリのみに保存されます。 つまり、Node-REDを再起動するたびにコンテキストの内容はクリアされます。 0.19版リリースによって、コンテキストデータを保存するようにNode-REDを設定することが可能になり、再起動後も利用できるようになりました。
setting.js
のcontextStorage
プロパティは、
コンテキストデータがどのように保管されるかを設定するために利用できます。
これについて、Node-REDは2つのビルトインモジュールを提供します: memory
およびlocalfilesystem
。
また、他の場所にデータを保存するためのカスタムストアプラグインを作成することも可能です。
ファイルベースのストレージを使えるようにするため、以下のオプションを利用できます。:
contextStorage: {
default: {
module: "localfilesystem"
}
}
これによって、デフォルトのコンテキストストアがlocalfilesystem
プラグインのインスタンスになり、すべての設定がデフォルトに設定されます。
つまり、:
~/.node-red/context/
下のファイルにコンテキストデータを保管します。settings.js
ファイルにcontextStorage
へのエントリ例が存在しないかもしれません。
この場合、上述の例をコピーして自身のファイルに追加してください。1つ以上のストアを設定することができ、 ある値はローカルファイルシステムに保存し、ある値はメモリに保存するだけとすることができます。
例えば、デフォルトのストアは内蔵メモリのみに、2つめのストアはファイルシステムに設定するには、 以下のオプションを利用することができます。:
contextStorage: {
default: "memoryOnly",
memoryOnly: { module: 'memory' },
file: { module: 'localfilesystem' }
}
この例においてdefault
プロパティは、
コンテキストにアクセスするリクエストがストアを指定しなかった場合にNode-REDがどのストアを利用するかを伝えています。
localfilesystem
ストアを設定することを選んだ場合、
データを保管する異なるディレクトリを使用するため、
それらのdir
オプションを設定しなくてはなりません。
ストアの設定方法の詳細はこちらで確認することができます。どのような設定オプションが提供され、どのようにカスタムモジュールを作成するのかといったビルトインモジュールについてのすべての情報は、 APIのページで確認することができます。
コンテキストに値を設定する最も簡単な方法は、Changeノードを使用することです。
例えば、以下のようなChangeノードのルールによって、
msg.payload
の値をflow
コンテキストにmyData
というキーで保管します。
様々なノードで直接コンテキストにアクセスすることができます。 例えば、Injectノードはコンテキスト値を注入するように設定することができ、 Switchノードはコンテキストに保管された値をもとにメッセージをルーティングすることができます。
複数のコンテキストストアを設定した場合、 UIは値を保管するストアを選択できるようにします。
Functionノードの書き方ガイドに、 Functionノードでのコンテキストの使い方が記述されています。
ノードの開発ガイドにカスタムノードでのコンテキストの使い方が記述されています。
Changeノードに値の削除を設定することによってコンテキストを永久に削除することができます。
Node-RED: Low-code programming for event-driven applications.
Copyright OpenJS Foundation and Node-RED contributors. All rights reserved. The OpenJS Foundation has registered trademarks and uses trademarks. For a list of trademarks of the OpenJS Foundation, please see our Trademark Policy and Trademark List. Trademarks and logos not indicated on the list of OpenJS Foundation trademarks are trademarks™ or registered® trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.
The OpenJS Foundation | Terms of Use | Privacy Policy | OpenJS Foundation Bylaws | Trademark Policy | Trademark List | Cookie Policy