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
470
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
120
Node-RED 3.0 新機能紹介
utaani
1
1.3k
Node-REDを活用した社内向けIoTプロトタイピング基盤
utaani
0
930
Node-REDを活用した社内向けIoTプロトタイピング基盤
utaani
0
1.9k
Node-RED初心者向けハンズオン教材
utaani
0
1.6k
小型LinuxボードとNode-REDでIoTプロトタイピング
utaani
0
880
Other Decks in Programming
See All in Programming
ASP.NET Core の OpenAPIサポート
h455h1
0
160
Package Traits
ikesyo
2
230
CloudNativePGがCNCF Sandboxプロジェクトになったぞ! 〜CloudNativePGの仕組みの紹介〜
nnaka2992
0
190
『改訂新版 良いコード/悪いコードで学ぶ設計入門』活用方法−爆速でスキルアップする!効果的な学習アプローチ / effective-learning-of-good-code
minodriven
29
4.8k
Lookerは可視化だけじゃない。UIコンポーネントもあるんだ!
ymd65536
1
140
ファインディの テックブログ爆誕までの軌跡
starfish719
1
790
SpringBoot3.4の構造化ログ #kanjava
irof
2
780
[JAWS-UG横浜 #79] re:Invent 2024 の DB アップデートは Multi-Region!
maroon1st
0
130
ISUCON14公式反省会LT: 社内ISUCONの話
astj
PRO
0
140
富山発の個人開発サービスで日本中の学校の業務を改善した話
krpk1900
3
310
サーバーゆる勉強会 DBMS の仕組み編
kj455
1
360
ESLintプラグインを使用してCDKのセオリーを適用する
yamanashi_ren01
2
380
Featured
See All Featured
Producing Creativity
orderedlist
PRO
343
39k
Practical Orchestrator
shlominoach
186
10k
Docker and Python
trallard
43
3.2k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7.1k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Speed Design
sergeychernyshev
25
760
How to Ace a Technical Interview
jacobian
276
23k
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
990
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Thoughts on Productivity
jonyablonski
68
4.4k
How to train your dragon (web standard)
notwaldorf
89
5.8k
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ノードを使うとさらに...