Node-REDで世界が変わる！

ソフトウェアの世界は時間をかけながらではありますが、昔に比べると大きく変化しました。

その大きな要因は、ビジネス環境の変化が激しくなったことです。激しい変化に合わせてサービスを早く提供しなければならなくなりました。サービスの実装も変化に柔軟に対応するできるように、より小さな単位で開発する一方で、それらを組み合わせてより大きなシステムが構築されるようになりました。また、組み合わせる対象も、実行環境や共通部品などは一から開発するのではなく、オープンソースやクラウドなどいわゆる「有りもの」を利用するようになりました。

Node-REDはこのように変化したソフトウェアの世界に適した特徴を持つ開発環境です。Node-REDを使えば新しいサービスで、新しい世界を築くことができます。ソフトウェア技術者にとって、それはかけがえのない喜びです。

## サービスを早く提供する

ビジネスのスピードが速くなるにつれて、サービスを早く提供することに対する要求は日ごとに増してきました。

特に、近年のシステムは、

 - UI/UXのように使わないと良し悪しがわからない
 - 複数のモジュールが関連するので、作らないと実現可能性や問題点がわからない
 - クラウドやネットワークなど、運用しないと費用がわからない

といったことが多く、ビジネスに負けないためにはより早くサービスを提供する必要があります。

システムを早く提供するには、いくつかの方法がとられてきました。最初に行われたのは、高機能な言語やライブラリを用意することです。プログラムの記述を少なくして、実装時間を減らしたのです。

次に行われたのは自動化です。古くはmakeコマンドから始まるこの流れは、ビルドやデプロイ、テストの自動化に発展しました。そして、実装後の時間を短縮しました。

そしてインクリメンタルな開発が最後に行われました。システムが複雑になるにつれ、上流の工数はどんどん増え、サービス開始まで時間がかかるようになりましたが、実際に動かすと問題が生じて手戻りの生じることもありました。

そこで、小さな単位で実装を繰り返して、リリースを早めるようになりました。これは、仕様に対する問題を随時解決して大きな失敗を防ぐ、いわゆる「早めに小さく失敗する」ことにもなりました。

Node-REDにはこのようにサービスを早く提供することを可能にする仕組みがあります。

 - ノードと呼ばれる高機能なモジュールをつなぐだけで、プログラミングできる（[[#Node-RED] RedmineのREST API を呼ぶ](http://sakaba.cocolog-nifty.com/sakaba/2016/04/node-red-redmin.html)）
 - ビルドが不要で、デプロイボタンを押すだけで一瞬でデプロイできる（[Node-REDから見えた未来 － 変わるもの、変わらないもの － SS2017 WG13](http://sakaba.cocolog-nifty.com/sakaba/2017/06/node-red-ss2017.html)）
 - プログラミングインタフェースがmsgオブジェクトで標準化されているので、インクリメンタルな開発が容易（[[#Node-RED] Hello World!からNode-REDを知る](http://sakaba.cocolog-nifty.com/sakaba/2016/04/node-red-hello-.html)）

## より小さく、より大きく

ビジネス環境の変化が速くなると、サービスを提供した後も柔軟に対応できるとともに、サービスを継続的に利用できることが求められるようになりました。

そこで、従来のようにモノリシックな1つのシステムではなく、小さな機能ごとに実装して組み合わせることで、システム全体を止めることなく、バージョンアップや保守できる構成がとられるようになりました。

そのような仕組みを実現するには、融通の利かないソフトウェアを中心に周辺のソフトウェアで調整する方法では難しく、それぞれのソフトウェアが柔軟であることが求められます。また、小規模システムでも動作すること、様々な機能を容易に組み合わせられることが必要です。

Node-REDには以下のような特徴があるので、小さなソフトウェアを組み合わせて柔軟なシステムを作ることができます。

 - ファンクションノードではJavascript(Node.js)プログラミングが可能で、線をつなぐだけで順次処理も簡単（[コールバック地獄よさようなら。Node-REDで非同期処理を使いこなせ！](http://sakaba.cocolog-nifty.com/sakaba/2016/12/node-red-4e94.html)）
 - IoTで使われるボードコンピュータRaspberry PiのLinuxに添付される（[Raspbian](
https://www.raspberrypi.org/downloads/raspbian/?fbclid=IwAR2agjcPpePSa8cqf5XmHLKU8QJNKlwc-usnkWELhsqyxnXiSJ_xwcmuv-8)、
[Raspbian Stretch with desktop and recommended software](http://downloads.raspberrypi.org/raspbian/release_notes.txt)）
 - http, websocket, MQTTやSNSなど多くの通信モジュールを持ち、簡単にシステム間を結合できる（[[#Node-RED] Node-REDでTwitterのDMからRedmineのチケットを作成する](http://sakaba.cocolog-nifty.com/sakaba/2016/04/node-red-node-r.html)）

## 有りものをうまく利用する

上にあげたような対策をとっていても、すべてを1から作っていたのでは開発規模が大きくなってしまいます。サービスを早く提供するには、オープンソースやクラウドなどいわゆる「有りもの」を利用して、効率よくシステムを構築する必要があります。

Node-REDには、モジュールやソースの交換が容易が容易な仕組みがあり、すでに多くのオープンソースのノード（モジュール）やフロー（プログラム）が流通しています。

 - モジュール化、カスタムノード、組み込みパッケージマネージャ（[Node-RED紹介（インストールからWebGUI作成）](https://qiita.com/tshimizu8/items/f71c1a5209cb3a19ce51#gui%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%ABnode-red-dashboard%E3%83%91%E3%83%AC%E3%83%83%E3%83%88%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)）
 - サブフロー、インポート/エクスポート（[Node-REDでより大規模な開発を - モジュール化とフロー・システム間連携 -](http://sakaba.cocolog-nifty.com/sakaba/2017/07/node-red-----50.html)）

 - オープンソース、クラウドとの連携（[Node-RED Library](https://flows.nodered.org/?num_pages=1)）

## おわりに

このようにソフトウェアの世界の変化に対応できる仕組みや環境が、Node-REDにはそろっています。その大きな要因であるビジネスの激しい変化に合わせて、サービスを早く提供することができるでしょう。

しかし、プロトタイプと同じように早く開発できるだけでは、品質の高いソフトウェアを開発することはできません。ある程度大きなソフトウェアを開発するには、きちんと設計をしないとうまくいきません（[Node-REDで品質の高いソフトウェアを開発する]( http://sakaba.cocolog-nifty.com/sakaba/2017/07/node-red-2f81.html)）

Node-REDは(1)ノードに処理を表す名前（日本語可）をつければ手順を理解しやすくなりますし、最近のバージョンではグローバルなどコンテキストデータの構造や値を参照できますし（[Version 0.19 released](https://nodered.org/blog/2018/08/14/version-0-19-released)）、通信インタフェースを使って仕様の確認が可能です。

このようなNode-REDの特徴を生かしながら設計と確認を繰り返せば、大規模なソフトウェアの開発も可能でしょう（[プロのためのNode-RED再入門](http://sakaba.cocolog-nifty.com/sakaba/2018/03/node-red-46bb.html)）。

今までにない世界を作って、多くの人に幸せにすることはエンジニアの特権で、こんなに楽しいことはありません。あなたもNode-REDを使って、ぜひ新しい世界を切り開いてください。