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
570
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
1.9k
Node-RED初心者向けハンズオン教材
utaani
0
1.7k
小型LinuxボードとNode-REDでIoTプロトタイピング
utaani
0
920
Other Decks in Programming
See All in Programming
Google I/O recap web編 大分Web祭り2025
kponda
0
2.9k
No Install CMS戦略 〜 5年先を見据えたフロントエンド開発を考える / no_install_cms
rdlabo
0
480
CEDEC2025 長期運営ゲームをあと10年続けるための0から始める自動テスト ~4000項目を50%自動化し、月1→毎日実行にした3年間~
akatsukigames_tech
0
140
ゲームの物理
fadis
5
1.2k
新しいモバイルアプリ勉強会(仮)について
uetyo
1
260
Portapad紹介プレゼンテーション
gotoumakakeru
1
130
QA x AIエコシステム段階構築作戦
osu
0
270
兎に角、コードレビュー
mitohato14
0
130
Go製CLIツールをnpmで配布するには
syumai
2
1.2k
Constant integer division faster than compiler-generated code
herumi
2
660
書き捨てではなく継続開発可能なコードをAIコーディングエージェントで書くために意識していること
shuyakinjo
1
280
Understanding Kotlin Multiplatform
l2hyunwoo
0
260
Featured
See All Featured
Bash Introduction
62gerente
614
210k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Writing Fast Ruby
sferik
628
62k
Become a Pro
speakerdeck
PRO
29
5.5k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.8k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
BBQ
matthewcrist
89
9.8k
RailsConf 2023
tenderlove
30
1.2k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
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ノードを使うとさらに...