Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Changeノード 基本から応用まで
Search
Takeshi Ueno
November 02, 2022
Programming
0
540
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
130
Node-RED 3.0 新機能紹介
utaani
1
1.4k
Node-REDを活用した社内向けIoTプロトタイピング基盤
utaani
0
990
Node-REDを活用した社内向けIoTプロトタイピング基盤
utaani
0
1.9k
Node-RED初心者向けハンズオン教材
utaani
0
1.7k
小型LinuxボードとNode-REDでIoTプロトタイピング
utaani
0
910
Other Decks in Programming
See All in Programming
Gleamという選択肢
comamoca
6
710
生成AIコーディングとの向き合い方、AIと共創するという考え方 / How to deal with generative AI coding and the concept of co-creating with AI
seike460
PRO
1
240
プロダクト開発でも使おう 関数のオーバーロード
yoiwamoto
0
150
Benchmark
sysong
0
170
Javaに鉄道指向プログラミング (Railway Oriented Pro gramming) のエッセンスを取り入れる/Bringing the Essence of Railway-Oriented Programming to Java
cocet33000
2
540
PT AI без купюр
v0lka
0
230
単体テストの始め方/作り方
toms74209200
0
440
AWS CDKの推しポイント 〜CloudFormationと比較してみた〜
akihisaikeda
3
260
KotlinConf 2025 現地で感じたServer-Side Kotlin
n_takehata
1
210
SODA - FACT BOOK
sodainc
1
880
イベントストーミングから始めるドメイン駆動設計
jgeem
4
830
AIコーディング道場勉強会#2 君(エンジニア)たちはどう生きるか
misakiotb
1
180
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
524
40k
Git: the NoSQL Database
bkeepers
PRO
430
65k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
4 Signs Your Business is Dying
shpigford
184
22k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.3k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Faster Mobile Websites
deanohume
307
31k
Building Applications with DynamoDB
mza
95
6.4k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
6
690
Rails Girls Zürich Keynote
gr2m
94
14k
GitHub's CSS Performance
jonrohan
1031
460k
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ノードを使うとさらに...