SlideShare a Scribd company logo
1 of 20
Download to read offline
Copyright © Software Research Associates, Inc. All Rights Reserved
株式会社 SRA
阪井 誠
ファンクションノードのデバッグ
どうしてる?
Copyright © Software Research Associates, Inc. All Rights Reserved 1
自己紹介
• 阪井 誠 (株式会社SRA 関西事業部)
• Node-RED User Group Japan
• ソフトウェア技術者協会(SEA)
• ソフトウェアプロセス、Node-RED、チケット駆動
開発、アジャイル開発に興味を持つ。
• デブサミ講演は3回目。
• 1984年にSRAに入社して以来、UNIXをはじめとし
て、ソフトウェアプロセス、IoTなど、常に新しい
技術と向き合ってきた。
• Node-REDはタブが小さくなって見えなくなるころ
から使っています。
Copyright © Software Research Associates, Inc. All Rights Reserved
ファンクションノードを使っていますか?
•知っている人
•使ったことがある人
•バリバリ使っている人
Copyright © Software Research Associates, Inc. All Rights Reserved
ファンクションノードとは?
• Functionノードは、受け取ったメッセージに
対してJavaScriptコードを実行することができ、
フローを継続するためにゼロ個以上のメッセージ
を返します。
• メッセージはmsgと呼ばれる一つのオブジェクト
として渡されます。 このオブジェクトは慣例に
より、メッセージ本体を含むmsg.payload
プロパティを持っています。
• 独自のプロパティをメッセージに追加することも
可能ですが、そのことをドキュメントに記載する
べきです。
※Functionノードの書き方@Node-RED User Group Japan
Copyright © Software Research Associates, Inc. All Rights Reserved
ファンクションノードとは?
• Functionノードは、受け取ったメッセージに
対してJavaScriptコードを実行することができ、
フローを継続するためにゼロ個以上のメッセージ
を返します。
• メッセージはmsgと呼ばれる一つのオブジェクト
として渡されます。 このオブジェクトは慣例に
より、メッセージ本体を含むmsg.payload
プロパティを持っています。
• 独自のプロパティをメッセージに追加することも
可能ですが、そのことをドキュメントに記載する
べきです。
※Functionノードの書き方@Node-RED User Group Japan
便利にデバッグする方法を
説明します
Copyright © Software Research Associates, Inc. All Rights Reserved 5
目次
• ファンクションノードを使っていますか?
• ファンクションノードとは
• 目次
• デバッグ時に求められるもの
• よくあるデバッグ出力
• デバッグの分類
• msg相乗り
• 出力方法のいろいろ
• デバッグ情報を簡単に分離したい
• 端子追加時の問題
• まとめ
Copyright © Software Research Associates, Inc. All Rights Reserved 6
デバッグ時に求められること
• プログラムを一時的に修正して確認できる
• 簡単な記述であること
• 容易に元に戻せること
• 処理の追跡が容易なこと
• 他のログと混ざらないこと
• 探しやすいこと
• プログラム状態を見分けやすいこと
• 特定のデータの状態で表示できること
• 処理の実行が確認できること
Copyright © Software Research Associates, Inc. All Rights Reserved 7
よくあるデバッグ出力
• 恒常的
• log4js
• setting.jsでrequire+config+logger作成
• 業務ログに向くがデバッグ情報と混ざる
• file出力
• 面倒なわりに同時出力に弱い
• 端子を分けてデバッグノード(node.send())
• デバッグタブ/コンソール/ステータス
• 端子を分けるコードが面倒
• 一時的
• ファンクションノード
• コンソール(console.log)
• ステータス(node.status)
• https://nodered.jp/docs/creating-nodes/status
• msg相乗り
Copyright © Software Research Associates, Inc. All Rights Reserved 8
やってみよう!
[[CTRL] + [ / ] でON/OFF
Copyright © Software Research Associates, Inc. All Rights Reserved 9
デバッグの分類
デバッグ混合 デバッグ分離
常時出力 log4js ファイル出力
端子を増やして
デバッグノード
• 設計が必要
一時出力 node..send()
console.log()
node.status() • コメントアウト
でON/OFF
• 分岐が必要
他の情報と混在
する
確認しやすい
• ファンクションノードの中で出力しなければ、端子を
増やすか、msgに相乗りして出力しないといけない
Copyright © Software Research Associates, Inc. All Rights Reserved 10
• デバッグ情報
• Node.send(オブジェクト)
• オブジェクトの参照を送る(コピーではない)
• オブジェクト: {debug: “aaa”}
• msg.payloadを使うと分離が難しい
• 分離方法
• スイッチノード、ファンクションノード
• 意外とはまる
msg相乗り
Copyright © Software Research Associates, Inc. All Rights Reserved 11
やってみよう!
Copyright © Software Research Associates, Inc. All Rights Reserved 12
• デバッグノード
• デバッグタブ
• ステータス
• コンソール
• ディレイノード
• 勝手に戻るステータス
• Dashboard
• Notification
• Text
• ファイルノード
• httpStaticに置けばHTTP GETできる
出力方法のいろいろ
Copyright © Software Research Associates, Inc. All Rights Reserved 13
やってみよう!
Copyright © Software Research Associates, Inc. All Rights Reserved 14
デバッグ情報を簡単に分離したい
デバッグ混合 デバッグ分離
常時出力 log4js 端子を増やす
(デバッグノード)
設計が必要
一時出力 node..send()
console.log()
Node.status() コメントアウトで
ON/OFF
他の情報と混在
する
確認しやすい
ココ!
Copyright © Software Research Associates, Inc. All Rights Reserved 15
• 端子を増やすと配列を返さないといけない
• node.send([null,{payload:”処理開始”}]);
• 通常の情報も配列?
• return [msg, null]);
• 一時的に端子を増やすと大変(端子が多いと、、)
端子追加時の問題
Copyright © Software Research Associates, Inc. All Rights Reserved 16
• 端子を増やすと配列を返さないといけない
• node.send([null,{payload:”処理開始”}]);
• 通常の情報も配列?
• return [msg, null]);
• 一時的に端子を増やすと大変(端子が多いと、、)
端子追加時の問題
端子を追加しても、1つ目の端子だけに
出力する際は配列でなくて良い
Copyright © Software Research Associates, Inc. All Rights Reserved 17
やってみよう!
Copyright © Software Research Associates, Inc. All Rights Reserved 18
おわりに
• プログラムを一時的に修正して確認する
• デバッグ用に端子を増やしても既存コードは
そのままで良い
• コメントアウトは[CTRL]+[ / ]
• 処理の追跡が容易なこと
• デバッグノードの出力を切り分ける
• イベント的なものにはディレイノードや
Dashboardのnotificationが便利
• httpStaticにログ等を出力する
• プログラム状態を見分けやすいこと
• ファンクションノードやデバッグノードのstatusで
状態を表示
• Dashboardのtextも便利
Copyright © Software Research Associates, Inc. All Rights Reserved 19
ファンクションノードのデバッグ
どうしてる?
完

More Related Content

What's hot

「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
 

What's hot (20)

データで散らかった製造業界における最高の翻訳機 Node-RED
データで散らかった製造業界における最高の翻訳機 Node-REDデータで散らかった製造業界における最高の翻訳機 Node-RED
データで散らかった製造業界における最高の翻訳機 Node-RED
 
UIbuilderを使ったフロントエンド開発
UIbuilderを使ったフロントエンド開発UIbuilderを使ったフロントエンド開発
UIbuilderを使ったフロントエンド開発
 
Python x ハードウェアの可能性
Python x ハードウェアの可能性Python x ハードウェアの可能性
Python x ハードウェアの可能性
 
IoT GatewayとNode-REDの美味しい関係 - OpenBlocks IoTへのNode-REDの実装 -
IoT GatewayとNode-REDの美味しい関係 - OpenBlocks IoTへのNode-REDの実装 -IoT GatewayとNode-REDの美味しい関係 - OpenBlocks IoTへのNode-REDの実装 -
IoT GatewayとNode-REDの美味しい関係 - OpenBlocks IoTへのNode-REDの実装 -
 
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かすドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
 
MRTKをNreal Lightに対応させてみた
MRTKをNreal Lightに対応させてみたMRTKをNreal Lightに対応させてみた
MRTKをNreal Lightに対応させてみた
 
ia-cloudとNodeREDで作る工場IoT–センサ接続やダッシュボードのカスタムNode開発秘話
ia-cloudとNodeREDで作る工場IoT–センサ接続やダッシュボードのカスタムNode開発秘話ia-cloudとNodeREDで作る工場IoT–センサ接続やダッシュボードのカスタムNode開発秘話
ia-cloudとNodeREDで作る工場IoT–センサ接続やダッシュボードのカスタムNode開発秘話
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
 
Node-RED TIPS:functionノード間で関数を共有する方法
Node-RED TIPS:functionノード間で関数を共有する方法Node-RED TIPS:functionノード間で関数を共有する方法
Node-RED TIPS:functionノード間で関数を共有する方法
 
Node-RED導入時の効果的な開発を考える
Node-RED導入時の効果的な開発を考えるNode-RED導入時の効果的な開発を考える
Node-RED導入時の効果的な開発を考える
 
Spark MLlibではじめるスケーラブルな機械学習
Spark MLlibではじめるスケーラブルな機械学習Spark MLlibではじめるスケーラブルな機械学習
Spark MLlibではじめるスケーラブルな機械学習
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンFluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
 
ゲームの仕様書を書こうまとめ
ゲームの仕様書を書こうまとめゲームの仕様書を書こうまとめ
ゲームの仕様書を書こうまとめ
 
OpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみたOpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみた
 
Oss貢献超入門
Oss貢献超入門Oss貢献超入門
Oss貢献超入門
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 

Similar to [Node-RED] ファンクションノードのデバッグどうしてる?

新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 -
新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 - 新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 -
新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 -
Makoto SAKAI
 
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
YusukeKuramata
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンス
Kaoru NAKAMURA
 
#dnstudy 01 Unboundの紹介
#dnstudy 01 Unboundの紹介#dnstudy 01 Unboundの紹介
#dnstudy 01 Unboundの紹介
Takashi Takizawa
 
KOBE IT FESTIVAL 2012
KOBE IT FESTIVAL 2012KOBE IT FESTIVAL 2012
KOBE IT FESTIVAL 2012
Hiroshi Bunya
 

Similar to [Node-RED] ファンクションノードのデバッグどうしてる? (20)

新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 -
新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 - 新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 -
新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 -
 
ソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティングソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティング
 
OpenStack Swift紹介
OpenStack Swift紹介OpenStack Swift紹介
OpenStack Swift紹介
 
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
 
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
 
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
 
MySQLインストールのお作法
MySQLインストールのお作法MySQLインストールのお作法
MySQLインストールのお作法
 
人工知能のコードをハックする会 #2
人工知能のコードをハックする会 #2人工知能のコードをハックする会 #2
人工知能のコードをハックする会 #2
 
2016年11月19日 AITCシニア技術者勉強会 第1回「Arduinoを使ってみる」
2016年11月19日 AITCシニア技術者勉強会 第1回「Arduinoを使ってみる」 2016年11月19日 AITCシニア技術者勉強会 第1回「Arduinoを使ってみる」
2016年11月19日 AITCシニア技術者勉強会 第1回「Arduinoを使ってみる」
 
Node-redでプロトタイピング
Node-redでプロトタイピングNode-redでプロトタイピング
Node-redでプロトタイピング
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンス
 
OpenStack 向けネットワーク入門
OpenStack 向けネットワーク入門OpenStack 向けネットワーク入門
OpenStack 向けネットワーク入門
 
私とOSSの25年
私とOSSの25年私とOSSの25年
私とOSSの25年
 
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
 
Unityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconUnityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechcon
 
#dnstudy 01 Unboundの紹介
#dnstudy 01 Unboundの紹介#dnstudy 01 Unboundの紹介
#dnstudy 01 Unboundの紹介
 
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
 
OSC福岡 20111203
OSC福岡 20111203OSC福岡 20111203
OSC福岡 20111203
 
KOBE IT FESTIVAL 2012
KOBE IT FESTIVAL 2012KOBE IT FESTIVAL 2012
KOBE IT FESTIVAL 2012
 
OpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjugOpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjug
 

More from Makoto SAKAI

Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点
Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点
Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点
Makoto SAKAI
 
「なんで?」と「自分だったら」が属人化を防ぐ - 必要な時に必要なものを必要なだけ -
「なんで?」と「自分だったら」が属人化を防ぐ - 必要な時に必要なものを必要なだけ -「なんで?」と「自分だったら」が属人化を防ぐ - 必要な時に必要なものを必要なだけ -
「なんで?」と「自分だったら」が属人化を防ぐ - 必要な時に必要なものを必要なだけ -
Makoto SAKAI
 

More from Makoto SAKAI (20)

プロセスモデルの補完方法 -モデル・ノウハウ・人-
プロセスモデルの補完方法 -モデル・ノウハウ・人-プロセスモデルの補完方法 -モデル・ノウハウ・人-
プロセスモデルの補完方法 -モデル・ノウハウ・人-
 
プロセスモデルの補完方法 -モデル・ノウハウ・人-
プロセスモデルの補完方法 -モデル・ノウハウ・人-プロセスモデルの補完方法 -モデル・ノウハウ・人-
プロセスモデルの補完方法 -モデル・ノウハウ・人-
 
SQiP20222投稿応援フォーラム「開発現場で役立つ論文の書き方のお話」
SQiP20222投稿応援フォーラム「開発現場で役立つ論文の書き方のお話」SQiP20222投稿応援フォーラム「開発現場で役立つ論文の書き方のお話」
SQiP20222投稿応援フォーラム「開発現場で役立つ論文の書き方のお話」
 
メールやチャットでも役立つテクニック
メールやチャットでも役立つテクニックメールやチャットでも役立つテクニック
メールやチャットでも役立つテクニック
 
改訂版:開発現場で役立つ論文の書き方のお話
改訂版:開発現場で役立つ論文の書き方のお話改訂版:開発現場で役立つ論文の書き方のお話
改訂版:開発現場で役立つ論文の書き方のお話
 
(講演資料)開発現場で役立つ論文の書き方のお話
(講演資料)開発現場で役立つ論文の書き方のお話(講演資料)開発現場で役立つ論文の書き方のお話
(講演資料)開発現場で役立つ論文の書き方のお話
 
論理的思考力を身に着けるための論文研修
論理的思考力を身に着けるための論文研修論理的思考力を身に着けるための論文研修
論理的思考力を身に着けるための論文研修
 
SS2019 エッジデバイス開発の難しさ
SS2019 エッジデバイス開発の難しさSS2019 エッジデバイス開発の難しさ
SS2019 エッジデバイス開発の難しさ
 
スクリプト言語入門 - シェル芸のすすめ - 第2回クラウド勉強会
スクリプト言語入門 - シェル芸のすすめ - 第2回クラウド勉強会スクリプト言語入門 - シェル芸のすすめ - 第2回クラウド勉強会
スクリプト言語入門 - シェル芸のすすめ - 第2回クラウド勉強会
 
プロジェクトを成功させるチケット管理
プロジェクトを成功させるチケット管理プロジェクトを成功させるチケット管理
プロジェクトを成功させるチケット管理
 
Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点
Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点
Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点
 
Node-REDから見えた未来 - 変わるもの、変わらないもの -
Node-REDから見えた未来 - 変わるもの、変わらないもの -Node-REDから見えた未来 - 変わるもの、変わらないもの -
Node-REDから見えた未来 - 変わるもの、変わらないもの -
 
複合主キーの扱い方
複合主キーの扱い方複合主キーの扱い方
複合主キーの扱い方
 
UAS5 アジャイル開発に学んだアダプタブルウォーターフォール開発
UAS5 アジャイル開発に学んだアダプタブルウォーターフォール開発UAS5 アジャイル開発に学んだアダプタブルウォーターフォール開発
UAS5 アジャイル開発に学んだアダプタブルウォーターフォール開発
 
チケットの利用による経験を活かした開発の可能性
チケットの利用による経験を活かした開発の可能性 チケットの利用による経験を活かした開発の可能性
チケットの利用による経験を活かした開発の可能性
 
効果的な XP の導入を目的としたプラクティス間の相互作用の分析
効果的な XP の導入を目的としたプラクティス間の相互作用の分析効果的な XP の導入を目的としたプラクティス間の相互作用の分析
効果的な XP の導入を目的としたプラクティス間の相互作用の分析
 
「なんで?」と「自分だったら」が属人化を防ぐ - 必要な時に必要なものを必要なだけ -
「なんで?」と「自分だったら」が属人化を防ぐ - 必要な時に必要なものを必要なだけ -「なんで?」と「自分だったら」が属人化を防ぐ - 必要な時に必要なものを必要なだけ -
「なんで?」と「自分だったら」が属人化を防ぐ - 必要な時に必要なものを必要なだけ -
 
社会人のためのシンポジウム発表入門 リーン論文作法
社会人のためのシンポジウム発表入門   リーン論文作法社会人のためのシンポジウム発表入門   リーン論文作法
社会人のためのシンポジウム発表入門 リーン論文作法
 
パネル:Redmineの未来を考える
パネル:Redmineの未来を考えるパネル:Redmineの未来を考える
パネル:Redmineの未来を考える
 
古くて新しいサーバントリーダーシップ
古くて新しいサーバントリーダーシップ古くて新しいサーバントリーダーシップ
古くて新しいサーバントリーダーシップ
 

[Node-RED] ファンクションノードのデバッグどうしてる?

  • 1. Copyright © Software Research Associates, Inc. All Rights Reserved 株式会社 SRA 阪井 誠 ファンクションノードのデバッグ どうしてる?
  • 2. Copyright © Software Research Associates, Inc. All Rights Reserved 1 自己紹介 • 阪井 誠 (株式会社SRA 関西事業部) • Node-RED User Group Japan • ソフトウェア技術者協会(SEA) • ソフトウェアプロセス、Node-RED、チケット駆動 開発、アジャイル開発に興味を持つ。 • デブサミ講演は3回目。 • 1984年にSRAに入社して以来、UNIXをはじめとし て、ソフトウェアプロセス、IoTなど、常に新しい 技術と向き合ってきた。 • Node-REDはタブが小さくなって見えなくなるころ から使っています。
  • 3. Copyright © Software Research Associates, Inc. All Rights Reserved ファンクションノードを使っていますか? •知っている人 •使ったことがある人 •バリバリ使っている人
  • 4. Copyright © Software Research Associates, Inc. All Rights Reserved ファンクションノードとは? • Functionノードは、受け取ったメッセージに 対してJavaScriptコードを実行することができ、 フローを継続するためにゼロ個以上のメッセージ を返します。 • メッセージはmsgと呼ばれる一つのオブジェクト として渡されます。 このオブジェクトは慣例に より、メッセージ本体を含むmsg.payload プロパティを持っています。 • 独自のプロパティをメッセージに追加することも 可能ですが、そのことをドキュメントに記載する べきです。 ※Functionノードの書き方@Node-RED User Group Japan
  • 5. Copyright © Software Research Associates, Inc. All Rights Reserved ファンクションノードとは? • Functionノードは、受け取ったメッセージに 対してJavaScriptコードを実行することができ、 フローを継続するためにゼロ個以上のメッセージ を返します。 • メッセージはmsgと呼ばれる一つのオブジェクト として渡されます。 このオブジェクトは慣例に より、メッセージ本体を含むmsg.payload プロパティを持っています。 • 独自のプロパティをメッセージに追加することも 可能ですが、そのことをドキュメントに記載する べきです。 ※Functionノードの書き方@Node-RED User Group Japan 便利にデバッグする方法を 説明します
  • 6. Copyright © Software Research Associates, Inc. All Rights Reserved 5 目次 • ファンクションノードを使っていますか? • ファンクションノードとは • 目次 • デバッグ時に求められるもの • よくあるデバッグ出力 • デバッグの分類 • msg相乗り • 出力方法のいろいろ • デバッグ情報を簡単に分離したい • 端子追加時の問題 • まとめ
  • 7. Copyright © Software Research Associates, Inc. All Rights Reserved 6 デバッグ時に求められること • プログラムを一時的に修正して確認できる • 簡単な記述であること • 容易に元に戻せること • 処理の追跡が容易なこと • 他のログと混ざらないこと • 探しやすいこと • プログラム状態を見分けやすいこと • 特定のデータの状態で表示できること • 処理の実行が確認できること
  • 8. Copyright © Software Research Associates, Inc. All Rights Reserved 7 よくあるデバッグ出力 • 恒常的 • log4js • setting.jsでrequire+config+logger作成 • 業務ログに向くがデバッグ情報と混ざる • file出力 • 面倒なわりに同時出力に弱い • 端子を分けてデバッグノード(node.send()) • デバッグタブ/コンソール/ステータス • 端子を分けるコードが面倒 • 一時的 • ファンクションノード • コンソール(console.log) • ステータス(node.status) • https://nodered.jp/docs/creating-nodes/status • msg相乗り
  • 9. Copyright © Software Research Associates, Inc. All Rights Reserved 8 やってみよう! [[CTRL] + [ / ] でON/OFF
  • 10. Copyright © Software Research Associates, Inc. All Rights Reserved 9 デバッグの分類 デバッグ混合 デバッグ分離 常時出力 log4js ファイル出力 端子を増やして デバッグノード • 設計が必要 一時出力 node..send() console.log() node.status() • コメントアウト でON/OFF • 分岐が必要 他の情報と混在 する 確認しやすい • ファンクションノードの中で出力しなければ、端子を 増やすか、msgに相乗りして出力しないといけない
  • 11. Copyright © Software Research Associates, Inc. All Rights Reserved 10 • デバッグ情報 • Node.send(オブジェクト) • オブジェクトの参照を送る(コピーではない) • オブジェクト: {debug: “aaa”} • msg.payloadを使うと分離が難しい • 分離方法 • スイッチノード、ファンクションノード • 意外とはまる msg相乗り
  • 12. Copyright © Software Research Associates, Inc. All Rights Reserved 11 やってみよう!
  • 13. Copyright © Software Research Associates, Inc. All Rights Reserved 12 • デバッグノード • デバッグタブ • ステータス • コンソール • ディレイノード • 勝手に戻るステータス • Dashboard • Notification • Text • ファイルノード • httpStaticに置けばHTTP GETできる 出力方法のいろいろ
  • 14. Copyright © Software Research Associates, Inc. All Rights Reserved 13 やってみよう!
  • 15. Copyright © Software Research Associates, Inc. All Rights Reserved 14 デバッグ情報を簡単に分離したい デバッグ混合 デバッグ分離 常時出力 log4js 端子を増やす (デバッグノード) 設計が必要 一時出力 node..send() console.log() Node.status() コメントアウトで ON/OFF 他の情報と混在 する 確認しやすい ココ!
  • 16. Copyright © Software Research Associates, Inc. All Rights Reserved 15 • 端子を増やすと配列を返さないといけない • node.send([null,{payload:”処理開始”}]); • 通常の情報も配列? • return [msg, null]); • 一時的に端子を増やすと大変(端子が多いと、、) 端子追加時の問題
  • 17. Copyright © Software Research Associates, Inc. All Rights Reserved 16 • 端子を増やすと配列を返さないといけない • node.send([null,{payload:”処理開始”}]); • 通常の情報も配列? • return [msg, null]); • 一時的に端子を増やすと大変(端子が多いと、、) 端子追加時の問題 端子を追加しても、1つ目の端子だけに 出力する際は配列でなくて良い
  • 18. Copyright © Software Research Associates, Inc. All Rights Reserved 17 やってみよう!
  • 19. Copyright © Software Research Associates, Inc. All Rights Reserved 18 おわりに • プログラムを一時的に修正して確認する • デバッグ用に端子を増やしても既存コードは そのままで良い • コメントアウトは[CTRL]+[ / ] • 処理の追跡が容易なこと • デバッグノードの出力を切り分ける • イベント的なものにはディレイノードや Dashboardのnotificationが便利 • httpStaticにログ等を出力する • プログラム状態を見分けやすいこと • ファンクションノードやデバッグノードのstatusで 状態を表示 • Dashboardのtextも便利
  • 20. Copyright © Software Research Associates, Inc. All Rights Reserved 19 ファンクションノードのデバッグ どうしてる? 完