SlideShare a Scribd company logo
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

初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
 
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
NTT DATA Technology & Innovation
 
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
 
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
Daisuke Morishita
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
 
Jenkins 再入門
Jenkins 再入門Jenkins 再入門
Jenkins 再入門
Jumpei Miyata
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
terurou
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
NTT DATA Technology & Innovation
 
Node-REDからメール送信
Node-REDからメール送信Node-REDからメール送信
Node-REDからメール送信
Hitachi, Ltd. OSS Solution Center.
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Yuta Imai
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
NTT DATA Technology & Innovation
 
MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門
torisoup
 
コンテナを止めるな! PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
コンテナを止めるな!  PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとはコンテナを止めるな!  PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
コンテナを止めるな! PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
ksk_ha
 
「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer
Yuta Matsumura
 
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
gree_tech
 
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜
LINE Corporation
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
NTT DATA Technology & Innovation
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
Kohei Tokunaga
 

What's hot (20)

初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
 
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
 
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
Jenkins 再入門
Jenkins 再入門Jenkins 再入門
Jenkins 再入門
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
 
Node-REDからメール送信
Node-REDからメール送信Node-REDからメール送信
Node-REDからメール送信
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
 
MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門
 
コンテナを止めるな! PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
コンテナを止めるな!  PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとはコンテナを止めるな!  PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
コンテナを止めるな! PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
 
「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer
 
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
 
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
 

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

新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 -
新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 - 新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 -
新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 -
Makoto SAKAI
 
ソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティングソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティング
Ryohei Kamiya
 
OpenStack Swift紹介
OpenStack Swift紹介OpenStack Swift紹介
OpenStack Swift紹介
Kota Tsuyuzaki
 
デブサミ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
人工知能のコードをハックする会 #2
Ryohei 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
 
私とOSSの25年
私とOSSの25年私とOSSの25年
私とOSSの25年
MITSUNARI Shigeo
 
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
Tokoroten Nakayama
 
Unityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconUnityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechcon
DeNA
 
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 ファンクションノードのデバッグ どうしてる? 完