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
660
0
Share
Changeノード 基本から応用まで
2022/11/2に開催された
「Node-RED Park Vol.8 - Changeノード縛りの会!」
で用いた資料です
Takeshi Ueno
November 02, 2022
More Decks by Takeshi Ueno
See All by Takeshi Ueno
Node-RED Flow 大喜利 in Osaka
utaani
0
150
Node-RED 3.0 新機能紹介
utaani
1
1.5k
Node-REDを活用した社内向けIoTプロトタイピング基盤
utaani
0
1.1k
Node-REDを活用した社内向けIoTプロトタイピング基盤
utaani
0
2k
Node-RED初心者向けハンズオン教材
utaani
0
1.8k
小型LinuxボードとNode-REDでIoTプロトタイピング
utaani
0
940
Other Decks in Programming
See All in Programming
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
280
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
490
AIとASP.NET Coreで雑Webアプリを作った話
mayuki
0
310
ふつうのFeature Flag実践入門
irof
7
3.5k
「エンジニアインターン、どうやって取った?」準備のリアルを語るLT会 Progate BAR
akiomatic
0
120
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.2k
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.1k
今さら聞けないCancellationToken
htkym
0
220
JJUG CCC 2026 Spring: JSpecify で実現する Kotlin フレンドリーな Java API 設計
ternbusty
1
140
AIチームを指揮するOSS「TAKT」活用術 / How to Use “TAKT,” an OSS Tool for Orchestrating AI Teams
nrslib
6
820
AutonomyとControlのあいだ:Graflowで記述するAIエージェント協調
myui
0
110
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
100
Featured
See All Featured
Docker and Python
trallard
47
3.9k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
280
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
860
Designing for Performance
lara
611
70k
The Limits of Empathy - UXLibs8
cassininazir
1
350
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
150
Rails Girls Zürich Keynote
gr2m
96
14k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
960
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
Mind Mapping
helmedeiros
PRO
1
230
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
200
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ノードを使うとさらに...