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

CyberAgentのインフラについて メディア事業編 #catechchallenge
CyberAgentのインフラについて メディア事業編 #catechchallengeCyberAgentのインフラについて メディア事業編 #catechchallenge
CyberAgentのインフラについて メディア事業編 #catechchallengewhywaita
 
DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容sairoutine
 
Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Ryuichi Sakamoto
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンFluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンKentaro Yoshida
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装MITSUNARI Shigeo
 
プログラマ目線から見たRDMAのメリットと その応用例について
プログラマ目線から見たRDMAのメリットとその応用例についてプログラマ目線から見たRDMAのメリットとその応用例について
プログラマ目線から見たRDMAのメリットと その応用例についてMasanori Itoh
 
Node-REDのノード開発容易化ツール Node generator
Node-REDのノード開発容易化ツールNode generatorNode-REDのノード開発容易化ツールNode generator
Node-REDのノード開発容易化ツール Node generatorBMXUG
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門masayoshi takahashi
 
Fargate起動歴1日の男が語る運用の勘どころ
Fargate起動歴1日の男が語る運用の勘どころFargate起動歴1日の男が語る運用の勘どころ
Fargate起動歴1日の男が語る運用の勘どころYuto Komai
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjugYahoo!デベロッパーネットワーク
 
Raspberry PiのUSB OTGを試す
Raspberry PiのUSB OTGを試すRaspberry PiのUSB OTGを試す
Raspberry PiのUSB OTGを試すKenichiro MATOHARA
 

What's hot (20)

CyberAgentのインフラについて メディア事業編 #catechchallenge
CyberAgentのインフラについて メディア事業編 #catechchallengeCyberAgentのインフラについて メディア事業編 #catechchallenge
CyberAgentのインフラについて メディア事業編 #catechchallenge
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容
 
Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
 
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンFluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
GPU最適化入門
GPU最適化入門GPU最適化入門
GPU最適化入門
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
 
nginx入門
nginx入門nginx入門
nginx入門
 
プログラマ目線から見たRDMAのメリットと その応用例について
プログラマ目線から見たRDMAのメリットとその応用例についてプログラマ目線から見たRDMAのメリットとその応用例について
プログラマ目線から見たRDMAのメリットと その応用例について
 
Node-REDのノード開発容易化ツール Node generator
Node-REDのノード開発容易化ツールNode generatorNode-REDのノード開発容易化ツールNode generator
Node-REDのノード開発容易化ツール Node generator
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
Fargate起動歴1日の男が語る運用の勘どころ
Fargate起動歴1日の男が語る運用の勘どころFargate起動歴1日の男が語る運用の勘どころ
Fargate起動歴1日の男が語る運用の勘どころ
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
Raspberry PiのUSB OTGを試す
Raspberry PiのUSB OTGを試すRaspberry PiのUSB OTGを試す
Raspberry PiのUSB OTGを試す
 

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

新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 -
新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 - 新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 -
新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 - Makoto SAKAI
 
ソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティングソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティングRyohei Kamiya
 
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Developers Summit
 
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC EnterpriseYusukeKuramata
 
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜Hideki Takase
 
MySQLインストールのお作法
MySQLインストールのお作法MySQLインストールのお作法
MySQLインストールのお作法Meiji Kimura
 
人工知能のコードをハックする会 #2
人工知能のコードをハックする会 #2人工知能のコードをハックする会 #2
人工知能のコードをハックする会 #2Ryohei Kamiya
 
2016年11月19日 AITCシニア技術者勉強会 第1回「Arduinoを使ってみる」
2016年11月19日 AITCシニア技術者勉強会 第1回「Arduinoを使ってみる」 2016年11月19日 AITCシニア技術者勉強会 第1回「Arduinoを使ってみる」
2016年11月19日 AITCシニア技術者勉強会 第1回「Arduinoを使ってみる」 aitc_jp
 
Node-redでプロトタイピング
Node-redでプロトタイピングNode-redでプロトタイピング
Node-redでプロトタイピングMakoto SAKAI
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンスKaoru NAKAMURA
 
OpenStack 向けネットワーク入門
OpenStack 向けネットワーク入門OpenStack 向けネットワーク入門
OpenStack 向けネットワーク入門Dell TechCenter Japan
 
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話Tokoroten Nakayama
 
Unityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconUnityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconDeNA
 
Node-RED導入時の効果的な開発を考える
Node-RED導入時の効果的な開発を考えるNode-RED導入時の効果的な開発を考える
Node-RED導入時の効果的な開発を考えるMakoto SAKAI
 
#dnstudy 01 Unboundの紹介
#dnstudy 01 Unboundの紹介#dnstudy 01 Unboundの紹介
#dnstudy 01 Unboundの紹介Takashi Takizawa
 
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Takashi Sogabe
 
KOBE IT FESTIVAL 2012
KOBE IT FESTIVAL 2012KOBE IT FESTIVAL 2012
KOBE IT FESTIVAL 2012Hiroshi 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
 
Node-RED導入時の効果的な開発を考える
Node-RED導入時の効果的な開発を考えるNode-RED導入時の効果的な開発を考える
Node-RED導入時の効果的な開発を考える
 
#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
 

More from Makoto SAKAI

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