Windows＋Node-REDでSORACOM開発環境を構築する

# はじめに
IoTプラットフォーム[SORACOM](https://soracom.jp/)は非常に手軽にIoTを実装できる神サービスだと思います。
また、[Node-RED](https://nodered.org/)は最小限のプログラミングでアプリを作れる神ツールだと思います。
なので、これらを組み合わせて使うのがおすすめです。
この記事では、[SORACOM Arc](https://soracom.jp/services/arc/)を使って、お手持ちのWindowsのパソコンで開発環境を構築する手順を紹介したいと思います。

なお、この記事は既にSORACOMとNode-REDをお使いの方を対象としており、[アカウント作成](https://users.soracom.io/ja-jp/guides/getting-started/create-account/)などの基礎的な作業は省いていますので、ご了承ください。
また、利用するSORACOMのサービスは無償の範囲もありますが、<font color="red">基本的に有償となります</font>。数百円単位であまり多くはありませんが<font color="red">費用が発生します</font>ので、各サービスのサイトで費用をご確認ください。

# 構築手順
## Node-REDインストールと起動
WindowsでNode-REDを使えるようにする手順はNode-REDの公式サイトで紹介されていますので、かいつまんで説明します。

https://nodered.jp/docs/getting-started/windows

1. [node.js](https://nodejs.org/)のページからインストーラーをダウンロードし、インストールします
1. インストール後、コマンドプロンプトで以下を実行し、Node-REDをインストールします
    ```
    npm install -g --unsafe-perm node-red
    ```
1. インストール後、コマンドプロンプトで以下のコマンドを実行します
    ```
    node-red
    ```
1. Webブラウザを起動し、「 http://localhost:1880/ 」にアクセスすると以下の画面となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/916611/329c732d-122c-fca9-e8ad-26152d4d8d3b.png)

以上でNode-REDの動作環境が整いました。

## SORACOM Arc
通常、SORACOMサービスを使うには、[SORACOM Air for セルラー](https://soracom.jp/services/air/cellular/)を使うことでSORACOMプラットフォームにデータ送信できるのですが、[SORACOM Arc](https://soracom.jp/services/arc/)を使うとWi-Fiなどの通常のインターネット接続環境でSORACOMプラットフォームに接続することができます。

1. SORACOM Arcでは[WireGuard](https://www.wireguard.com/)を使うので、[ダウンロードサイト](https://www.wireguard.com/install/)からWindows用のインストーラーをダウンロードし、インストールします
1. 以下のサイトを参考にセットアップしてください

https://users.soracom.io/ja-jp/docs/arc/use-wiregard-on-windows/

## 動作確認
### 事前準備
作成したバーチャルSIMのグループを設定し、[Harvest Data](https://users.soracom.io/ja-jp/docs/harvest/enable-data/)を有効化します。
具体的にはHarvest Dataを「ON」にして、保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/916611/40dc6788-bf36-57ac-80a6-cc44f1186d95.png)
メッセージ画面で「OK」すれば準備完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/916611/4dce8025-bf39-fd36-80db-53141eaebe8e.png)

### Node-RED
以下のようなフローを作成して、デプロイします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/916611/6d9319ef-4f3f-d571-3de1-9252149cd3ab.png)
1. incectノード
置くだけです。
1. functionノード
試しに送るJSONデータを作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/916611/b8aa7b88-933e-562d-eab3-3ced8f28f494.png)
    ```json
    var data = {};
    data["temp"] = 20;
    msg.payload = data;
    return msg;
    ```
1. http requestノード
JSONを[SORACOM Unified Endpoint](https://users.soracom.io/ja-jp/docs/unified-endpoint/)にPOSTで送ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/916611/ecd3554b-20c7-556b-15f8-481ccb7e8383.png)
1. debugノード
とりあえず応答を見るために対象を「msgオブジェクト全体」にしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/916611/a118f95c-493b-7a6d-5145-1847e2ca920d.png)

### 実行
injectノードの左をポチすると、SORACOMにデータが送られる（はず）です（デバッグウィンドウで「statusCodeが20xになっていればOK）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/916611/bff2b4d6-482a-c03f-0bda-4a2f076cd124.png)
その状態でSORACOMのコンソール画面で対象の仮想SIMのデータ確認でデータが登録されていれば構築成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/916611/9c80b7b2-ca20-0251-a715-daef0eb07cba.png)

# まとめ
今回の記事は詳細説明をかなり省いてしまったので、わかりにくいところがあったらごめんなさい。
ここもっと詳しく教えてとかあればコメントいただけると幸いです。