Node-REDの本質を1枚のイメージにしてみた

# TL;DR
- Node-REDを1年ぐらい使ってみて、自分がNode-REDの本質だと思うものを1枚のイメージにしてみました。

# 経緯
Node-REDをアピールしている中で、以下のようなことがよくありました。

- 何ができるの？と聞かれて、一通りなんでもできるよと答えても :worried: という顔をされる
- 何が強いの？と聞かれて、いろんなものを簡単に繋げられると答えても :worried: という顔をされる
- どこで使われているの？と聞かれて、様々な場所で使われていると答えても :worried: という顔をされる
- なんでも簡単にできるっていうけど、それってそのままじゃ何も出来ないってことじゃないの？と言われて、自分が:worried: という顔になる
    - (汎用性の高さと特徴が無さそうという印象から) `Excelみたいなもんか` と言われたこともありましたw
- :worried:->:heart_eyes:をするためには、どうすればよいかを考えてみました。

# まず本質と思うものを1行で表してみる
- Node-REDの本質を1行で答えよ!!という問いになんと答えるかを考えてみた
    - いろいろ考えた経緯はあるものの、自分なりの結論は↓
    - <font color="red">様々なものと簡単に連携できること</font>  
        - 様々、簡単、連携とは何かを整理するために絵を書く
        
#　出来上がったイメージ
![node-red.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259228/3c4c5420-19b9-0951-c756-eca5d3759b2c.png)

##　全体の説明
- まず中央にNode-REDがあり、よく連携される4つのカテゴリーがある
- もともと4つのカテゴリーは、ある程度連携されている
- Node-REDはこの4つと自由に連携でき、かつ元々の連携に介入し、さらなる別の連携を加えることもできる
- RaspberryPiやIFTTTなど、いくつかの要素は更に別の要素とつながるハブとして機能する
 
## 4つのカテゴリー
- ユーザ
    - Node-REDを開発する人やシステムを利用する人のカテゴリー
    - 開発者はもちろん、利用者、運用者、一時的に利用するゲストなどが含まれる
    - 開発者以外は、Node-REDであることを意識しない可能性もある
- クラウド
    - インターネットを介して広く一般に公開されているクラウドサービスのカテゴリー
    - IFTTT、Line、Twitterなどが含まれる
- ソフトウェア
    - 一般的なプログラムやDBといったソフトウェアのカテゴリー
    - 自作プログラムやOSの機能、市場パッケージなどが含まれる
    - 企業であれば社内システムや基盤/基幹系システムも含まれる
- ハードウェア
    - 物理的な機器のカテゴリー
    - RaspberryPi、センサ、スマートスピーカーといった機器が含まれる

## 元からあるライン 
- A : ユーザとハードウェア
    - 例：人感センサでの人の検知やスマートスピーカーへの呼びかけと応答など
- B：ハードウェアとクラウド
    - 例：スマートスピーカーがネットから情報を取得したり、クラウドサービスにデータを登録したりするなど
- C：クラウドとソフトウェア
    - 例：自分のプログラムからクラウドサービスを呼んだり、各種botなど
- D：ソフトウェアとユーザ
    - 例：プログラムの起動と結果の収集。DBへの問い合わせやコマンドの実行など
- E：ユーザとクラウド
    - 例：LineやTwitterの利用。IFTTTを使ったサービス連携など
- F：ソフトウェアとハードウェア
    - 例：プログラムを使って電子機器を制御するなど

## Node-REDとつながるライン
- ①：ユーザとの連携
    - HTTPのレスポンスやダッシュボードでUIを実現
    - Webサーバの機能を持ち、HTMLを返すだけでWebページが作れる
    - ダッシュボード機能を入れると、いい感じのダッシュボードがすぐに作れる
        - [こんなかんじ] (https://qiita.com/kazutxt/items/b088d0577521ec06c3b3)
    - <font color="blue">**簡単**</font>  
- ②：ハードウェアとの連携
    - RaspberryPiに標準搭載されていて、GPIOはなにもしなくても入っていて制御できる
    - GoogleHome/AmazonAlexaはノードやBridgeがあり、簡単に連携できる
        - [こんなかんじ] (https://qiita.com/kazutxt/items/d8dda820ab253f553e80)
    - センサーをつないだり、LEDを点灯させたりできる
    - MQTTが活躍する。。。らしい。 ~~まだ使ったことない~~
    - <font color="blue">**簡単**</font>  
- ③：クラウドとの連携
    - LineでもSlackでもTwitterでも有名所は誰かが作ってくれたノードでだいたいいける
        - [こんなかんじ] (https://qiita.com/kazutxt/items/19cd4bca52da73ffaf62)
    - 専用ノードがなくても、WebAPIさえあれば、functionノードやカスタムノードでOAuthとかWebHookなどを使っていくらでも送受信できる
        - HTTP、WebSocket、FTP、Bluetoothなど色々な規格が使える
    - <font color="blue">**簡単**</font>  
- ④：ソフトウェアとの連携
    - DBとかファイルとかdockerとか探せば扱えるノードがいくらでもある
    - 究極的にはNode-REDからコマンドが実行できるので、なんとでもなる!!
    - <font color="blue">**簡単**</font>  
- ⑤：実現の容易さ
    - 忘れてはいけないのが、どれだけ簡単にできるか
    - ソフトウェアは作りこみさえすればなんだってできる(笑)
        - どれだけ簡単に、すばやく、本質に集中した作り込みができるかが重要
    - [ここにあるもの] (https://qiita.com/kazutxt/items/8c72448eefcba56dabef)は1ネタだいたい1,2日で出来たものばかり
        - 場合によってはプログラムレスでできちゃう
    - <font color="blue">**とても簡単**</font>  

# 結論
- Node-REDは<font color="red">様々なものと簡単に連携できる</font>
    - 様々＝ユーザ、クラウド、ソフトウェア、ハードウェア
    - 簡単＝何をするにも、1,2日ぐらいでできる
    - 連携＝専用ノード/HTTP/WebSocket/コマンド/独自規格などに柔軟に対応可能