Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Changeノード 基本から応用まで
Search
Takeshi Ueno
November 02, 2022
Programming
0
600
Changeノード 基本から応用まで
2022/11/2に開催された
「Node-RED Park Vol.8 - Changeノード縛りの会!」
で用いた資料です
Takeshi Ueno
November 02, 2022
Tweet
Share
More Decks by Takeshi Ueno
See All by Takeshi Ueno
Node-RED Flow 大喜利 in Osaka
utaani
0
140
Node-RED 3.0 新機能紹介
utaani
1
1.4k
Node-REDを活用した社内向けIoTプロトタイピング基盤
utaani
0
1k
Node-REDを活用した社内向けIoTプロトタイピング基盤
utaani
0
2k
Node-RED初心者向けハンズオン教材
utaani
0
1.8k
小型LinuxボードとNode-REDでIoTプロトタイピング
utaani
0
920
Other Decks in Programming
See All in Programming
ハイパーメディア駆動アプリケーションとIslandアーキテクチャ: htmxによるWebアプリケーション開発と動的UIの局所的適用
nowaki28
0
390
CSC305 Lecture 17
javiergs
PRO
0
340
生成AIを利用するだけでなく、投資できる組織へ
pospome
0
240
tsgolintはいかにしてtypescript-goの非公開APIを呼び出しているのか
syumai
6
2.1k
Go コードベースの構成と AI コンテキスト定義
andpad
0
120
UIデザインに役立つ 2025年の最新CSS / The Latest CSS for UI Design 2025
clockmaker
18
7.2k
JETLS.jl ─ A New Language Server for Julia
abap34
1
180
ID管理機能開発の裏側 高速にSaaS連携を実現したチームのAI活用編
atzzcokek
0
210
Cap'n Webについて
yusukebe
0
120
無秩序からの脱却 / Emergence from chaos
nrslib
2
13k
全員アーキテクトで挑む、 巨大で高密度なドメインの紐解き方
agatan
8
20k
【CA.ai #3】ワークフローから見直すAIエージェント — 必要な場面と“選ばない”判断
satoaoaka
0
230
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
700
Optimizing for Happiness
mojombo
379
70k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
Building an army of robots
kneath
306
46k
Context Engineering - Making Every Token Count
addyosmani
9
490
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.7k
Transcript
1 2022.11.2 Node-RED UG Japan @utaani Node-RED Park Vol.8 Changeノード
基本から応用まで
2 自己紹介 @utaani (Takeshi Ueno) 電機メーカのインハウス IoT・クラウド屋/プロト屋/研修屋 Node-RED歴 7年(2015年~) facebookのNode-RED
UG https://www.facebook.com/groups/noderedjp で、Node-RED リリースの度ごとに、日本語情報提供中。 好きなノード: Changeノード、http requestノード 推しサードパーティノード: node-red-contrib-blockly (ja locale担当
3 Changeノード overview Changeノードとは ・coreノードのFunctionカテゴリの「標準ノード」 ・「ルール」に基づいて、オブジェクトを加工する ・対象オブジェクト(上段) msgオブジェクト flowコンテキスト globalコンテキスト
・ルールの種類: ・代入:オブジェクトにプロパティをセット/上書き ・置換:オブジェクトに対して検索と置換を実施 ・削除:オブジェクトのプロパティを削除 ・移動:オブジェクトのプロパティを移動/名前の変更 ・複数の「ルール」を上から順に実行する
4 Changeノード「ルール」について Changeノードの「ルール」実行 ・複数の「ルール」を上から順に実行する ・複数のプロパティを順にセットできる ・同じプロパティに対するルールは「上書き」 ・ルールの順番は入れ替え可能 ・ハンドルをつかんでドラッグ ルールの追加は、左下の[+追加]で
5 ルール1:代入(set) 代入:オブジェクトにプロパティをセット/上書き セットできるもの: ・msgオブジェクト ・flow/globalコンテキスト ・文字列 ・数値 ・真偽 ・JSONオブジェクト
・Bufferオブジェクト ・タイムスタンプ ・JSONata式 ・環境変数
6 ルール1:代入(set) 代入:オブジェクトにプロパティをセット/上書き セットの方向は「下から上」 ルールの下段に書いた値が 上段のプロパティとしてセットされる
7 ルール1:代入(set):Buffer 対象の値に「Buffer」(バイナリバイト列)を指定する 対象の値に直接JSON配列を書くか、 バッファエディタを使って文字列から変換できる msg.payloadがbuffer型になっている
8 ルール1:代入(set):JSONata式 対象の値に「JSONata式」を指定する JSONataの組み込み関数を使って Injectされたタイムスタンプ数値を 日本時間の日付時刻文字列に 変換する例 ※JSONata詳細については 「Node-RED Park
Vol.3-JSONataについて語ろう」 (2022/1/13開催)を参照ください
9 ルール1:代入(set):環境変数 対象の値に「環境変数」を指定する 3種類の環境変数 ・システム環境変数:Node-REDが動作している環境が設定しているもの (settings.jsやsystemdで設定) ・Node-RED環境変数:Node-REDが設定するフローやノードの情報(NR_で始まる) ・サブフロー/グループ環境変数:Node-REDのサブフローやグループ内で設定するもの
10 ルール2:置換(change) 置換:オブジェクトのプロパティ(文字列)を検索/置換する 最初のルールでセットした 文字列の一部を置換している 複数個所ある場合は全部置換される
11 ルール2:置換(change) 置換:プロパティを指定する必要がある (オブジェクトを指定しても書き換えられない) msg.payloadはオブジェクトなので、 値の置換にmsg.payloadを指定しても 置換は実施しない プロパティ(msg.payload.test)を 指定することで置換される
12 ルール2:置換(change):正規表現 置換:「検索する文字列」を、正規表現で指定できる 「置換後の文字列」で$1(キャプチャグループ)を指定できる 文字列先頭のhttpを httpsに置き換える例
13 ルール3:削除(delete) 削除:オブジェクトのプロパティを削除する
14 ルール4:移動(move) 削除:オブジェクトのプロパティを別のプロパティに移動する 移動元のプロパティがなくなり、「対象の値」に指定したプロパティに移る ・「対象の値」が存在した場合は上書きされる ・msgオブジェクトの移動の場合、プロパティの名称変更、と考えることもできる 動作が代入の時と逆(上から下)になることに注意が必要
15 プロパティをオブジェクトにする プロパティ(例: msg.payload)はデフォルトで「変数」 ・変数には値(文字列/数値/真偽値等)を セットできるが、 オブジェクトはセットできない changeノードでmsg.payloadに JSONオブジェクトをセットすることで msg.payloadが「オブジェクト」になり、
配下のプロパティを changeノードでセットできるようになる
16 「値のディープコピー」について 「値のディープコピー」をチェックすると、オブジェクトごとコピーされる ・プロパティが「変数」の場合は関係ない ・プロパティが「オブジェクト」の場合 「値のディープコピー」がない場合は、 コピー先のプロパティを変更するとコピー元も変更 「値のディープコピー」にチェックした場合は、 コピー先を変更してもコピー元は無関係
17 置換を利用した文字列プロパティの結合 置換後の文字列にプロパティを指定することで、文字列プロパティの結合を実現 msg.payloadにORGADDを代入し、 ORGをmsg.org ADDをmsg.add と置換することで、 msg.payload = msg.org+msg.add
を実現 JSONataを使うともっと柔軟にできる functionノードを使うとさらに...