【enebular 2021】 enebular editor をMacで試してみる（2021年12月版）：ダッシュボードと WebSocket

この記事は、[2021年の enebular のアドベントカレンダー](https://qiita.com/advent-calendar/2021/enebular) の 20日目の記事です。

## 今回の内容
2018年の enebular のアドベントカレンダー用の記事として、以下の記事を書いたことがありました。

●enebular editor をMacで試してみる - Qiita
　https://qiita.com/youtoy/items/58f2f69e4e561842fd73

今回、2021年12月現在での Mac用の enebular editor をあらためて触ってみて記事にしてみようと思います。

## Mac用の enebular editor を利用する準備
### enebular editor について
そもそも「enebular editor とは？」という話は、以下の公式の説明をご覧ください。

●Introduction · enebular
　https://docs.enebular.com/ja/EnebularEditor/

ここからは、この enebular editor の Mac用アプリを使って進めていきます。

### 入手とインストール
Mac用の enebular editor の入手について、導入方法は過去の記事の内容と同じです。

https://docs.enebular.com/ja/enebulareditor/ へアクセスして、dmgファイルをダウンロードして、アプリをインストールします。
なお、記事を書いた 2021年12月19日時点だと、バージョンが 1.2.0 でした。

## Mac用の enebular editor を利用する
### アプリのトップ画面
アプリを実行してみます。
実行後に enebular のアカウントでログインをした状態が、以下になります。
![enebular_editorのトップ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/a495c7c8-5cb7-9038-317a-996219f8ee8e.jpeg)

画面上には、過去に作ったプロジェクト・フローが表示されています。

### 新規にフローを作成する画面
ここから、フローの新規作成を行ってみます。
上記で示していたトップの右上にある「＋フロー」と書かれたボタンを押すと、以下の表示が出てきます。
![フローの作成.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/eaf339b4-ca74-cf57-12bc-b59ec992e1dc.jpeg)

今回は、プロジェクトも新規に作ったものを作って進めてみようと思います。
ここで、「＋プロジェクト」と書かれたボタンを押して、プロジェクトの名前を入力します。

また、フロー名やデフォルト権限等を以下のようにしてみました（名前の付け方は、かなり適当ですが...）。
![フローの新規作成.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/7df91364-27d8-2ac4-4fd2-a960720347a8.jpeg)

その後、トップページに戻るので、以下の赤矢印で示したボタンを押します。
![デスクトップで開くボタン.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/d7cbf453-c4d3-6e2d-e760-e73f870d8581.jpeg)

そうすると、以下のフローを作成するための画面へと移動できます。
![フローの作成画面.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/13206ea3-a7d5-e0e2-78ae-71adb282ad19.jpeg)

### enebular editor でフローを作って動かす
せっかくなので enebular editor が活かせる内容にできればと思い、公式ブログを見ていたら以下の記載がありました。

●enebular editorでローカル上でダッシュボードを試してみよう | enebular blog
　https://blog.enebular.com/enebular/enebular-editor-first-contact/

|![ブログ記事の記載.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/0af0907c-3951-ee2e-0ccd-e011106cea39.jpeg)|
|:-:|

そこで、ここに出てくるダッシュボードのノードを使う流れで進めようと思います。
その際、上記の公式ブログの例をなぞるのではなく、自分がよく使う他のノードと、以下のデフォルトで利用できるダッシュボードの気になったノードを組み合わせて動かしてみることにしました。
![ダッシュボード用のノート.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/0a6e8c56-b4e0-2d20-e4b8-3821719d80e6.jpeg)

今まで、自分が使ったことがなかったダッシュボードの formノードと、利用頻度が高めの WebSocket の両方を含む仕組みを試してみることにします。

#### ダッシュボードと WebSocket を組み合わせたフロー等の概要
今回、テスト用のフローとして、以下のものを用意してみました。
![試すフロー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/1b3eb738-6a9f-c657-f2ce-5fc8274d3f83.jpeg)

ダッシュボードは、以下のような見た目になっています。
（この時、自分の環境依存なのかもしれないですが、Chrome でダッシュボードを開くとうまく表示されず、Safari で開いたら以下が表示されていました...）
![ダッシュボード.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/b5c5f875-db80-a1f6-94e8-579b045a4e36.jpeg)

それと、WebSocket のクライアントとして、以下の記事を書いた時に使ったものをベースにした HTML+JavaScript で作ったクライアントも組み合わせてみることにします（p5.js Web Editor を使ったのは、ブラウザ上で簡単に開発・動作環境を準備できるのと、以下をベースに簡単に準備ができそうだったためです）。

●p5.js Web Editor で WebSocket を扱ってみる（wscat でローカル環境にサーバーを準備して試したり、OBS連携を実行） - Qiita
　https://qiita.com/youtoy/items/40220a09b98a89013d0d

ここからは、それぞれの詳細について書いていきます。

##### フローの設定
デバッグノード以外の 3つのノードの設定を、フロー上で上にあったものから順番に掲載します。

![WSin.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/86f0475c-bdfb-46d6-5c7e-f0d8b0929d94.jpeg)

![WSout.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/73613d85-8ae5-2927-8e1a-97557c57d18e.jpeg)

![form.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/e816ecb9-b10e-11c5-b1e1-35515f8c30a2.jpeg)

formノードについては、ダッシュボード上の構成が以下になるように設定しています。
![ダッシュボードの構成.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/5b061448-8c1e-b8c6-db33-4ecc0cd57f53.jpeg)

これで、enebular editor側の準備は完了です。

##### フローの動作確認
この時点で 1度、enebular editor のフロー内での動作確認をしてみます。

ダッシュボードを開き、以下のような値を入力して送ってみます。
![formから値を送る.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/fe6234a2-ef61-4296-bf01-5f7b68d6160c.jpeg)

そして、enebular editor上のデバッグ出力を確認すると、以下の出力が確認できれば OK です。
![デバッグの出力.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/70729995-607d-2383-8a54-3cc7f1f4a75c.jpeg)

#### p5.js Web Editor上のクライアントを準備する
ここで、p5.js Web Editor上にも WebSocketサーバーに接続するクライアントを用意して、上記と連携させる形で動かしてみます。

準備した JavaScript（sketch.js）は以下になります。
（なお、index.html と style.css はデフォルトのままで問題ないです）

```javascript
let socket;

function setup() {
  createCanvas(400, 400);
  background(220);
  noLoop();

  socket = new WebSocket("ws://localhost:1888/ws");

  socket.addEventListener("open", function (event) {
    console.log("OK!");
  });

  socket.addEventListener("message", function (event) {
    console.log("Message from server");
    console.log(event.data);
  });
}

function draw() {}

function keyPressed() {
  switch (key) {
    case "1":
      socket.send("test1");
      break;
  }
}
```

ここで 1つ注意点があります。
上記の中の WebSocketサーバーの接続先指定は、以下になっています。

```javascript
  socket = new WebSocket("ws://localhost:1888/ws");
```

Node-RED で WebSocketサーバーを動かす時は、デフォルトのポートが「1880」になりまが、enebular editor の場合は「1888」となります。
普段、Node-RED の WebSocketノードを使って WebSocketサーバーを用意されている方は、ポート番号が異なる点にご注意ください。

#### p5.js Web Editor と enebular editor との連携を試す
そして、p5.js Web Editor と enebular editor との間の通信を試してみます。

p5.js Web Editor側のプログラムを実行し、数字の「1」のキーを押したところ、enebular editor のデバッグ出力に以下が出てくるのが確認できました。
![p5.js Web Editorから送られたデータ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/0b08d524-164f-cc9f-bbf9-114276c9acec.jpeg)

また、enebular editor側のダッシュボードのフォームで、先ほどと同じ値を入力して送ったところ、p5.js Web Editor側のログ出力で以下が表示されたのを確認できました。
![enebular editor側から送られたデータ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/ce5fc7bf-b24a-24e6-88b8-0b4fbc71e4fd.jpeg)

とりあえず、今回準備した機能を一通り動作させることができました。

## 余談
何を試そうかとエディタ上のノードを見ていた時、以下のノードが気になりました。
![AIを使うノード.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/01ac8777-1ded-f1ca-e780-4f0c332c12a0.jpeg)

2021年の 9月に行われた以下の発表にも関連した話です。

●Freeプランに機能が追加されました | enebular blog
　https://blog.enebular.com/function/enebular-assets/
![Freeプランでの機能追加.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/db9eb8aa-7874-13b7-831e-3c0a396d2e31.jpeg)

ドキュメントは以下などになるようです。
「サクッと試す」という感じにはできなそうな感じもしたので、また別の機会に試せればと思っています（そして、そのためのメモ）。

●解説：AIモデル機能の仕組み | enebular blog
　https://blog.enebular.com/others/introduction-ai-models-function/
●Introduction · enebular
　https://docs.enebular.com/ja/aimodels/introduction