More Related Content
Similar to [Node-RED] ファンクションノードのデバッグどうしてる? (20)
More from Makoto SAKAI (20)
[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相乗り
- 13. Copyright © Software Research Associates, Inc. All Rights Reserved 12
• デバッグノード
• デバッグタブ
• ステータス
• コンソール
• ディレイノード
• 勝手に戻るステータス
• Dashboard
• Notification
• Text
• ファイルノード
• httpStaticに置けばHTTP GETできる
出力方法のいろいろ
- 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つ目の端子だけに
出力する際は配列でなくて良い
- 19. Copyright © Software Research Associates, Inc. All Rights Reserved 18
おわりに
• プログラムを一時的に修正して確認する
• デバッグ用に端子を増やしても既存コードは
そのままで良い
• コメントアウトは[CTRL]+[ / ]
• 処理の追跡が容易なこと
• デバッグノードの出力を切り分ける
• イベント的なものにはディレイノードや
Dashboardのnotificationが便利
• httpStaticにログ等を出力する
• プログラム状態を見分けやすいこと
• ファンクションノードやデバッグノードのstatusで
状態を表示
• Dashboardのtextも便利