Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

2,043 views

Published on

Node-RED UG Osaka勉強会 vol.3 発表資料

Published in: Software
  • I like this service ⇒ www.WritePaper.info ⇐ from Academic Writers. I don't have enough time write it by myself.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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

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

×