Node-REDを使ってノーコーディングでLINE botを作ってみよう!! (99_各nodeの解説まとめ)

#はじめに
Node-REDを使ってLINE botを作る記事は調べればでてきますが、最初から最後までノーコーディングで作成している記事はなかったのでここで解説していこうと思います。

データの内容からなるべく詳細に記載しようと思うので、必要な部分のみ参考にして下さい。

当該記事はNode-REDノード解説のみになります。
以下目次のリンクより必要記事にアクセスして下さい。

#目次
[01_環境構築編](https://qiita.com/VulpeS404/items/da196c87541b6af9214c)
[02_基礎編～LINE bot作成におけるNode-REDのデータの流れ～](https://qiita.com/VulpeS404/items/ee9e719f37ae535571fd)
[03_Node-REDからbotユーザーにメッセージを送信しよう](https://qiita.com/VulpeS404/items/c2e0db947db1b4c6229c)
[04_オウム返しbotをつくろう](https://qiita.com/VulpeS404/items/640b075b0a9eaaad249f)
[05_LINEから受信したデータの詳細を見てみよう](https://qiita.com/VulpeS404/items/554119209a4469130b98)
[06_ユーザーから送られたメッセージを判定して返事を返そう](https://qiita.com/VulpeS404/items/308f599660a79d2c457e)
07_Node-REDとCloudantDBを連携させよう
08_ユーザーとやりとりできるbotをつくろう
09_おすすめの〇〇を紹介するbotをつくろう
[99_各nodeの解説まとめ](https://qiita.com/VulpeS404/items/0ce3057451d18f4d87ec)

#99. 各nodeの解説まとめ概要
この記事ではいままでに解説したノードの説明のみをまとめたものになります。
※1/27時点では第7回までのものをまとめています。
1.共通
ー1-1.inject
ー1-2.debug
2.機能
ー2-1.switch
ー2-2.change
3.ネットワーク
ー3-1.http in
4.ストレージ
ー4-1.cloudant in
ー4-2.cloudant out
5.LINE
ー5-1.Reply
ー5-2.Push


#1.共通
###1-1. injectノード
左にあるパレットの共通に配置されているinjectノードについて解説します。
このノードは、ノード内に設定されているものを後続ノードに流すものになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/4975150a-879a-7f83-6034-c5540733b984.png)

実際にドラッグして配置してみると以下のようになります。
デプロイ後左の□ボタンを押すことでinjectが起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/70dd34ce-daee-abcc-004a-7bb31665a084.png)

ノードをダブルクリックして中をみてみましょう。
名前を設定するとノードに書かれている名称（画像ではタイムスタンプ）が変更されます。
その下にあるのがinjectを起動した時、どんなデータを後続に流すか設定するものになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/f8d44373-3090-de59-e3e4-7d4def33bd88.png)

###1-2. debugノード
debugノードはパレットの共通にあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/e39c7122-34e2-a626-adb7-a472e67b07c3.png)

追加すると初期設定では"msg.payload"のデバッグになります。
対象と出力先を設定することで、何をみたいのか・どこに結果を出すかを設定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/6ef58ca2-31e3-693b-dd5f-0b7cc92a42f8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/d9ae04f4-d0e0-997a-272f-362284fd268f.png)

#2.機能
###2-1. switchノード
パレットの機能に格納されているswitchノードについて解説します。
このノードは条件分岐(if)のノードです。
Aが○○の場合は××する、□□の場合は△△するといった動作をさせるものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/e55a0f16-439d-0d6a-23fc-d9617f4a776f.png)

実際に配置すると以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/cd2a9850-287d-f65c-0bf2-09ed91e9578d.png)

ノードをダブルクリックして中をみてみましょう。
「Aが○○の場合は××する、□□の場合は△△する」
プロパティに設定する値が上のAに値するものになります。
その下の==という記載はそのあとに記載するものと一致していることを表します。
そのあとに記載するものが上の○○に値するものになります。
"az"という表記はそのあとに記載するものが文字列であることを表しています。
この"=="や"az"という条件は▼をクリックすると他の形式も選ぶことができます。

このノードでは「Aが○○の場合は、□□の場合は」の条件分けをするところまでになります。
後続の「××する、△△する」は別のノードで管理します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/2b2acae3-41ed-8661-4922-473338f00eeb.png)

現状だと条件が1つしかないので、条件を足す必要があります。
左下の方にある"+追加"をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/b9280e10-143c-c988-728d-aa2236c8c493.png)

すると条件を設定する欄が追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/ff047e04-043c-6c25-3a89-69b9a703bc19.png)

条件を追加するとノード右側のノードを繋ぐ□が2つに増えているのがわかります。
これは条件1にあたる場合は上の□に繋がったノードの方に処理が進み、条件2にあたる場合は下の□に繋がったノードの方に処理が進むようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/9ae4d920-5b25-9686-43e3-6e0f2a2c15d0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/b2b653eb-47e2-f87d-e0d4-9afb4a1f9820.png)

###2-2. changeノード
パレットの機能に格納されているchangeノードについて解説します。
このノードは変数の箱に格納されている内容の更新などに使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/99d18d85-c51f-c9f6-8720-aa55dd65b1cd.png)

実際に配置すると以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/6b5f1732-b5ce-cd24-b710-2530f710de77.png)


ノードをダブルクリックして中をみてみましょう。
ルールは変数の箱に値を代入したり、値を削除したりなどを設定できます。
この初期値の場合は"msg.payload"という箱に"対象の値"に設定されている内容(画像だと空白ですが)を上書き保存するイメージになります。
そのため元々"msg.payload"に格納されていたデータの中身は全てなくなります。
switchノードと同様、左下の"+追加"を押すと処理を追加できます。
つまり、このノードが処理対象になれば1つノードで"○○に××を格納する"という処理と"AAにBBを格納する"という処理どちらも行うことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/cb804836-51f8-4427-ff11-d1b51bb1bc9c.png)


#3.ネットワーク
###3-1. http inノード
パレットのネットワークに格納されているhttp inノードについて解説します。
このノードはwebを通じてデータを受信するのに使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/714dad7f-b63e-19ca-94d1-44b9e8f7c3a3.png)

実際に配置すると以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/7f101fbd-1fe8-5511-2989-d662a4294234.png)

ノードをダブルクリックして中をみてみましょう。
メソッドですが、こちらは書くと長くなりそうですので[こちら](https://qiita.com/kanataxa/items/522efb74421255f0e0a1)の記事等参考にして頂ければと思います。
URL欄にはデータ取得元のURLを記載します。
名前を設定するとノードに書かれている名称（画像ではhttp）が変更されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/83ec72b0-182f-3c1a-c8f8-9120950e4a6a.png)

#4.ストレージ
###4-1. cloudant inノード
パレットのストレージに格納されているノードです。
CloudantDBからデータを取得するのに使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/189a8fbc-4447-48c1-228e-683b05e0a768.png)

実際に配置すると以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/cbd2d48b-27d1-150a-5736-bd947c80acc4.png)

ノードをダブルクリックして中をみてみましょう。
"Service"は接続されているCloudantDBが自動で割当てられます。
"Database"はアクセスしたいCloudantDBのDB名を記載します。
"Search by"はDBにある_idを基に取得するかやDBのデータ全て取得するか等が選べます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/3a2bb80c-8136-dcb4-de00-fbeb6984f7f2.png)

###4-2. cloudant outノード
パレットのストレージに格納されているノードです。
CloudantDBにデータを格納するのに使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/8fe08ddd-f3b5-c3e2-5413-61178f8dfe78.png)

実際に配置すると以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/bbcae689-82cc-796d-acfd-9d6bbd67caf8.png)

ノードをダブルクリックして中をみてみましょう。
"Service"は接続されているCloudantDBが自動で割当てられます。
"Database"はアクセスしたいCloudantDBのDB名を記載します。
"Operation"はDBに格納したり、逆にDBから削除する等を選択できます。
"Only store msg.payload object"はチェックをいれるをmsg.payloadに格納されているobjectのみを対象とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/d43238e8-dd1b-6243-caae-d55b71f1a87e.png)

"Only store msg.payload object"にチェックをいれないとmsg.payloadにある様々な情報も追加され、別のレコードとして登録されてしまいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/9961942c-427d-8567-e27a-6de7d595c6a4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/885befc3-219c-80ba-8fc0-1d40b44013bb.png)

#5.LINE
###5-1. Replyノード
次にパレットLINEに格納されているReplyノードについて解説します。
これはメッセージを送信したユーザーに対し、返信するためのノードです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/806b0d8e-dd6c-b73f-91aa-c0d73e49d479.png)

ノードをダブルクリックしてみましょう。
ここで設定が必須なのは以下の2つです。
・Secret
・AccessToken
前回のPushノードでは必要だったユーザーIDが不要になります。
ReplyMessage欄にメッセージ内容を入力すると、メッセージを送信したユーザーに対し設定されているメッセージを常に返信します。
空白にすると受信したメッセージをそのまま返信します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/772e693b-9742-f1db-97a1-ec7981919fdd.png)

###5-2. Pushノード
次にパレットLINEに格納されているPushノードを使います。
次回以降の記事ではReplyノードを使いますが、Pushは友達登録しているユーザー全員にメッセージを送信するノードに対し、Replyはメッセージを送信したユーザーにのみメッセージを送信するノードになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/519f8cc3-997e-2893-b582-ed65d82e21f0.png)

ノードをダブルクリックしてみましょう。
ここで設定が必須なのは以下の3つです。
・Secret
・AccessToken
・User Id or Group ID

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/1afe9806-1180-916c-5e70-8abf28202c04.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395385/442ea63a-a73e-84bd-06ac-50d8fe8d8e43.png)

#おわりに
この記事はあくまで「Node-REDを使ってノーコーディングでLINE botを作ってみよう!! 」シリーズにおいて使用するノードのみの解説になります。具体的な設定値は各記事を参照してください。
現時点で未使用のノード解説をする予定はありませんが、要望等あれば未使用のノード含めて解説する記事も書こうと思います。