無料ブログはココログ

効率的な開発を考えたらモダンアジャイルになった話 - Node-RED UG大阪 - #noderedjp

Node-RED UG Osaka 勉強会 Vol.2で発表してきました。色々トラブってご迷惑をおかけしました。説明が不十分だったので、説明をまとめておきます。

Node-REDは高度なソフトウェアを簡単に開発できるので、プログラミングの敷居を下げてくれます。しかし、少し大きなソフトウェアを開発し出す時には、それなりに考えて開発しないと、保守が難しく、効率が悪く、品質が低く、生産性が上がらなくなってしまいます。

具体的には、タブとリンク、サブフロー、カスタムノード、通信などで分割する。1対多の接続を避ける。msgオブジェクト、グローバルオブジェクトなどをデータモデリングする。常に動作を確認しながらインクリメンタル(漸増的)に開発し、機能テスト・非機能テストを工夫する。上流から仕様の確認に用いる。といった工夫が必要です。

アンケートから垣間見える内容を考察すると

  • ツールの知識やノウハウを共有すること
  • 特性を活かした設計で品質を作りこむこと
  • 実装を繰り返して常に確認すること
  • 上流から利用すること

という4点に集約されます。 情報共有や教育が重要であるだけでなく, 既存のプロセスをそのまま適用するのではなく, 積極的に変更することがプロセス改善につながります。

これらは、 従来のアジャイル開発のエッセンスを焼き直したモダンアジャイルの指導理念とも共通するものです。より良いソフトウェア開発が効率的な開発に繋がるのでしょう。

開発ノウハウや経験により得られた知識は、ドキュメントや書籍からだけではなかなか得られません。経験者の集まりであるユーザ会の今後に期待しています。

このエントリーをはてなブックマークに追加


プロのためのNode-RED再入門

社内勉強会より社外の勉強会と考えていますが、業務に合わせたテーマとしてNode-REDの社内勉強会を実施しました。私の部門ではそれなりに経験者がいますので、新しいバージョンのNode-REDを踏まえて、入門より少し上の話をしました。

Node-REDはノードと言われるモジュールを繋ぐだけで、高機能なソフトウェアを簡単に作ることができます。しかし、規模が大きくなると見た目もまさにスパゲティ状態になり、デバッグや保守が難しくなります。

そのような問題は、今回説明した構造化、設計、テストの基本的な知識があるだけで改善できます。 CC Attribution-NonCommercial License(CC BY-NC)で公開しています。ぜひ、この資料をご活用ください。

このエントリーをはてなブックマークに追加


[#Node-RED]インジェクトノードで定期処理 - ポーリングとバッチのヒント -

SRA Advent Calendar 2017 9日目からの転載です)

今回はインジェクトノードによる定期処理とそのヒントを説明します。

1. インジェクトノード

インジェクトノードというのはNode-REDの最初のサンプルでほぼ間違いなく使われるノードです。左の四角い所を押すと現在時刻や文字列、JSONオブジェクトなど設定したデータがmsg.payloadにセットされて送信されます。

20171209_153945_3

インジェクトノードは多機能で、起動時にメッセージを送信して初期処理を実現できますし、「繰り返し」の設定で定期的にメッセージを送信してポーリング処理やバッチ処理を実現することもできます。「繰り返し」をセットすると、インジェクトノードに丸矢印が表示されます

2.ポーリング処理とバッチ処理

ポーリング処理というのはデータ取得の方法です。センサーや通信装置などからデータが送られ無い場合、プログラムの側からデータを取りに行く必要がありますので、求められる時間間隔でポーリングし(取りにいき)ます。

バッチ処理というのは必ずしも定期処理ではなく、まとめ処理を実行するという意味です。UNIX系のcron処理やジョブスケジューラやタスクスケジューラなどと組み合わせて定期処理を実現されることも多いので、ここではバッチ処理と呼びます。

フロントエンドで受信したデータを蓄積し、バックエンドのバッチ処理で定期的にまとめて処理します。こうすることで同時処理を避けることができ、CPUやメモリなどのリソースを効率よく利用することができます。

3. インジェクトノードによる定期処理

インジェクトノードの「繰り返し」では、以下の3種類(と「なし」)を設定できます。

3.1 指定した時間間隔

サーバやセンサから定期的にデータを取得したり、DBにあるデータを定期的に処理する場合に用います。秒、分、時間で指定できます。

20171209_135528_3

3.2 指定した時間間隔、日時

曜日と時間帯を1時間単位に指定し、分単位で定期的に処理ができます。cronで実行されるので、あまり精度は期待できません。

20171209_135713_3

3.3 指定した日時

曜日と時刻を分単位に指定し、定期的に処理ができます。cronで実行されるので、あまり精度は期待できません。

 

20171209_135747_3

4. ヒント

4.1 より短い間隔で実行する

例えば0.5秒ごとに実行したい場合は、インジェクトノードを1秒間間隔で指定し、出力を二股に分けて一方をディレイノードで500ミリ秒遅延させます。こうすると、メッセージが0.5秒ごとに送られる様になります。

20171209_153616_3

片側に1ms、もう一方に501msのディレイを入れると一旦両方のディレイノードが実行されるので、 より精度が上がるでしょう。ただし、精度はそれなりですので、あまり細かくしたり、後続の処理が重かったりすると、うまく動かないので注意してください。

4.2 重複に注意

繰り返しの時間感覚よりも処理時間がかかると処理が重複しますので、注意してください。処理が重複すると、同じデータを2回処理してしまったり、メモリなどのリソースが不足する可能性があります。

4.3 別の方式も検討する

バッチ処理の場合、ディレイノードでキューイングする方法も検討してください。この場合、実行中のデータは保存されないので気をつけてください(バッチ処理でも蓄積する際に永続化しないなら同じです)。このほかにも、クラウドのサービスなどでもキューイングできるでしょう。

5. まとめ

インジェクトノードによる定期処理とそのヒントを説明しました。IoT開発ツールとして以前から繰り返し実行ができましたが、最近はノードに繰り返しの表示が出る様になって、より使いやすくなりました。

Node-REDの面白いところは、シンプルな機能を組み合わせて色々なことが簡単にできる所だと思います。ぜひ、みなさんもインジェクトノードを使って色々と工夫してください。

# おまけ
標準のインジェクトノードでも工夫次第で様々な処理が可能ですが、bigtimerノードならより直感的な設定ができるようです。

このエントリーをはてなブックマークに追加


Node-REDでプロトタイピング - お手軽テストダブルのデモ -

年忘れLT宴会<第60回IT勉強宴会>でLT発表&デモしました。

テストダブルの必要性

ソフトウェア開発をしていると、スタブ、ドライバ、モック、シミュレータといったいわゆるテストダブルが必要な時があります。

単体テストする時だけでなく、通信相手の開発が遅くなる時や、並行開発する際にインタフェースだけプロトタイプで開発してそれをテストダブルとして利用するなど、テストや開発で様々なパターンがあるでしょう。

特に初めての環境であったり、ユーザインタフェースの確認、 性能を確認するなど、確認したい部分をプロトタイピングする時には、テストダブルが必要になります。

テストダブルは様々な場面で活躍してくれますが、その開発に工数がかかっていては効果が半減してしまいます。そこで、Node-REDで簡単に開発しましょう!と言う提案です。

デモ内容

バーコードリーダーをあてると、商品の説明と価格が表示される機械を考えてみます。
今回は商品コードだけを使いましたが、顧客毎に割引された価格が表示されるなら、展示会やショールームなどで使えるかも知れません。

商品の説明と価格はサーバーから得ます。端末からHTTP POSTで送信された商品コードで検索し、商品の説明と価格を返します。

クライアント端末は製造に時間がかかるので、Web画面で商品コードを入力し、送信ボタンを押すとサーバーにPOSTして、レスポンスで得られたテキストを表示します。

プログラムの説明

サーバーはひとまずif分でレスポンスを変更する様にしました。DBの代わりにグローバルオブジェクトを用いるとそれっぽくなるでしょう。本格的に作るときは専用のノードがありますので、DBサーバーを立てるか、SQLiteで良いかも知れません。

クライアントはテキスト入力を同一タブ内で有効なフロー変数に保存しておき、送信ボタンを押すとその内容を送信します。テキスト入力ノードのディレイを0秒にして改行で送信すればボタンを無くせますが、拡張性を考慮しました。

テキスト入力ノードをUSBやシリアルから読み出すノードに変更すればバーコードリーダーをつなげられるでしょう。また、RFタグのリーダーなど、他のハードを繋ぐことも可能でしょう。

デモソース

ソースは以下になります。今回は簡単にGUIが開発できるDashboardを使いましたので、右上のメニューにあるパレットの管理でインストールしてから、Node-REDに読み込んでください。

サーバー

クライアント(テストアプリ)

このエントリーをはてなブックマークに追加


Visual IoT 開発ツール Node-RED が盛り上がってきた - 新刊2冊 -

IoTって言うけれど、ハードウェアの情報を収集したり、サーバーを構築するのは結構面倒でした。そこに現れたのが  Visual IoT 開発ツール Node-RED です。

Node-RED は以下のような特徴を持ちます。

  • Node.jsの非同期処理をVisualに、しかも簡単に扱える
  • ハードウェア接続や通信など標準モジュール(ノード)が豊富
  • 多くのソフトウェアがcontribute されている。中でもdashboardを利用すれば、テスト用のUIが簡単に作れる

そんな、Node-REDの書籍が2017年夏以降に2冊出版されました。しかも良く書けていてお勧めです。

【1】つないで つないで プログラミング Node-REDでつくる初めてのアプリ

基本的な操作だけで半分のページが使われ、ユーザーズマニュアルの様に丁寧に書かれていています。

このブログでもNode-REDを紹介してますが、ここまでは詳しく書けません。まわりにユーザがいない方には頼りになる存在でしょう。

【2】はじめてのNode‐RED

はじめてのと書かれていますが、バランス良く書けた入門書です。初めての方でも、Node-REDらしいプログラムを楽しみながら読めると思います。

Node-REDの日本語情報を提供しているNode-REDユーザグループジャパンhttps://nodered.jp/執筆とあって、興味を惹く内容が色々と乗っています。

一見、おもちゃの様に見えるNode-REDですが、実際に使ってみると、高機能なソフトウェアを簡単に書くことができて驚きます。良い本が2冊も発売されて、いよいよ本格普及が始まりそうです。

このエントリーをはてなブックマークに追加

[#Node-RED] 7〜8分でわかるファンクションノード

Photo

Visual IoTツール Node-REDには、データセットや基本的な制御構造がありますので、簡単なプログラムならコーディングなし(設定だけ)でプログラムを書くことができます。

しかし、少し複雑な処理になるとファンクションノードが便利です。ファンクションノードはjavascriptでコーディングできますので、複雑な処理をフローにまとめることができ、シンプルなわかり易いフローが書けます。

1.基本

まずは基本的な内容から。

1.1 名前をつけよう

ノードには日本語で名前を付けることができます。処理内容を表す名前を付けておくとフローが読み易くなります。「XXに変換する」「msg.cnt++」などわかり易い名前を付けてください。

1.2 入力は最大一つ、出力は複数可能

ファンクションノードの入り口は一つだけです。デフォルトの出力は一つですが、下部にある出力数を変更して増やすことができます。出力が複数場合は戻り値を配列で返します。出力しない出口にはnullをセットします。条件によってどれか一つに値を出力するだけなら、スイッチノードに渡した方が、修正が楽な場合もあるでしょう。
(追記:バージョン0.17以降では端子に名前をつけるとマウスオーバーで表示できますので、入出力などをわかり易く書いておくと良いでしょう。)

1.3 javascriptでコーディング

内蔵エディタはjavascript構文を理解してエラーやワーニングを表示してくれます。Node-REDが動作するNode.jsのバージョンの文法で記述します。msgオブジェクトを受け取って処理し、リターンバリューがmsgオブジェクトになります。

2.あらかじめ定義されたオブジェクト

msgオブジェクト以外のあらかじめ定義されたオブジェクトを説明します。

2.1 グローバルオブジェクト

プログラム全体で利用可能なグローバル変数が使えます。
global.get(‘オブジェクト名’)で取得し、 global.set(‘オブジェクト名’,値)で値を設定します。現在は永続化されないので、再起動で初期化されます。

2.2 フローオブジェクト

タブ内で有効なフロー変数もあります。
flow.get(‘オブジェクト名’)で取得し、flow.set(‘オブジェクト名’)で値を設定します。
永続化されないので、再起動で初期化されます。

2.3 node.send()

一つの出口に複数返す場合や、無名関数内で終了する場合は、returnでなく、 node.send(msgオブジェクト)を用います。returnは最後の一度死活変えませんし、無名関数内のreturnは全体の戻りではないからです。

2.4 require は setting.js で

ファンクションノード内で requireできません。requireが必要な場合は、ユーザーディレクトリ( ホームディレクトリ/.node-red)のsetting.jsのfunctionGlobalContextにrequireを追加します。Node-REDを再起動すると、設定したオブジェクトを global.get(‘オブジェクト名’) で取得できます。もちろん、必要に応じてユーザーディレクトリで、モジュールをnpmインストールする必要があります。

3.オブジェクトの管理

簡単に見えるNode-REDプログラミングですが、意外とハマるのがオブジェクトの管理です。

3.1 msg.payloadは基本

標準的な出力はmsg.payloadですが、破壊されることも多いです。payload以外のプロパティを使えば多くの場合は大丈夫です。しかし、新しいmsgオブジェクトが生成される場合は、フロー変数やグローバル変数を使います。

3.2 新しいmsgオブジェクトで返す

受け取ったmsgオブジェクトを渡したくない場合は、「return {payload: 値};」とすると新しいオブジェクトのmsg.payloadとして値を返すことができます。ただし、後続の処理で、受け取ったmsgオブジェクトの値を渡せないので注意してください。特にhttp inが出力するmsgオブジェクトには、http responseに必要な情報が含まれますので注意してください。

3.3 コピーされるオブジェクト

「return [msg, msg];」のようにmsgオブジェクトを複数同時に返すと、オブジェクトッがコピーされ、異なるオブジェクトが渡されます。また、一つの出口から複数のノードに繋いだ場合もコピーされます。大量データを扱う場合には注意してください。新しいmsgオブジェクトを生成するか、node.send()で出力すると参照が渡されます(参照を渡すと想定外に内容が破壊されてしまうことがありますので注意してください)。

4.おわりに

簡単に始められるNode-REDプログラミングですが、ドキュメントをきちんと読んだり、色々試さないとわからないことがあります。ここに挙げた内容がわかっていれば、少し複雑な処理もスラスラと書けると思います。

詳しくは、公式ドキュメント(英語)の確認や、実際に動かすなどしてください。それでも困った時は、ユーザー会slackやメーリングリストなど(英語)で聞いてみると良いと思います。

このエントリーをはてなブックマークに追加

Node-REDで品質の高いソフトウェアを開発する

開発者へのアンケートによると、Node-REDを用いると高品質なソフトウェアが開発できることがわかりましたが、そこには注意点がありました(Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点 - SS2017 -)。

Node-REDで開発する際にはNode-REDに合わせた設計やテストが必要です。順に説明しましょう。

データ設計

Node-REDのノードは関数ではなく、msgオブジェクトを加工しながら処理を進めますので、msgオブジェクトのデータ構造をきちんと決めておかないと、混乱してバグの原因になります。

msgオブジェクトと同じ様に処理館の共通データであるフロー変数やグローバル変数、データベースも同様にデータ構造をきちんと決めておきます。

構造設計

フローをどのように構成するか、非同期並行処理(コールバック地獄よさようなら。Node-REDで非同期処理を使いこなせ! )か順次処理かを検討します。非同期処理は処理が速く効率的です。一方の順次処理はメモリーをあまり消費しないので、大量データを扱う際に有利です。メモリー消費が多いとシステムやDBノードが止まることもありますので、注意深く検討してください。

システム間連携

前回(Node-REDでより大規模な開発を - モジュール化とフロー・システム間連携 - )に書いた様に様々な連携方法があります。それぞれの長所短所を検討して方式を決めてください。

いずれの場合もなるべく早い時期から結合すれば、信頼性を高めることができます。

モジュール設計

いわゆるモジュール強度(凝集度)や結合度を考慮してモジュール化します。なるべく単機能のノードやサブフローになる様に、インタフェースのデータ構造が単純になる様に設計します。

また、ノードの出力するオブジェクトがが参照なのか、データのコピーなのか、あるいは新しいオブジェクトにするのかを検討します。新しいオブジェクトにすると、渡していないデータは破壊されます。特にhttpレスポンスには多くのデータが必要ですので注意してください。

逐次開発・テスト

いわゆるxunitはカスタムノードでないと利用できません。改造する際はデグレが生じ易いので気をつけてください。良いモジュール構造にして、逐次開発とテストを並行して行います。

少しずつ開発しながら随時テストすることで、信頼性の高いソフトウェアを増やしていきます。常に追加した部分を動作確認すれば、まとめてテストした場合よりも抜けが少ない様です(Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点 - SS2017 -)。

機能テスト

機能テストを行う際は、機能の観点だけでなく、データの網羅性に注意すると良いでしょう。いわゆる界値に注目してテストデータを決めます。

Node-REDはスタブやモック、ドライバなど、いわゆるテストダブルの開発にも向いています。実機の利用が難しい場合に検討すると良いでしょう。特にDashboardを利用すると、使い易いテスト環境が実現できるでしょう。

非機能テスト

デバッグノードなどを不用意に繋ぐと、フローの二股に分かれたところでデータがコピーされ、メモリー負荷や、処理速度の低下に繋がるので注意してください。

Node-REDはNode.js上で非同期に動作しますので、スレッドによる実装よりも線形に性能が出ますが、残念ながら上限性能は存在します。小規模なテストで安心しないで、想定される負荷を実際に与えてテストしてください。

おわりに

Node-REDを使うと簡単に動くプログラムができます。しかし、ある程度規模が大きくなると、設計やテストの戦略が必要になります。

ここに挙げた方法は一例に過ぎません。開発対象や環境に合わせて実施してください。

このエントリーをはてなブックマークに追加

Node-REDでより大規模な開発を - モジュール化とフロー・システム間連携 -

Node-REDはマルチユーザ対応に向けてバージョンアップが進んでいますが、現在のエディタは基本的に一人でしか使えません。しかし、モジュール化やフロー・システム間連携を使えば、複数人で連携してより大規模な開発ができます。

1.  機能モジュールの作成方法

(1-1) エクスポート/インポート

エディタ上の任意のフロー/現在のタブ/全てのタブをJSONでエクスポートして人に渡したり、エクスポートしたJSONを受け取ってインポートすることができます(もちろんバックアップや複製にも使えます)。

エクスポートはフローを選択した後に、
 右上のハンバーガー(3本線)メニュー ⇒ 書き出し ⇒ クリップボード
を選択すると、 エクスポートのダイアログが表示されますので、選択したフロー/現在のタブ/全てのタブ、 それをコピーします。インデントのないJSONフォーマット/インデントのあるFOMAとを選択し、クリップボードに書き出します。

インポートは、
 右上のハンバーガーメニュー ⇒ 読み込み ⇒ クリップボード
を選択すると、 インポートのダイアログが表示されますので、現在のタブか新規のタブを選択して、エディタにコピーします。

(1-2) サブフロー

フローが大規模になると、同じフローが何度も出てくるなど見通しが悪くなりがちです。フローの一部をサブフローと呼ばれるモジュールを定義して扱うことができます。

右上のハンバーガーメニュー ⇒ サブフロー ⇒ サブフローを作成を選択すると、左ペインにサブフローが追加されサブフローのタブが開かれます。プロパティを編集するとサブフロー名や情報タブに表示される詳細情報を編集できます。入力(最大1つ)や出力(0以上)を設定すると、inputやoutputが表示されます。

またはサブフローにしたいフローの部分を選択しておいて、ハンバーガーメニュー ⇒ サブフロー ⇒ 選択部分をサブフロー化を選択するとその部分がサブフローになり、左ペインにサブフローが追加されます。左ペインのサブフローをダブルクリックするか、エディタ上のサブフローをダブルクリックして「フローのテンプレートを編集」をクリックすると、サブフローのタブが開かれます。

サブフローのタブを閉じてもサブフローは消えませんので、サブフローのタブを開いて削除します。

(1-3) カスタムノード

ユーザが独自のノードをJavascriptとHTMLで書くことができます。requireもできますので、様々なノードを 作ることもできます。 詳しくはCreating Nodesを見てください。

2. フロー・システム間連携

機能モジュール毎に担当者を分けて開発し、それらを以下のような方法でつなぎ合わせれば、より大きなシステムを作ったり、外部のシステムと連携することができます。

(2-1) デバッグノードの出力をインジェクトノードで送信

別の担当者のモジュールと接続する部分にデバッグノードをつないで、その出力のJSONをコピー(取り出)して担当者に渡します。担当者は受け取ったJSONをインジェクトノードに設定すると、異なるNode-RED間を直接つながないで、JSONデータを介してフローの続きを開発することができます。

(2-2) 異なるタブをリンクノードでつなぐ

機能ごとにタブを分けて、それぞれに担当者を決めておくとマージが容易になります。各タブのフローを繋いで大きなフローとするには、出力と入力のリンクノードを使います。

リンクノードは複数への出力や、複数からの入力の設定が可能です。リンクノードにわかりやすい名前をつけておくと良いでしょう。

(2-3) グローバル/フロー変数結合

取得したデータをメモリーやストレージに保存し、それを一定のタイミングで取得することも可能です。インジェクトノードで繰り返しを設定すると、一定間隔や指定日時、あるいはその組合せで処理を実行して、いわゆるポーリング処理やタスク処理を実現できます。

最も簡単な方法はグローバル変数やフロー変数を用いる方法です。グローバル変数は全てのノードから参照・更新が可能で、(いまのところ)Node-RED起動時に初期化されます。フロー変数は同じタブ(フロー)内のノードから参照・更新が可能で、デプロイ時に初期化されます。

(2-4) 処理間連携

httpノードやwebsocketノードを使えば、他のシステムと連携することができます。http inノードで要求を受けたら、同じ処理のフローにhttp responseノードを入れないと呼び出しが終了しないので気をつけてください。また、http requestノードは出力形式を文字列、バイナリバッファ、JSONを選ぶことができます。

他システムのデータをタスク処理やポーリング処理をするなら、ファイルやデータベースを使うと良いでしょう。ファイルは入出力のほかwatchノードで更新を検出することができます。また、カスタムノードをインストールすればPostgreSQLやSQLiteなどのデータベースを利用することができます。

3. おわりに

Node-REDで開発する際のモジュール化とフロー・システム間連携についてまとめました。

ここに挙げた方法を用いれば、複数人でNode-REDを用いてより大規模なシステムを開発することができます。みなさんも色々と工夫してください。

開発者へのアンケートによれば、大きなシステムを開発する場合はここにあげた方法だけでなく、設計やテストを工夫することで高品質なソフトウェアを短期間で開発することができます(Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点 - SS2017 -)。設計やテストの工夫もいつかまとめたいと思います(Node-REDで品質の高いソフトウェアを開発する)。

このエントリーをはてなブックマークに追加

Node-REDから見えた未来 - 変わるもの、変わらないもの - SS2017 WG13

ソフトウェアシンポジウム(SS2017)では、前回紹介した論文発表のほか、ワーキンググループにも参加しました。

ワーキンググループでは各グループのテーマに沿って、参加者がそれぞれのポジションを発表して議論します。私が参加したのはWG13「ソフトウェア開発の現状と今後の発展に向けたディスカッション」で「Node-REDから見えた未来 - 変わるもの、変わらないもの -」を発表しました。

Node-REDは高機能なノード(モジュール)がたくさんあり、それらを組み合わせて高機能なシステムを効率的に開発できます。また、簡単にデバッグできるほか、デプロイが一瞬で、開発から確認の繰り返しを素早く実行できます。

このような環境を使っていると、面倒臭いことがなくなり、ソフトウェア開発に重要な作業を中心に実施する様になります。この重要なことはみなさん合意できますよね。という発表でした。

しかし、Node-REDのデモのインパクトが大きかったのか、Node-REDに対する質問で持ち時間が終わってしまいました。Node-REDを知ってもらえたので、良かったことにしておきます。

このエントリーをはてなブックマークに追加

Visual開発ツールNode-REDの導入によるプロセスの変化と考慮点 - SS2017 -

ソフトウェアシンポジウム2017(SS2017)で経験論文の発表をしてきました。経験論文とは研究論文の様に新規性はないものの、事例報告の様に経験を報告するものですが、問題設定や結果・考察を整理してより有効性や信憑性を高めて論文にまとめたものです。

今回はVisual IoTツールと呼ばれているNode-REDのアンケート結果を報告しました。ソフトウェア開発にツールは欠かせませんが、その導入報告はあまりありません。上流のツールであれば、コンサルタントに依頼することもできるかも知れませんが、下流のツールは小さい規模から始めることが多く、導入経験は他の人にも役に立つと思ったからです。

発表ではNode-REDの基本、長所・短所の説明と共にデモもしました。基本的な Hello World のノードを入れ替えてPathをセットするだけで、そのビジネスロジック(文字列の代入)をそのままWebサービスにできる様子をお見せしました。

このようにNode-REDは確認しながら開発するので短期間に品質の高いソフトウェアを作ることができ、アンケートにもある様に非同期処理が簡単に扱えます。その反面、ある程度の規模になれば、データやアーキテクチャなどの設計をきちんとしておかないと複雑になってしまいます。

そういった知識を持ち、ふさわしいプロセスで開発しないとうまくいかないことがアンケートからわかりました。まとめると

  • ツールの知識やノウハウを共有 する
  • 特性を活かした設計を行う
  • 実装を繰り返して常に確認する
  • 主体的にプロセスを変更し、品質 を上流から作りこむ

となり、これは、モダンアジャイル

  • 人々を尊重する
  • 安全な状態を前提とする
  • 素早い実験と学習
  • 価値を継続的に届ける

の基本理念と対応していて、Node-REDの良い導入が開発のアジリティ(機敏さ)を高めると考えられます。詳しくは以下の論文を読んでください。
(実は最終原稿の段階でモダンアジャイルの基本理念と対応していることに気付いたので追加しました)

Node-REDから見えた未来 - 変わるもの、変わらないもの - SS2017 WG13 につづく

このエントリーをはてなブックマークに追加