enebularのFreeプランに追加された機能(プライベートノード機能)を試してみた

# はじめに

これまで有料版で提供されていた機能が2021年9月21日に無料版でも利用できるようになりました！

https://blog.enebular.com/function/enebular-assets/

- カスタム作成ノードを非公開で扱うためのプライベートノード機能  
- ファイルのデバイスへの配信機能  
- AIモデルのデバイスへの配信機能（β版）  

今回はプライベートノード機能を試してみました。

# プライベートノード機能とは

独自に作成したNode-REDのノードをnpmに公開することなく使用することができます。
作成したノードは販売することもできるとのことですが、こちらは試していません。

https://blog.enebular.com/function/private-nodes/

公式ドキュメントはこちら。

https://docs.enebular.com/ja/privatenodes/introduction

#　プライベートノード機能を利用する流れ

Node-REDのノードを公開する流れと比較します。

![スクリーンショット 2021-11-28 10.49.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/1844c737-a139-072a-a354-d790f1978bfa.png)

左側はNode-REDのノードを公開して利用する流れで、右側はenebularでプライベートノードを利用する流れです。  
Node-REDのノードを開発する部分は変わりませんが、開発したノードを直ぐに利用開始できるのがメリットです。

# プライベートノードのサンプル

プライベートノードを直ぐに試してみたい方へサンプルを用意しました。

https://github.com/kitazaki/enebular-privatenode-contrib-test01

# プライベートノードを登録する手順

## 準備

なるべくWindows、macOSで共通の手順になるように説明します。

### 1. Node.jsのインストール

npmコマンドを利用できるようにします。  
Node.jsのホームページへアクセスして該当するインストーラーをダウンロードしてインストールします。

https://nodejs.org/ja/download/

![node.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/6577a483-8d19-7b5a-a666-c29dea85e4d4.jpeg)

### 2. npmコマンドの実行確認

npmコマンドを実行できるか確認します。

macOSの場合
ターミナルを開きます。

```bash
npm -v
6.14.10
```

Windows 
コマンドプロンプトを開きます。

```bash
npm -v
8.1.0
```

### 3. サンプルノードのダウンロード

githubのページからZIPファイルでダウンロードする場合

![github_zip.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/f17a7575-08ba-a58a-ab3f-9dbf6547483f.jpeg)

gitコマンドでダウンロードする場合

```bash
git clone https://github.com/kitazaki/enebular-privatenode-contrib-test01
```

![github_git.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/7d21df29-df9f-bd9b-6573-777f7ad16f90.png)

### 4. パッケージファイルの作成

npm packコマンドを実行してパッケージファイルを作成します。  
ZIPファイルでダウンロードした場合、ダウンロードしたサンプルノードを解凍してフォルダの中でnpm packコマンドを実行します。  
gitコマンドでダウンロードした場合、ダウンロードしたフォルダの中へ移動してnpm packコマンドを実行します。
コマンドが正常に完了すると、enebular-privatenode-contrib-test01-0.0.1.tgzというファイルが作成されます。

```bash
npm pack
```

macOSの実行例

![npm_macos.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/21fae7ad-d681-eac9-bae3-95e8cb0f1a2a.jpeg)

Windowsの実行例

![npm_windows.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/83155205-ca82-7f7c-eb40-5e2fc22b04f2.jpeg)

### 5. プライベートノードの登録

enebular.comへアクセスしてログインします。(初めての方はenebular.comでアカウントを作成します。)  
次にプロジェクトを選択します。(初めての方はプロジェクトを作成します。)  

![project.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/f89ef800-ecf5-5b1b-ace1-133b5b487b0d.png)

左側のメニューから「Private Nodes」を選択し、右下の「＋」ボタンを押します。

![regist_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/01a334f2-ced7-ac63-2e4a-55ef0e062001.png)

手順4.で作成したパッケージファイル(enebular-privatenode-contrib-test01-0.0.1.tgz)を赤枠の中にドラッグ&ドロップします。

![regist_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/4149385d-9198-8f58-8f51-8631d6ca44da.png)

右下の「Upload」ボタンを押します。

![regist_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/c33664c7-5db3-601c-4d0f-2abab745948e.png)

正常に完了するとプライベートノードが一覧に表示されます。

![regist_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/da5eb6b1-bd2a-5413-7ded-67f7ac0a7cd9.png)

### 6. プライベートノードの使用

最後にフローの中でプライベートノードを使用します。
左側のメニューから「Flows」を選択し、フローを開きます。(初めての方は右下の「＋」ボタンを押してフローを作成します。)

![flow_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/ce98d9b7-5453-40aa-8290-b5d3a6d6c335.png)

今回登録したプライベートノード(test01ノード)は左側のパレットの分析カテゴリにあります。

![flow_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/e5df9c17-b926-8733-f228-f57f9a5663a5.png)

injectノード、test01ノード、debugノードをつなげてデプロイボタンを押します。

![flow_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/eef61a18-0d6f-86c0-72db-5606aa0cfe97.png)

injectノードを実行すると、右側のデバッグ画面に「enebularサイコー」と表示されます。

![flow_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/b361c3a5-97e0-cad3-016d-d0b864b8a552.png)

# サンプルコードの説明

プライベートノードは3つのファイル(package.json、test01.html、test01.js)から構成されます。
サンプルコードは入力の値に関わらず、「enebularサイコー」という文字列を出力するノードです。
サンプルコードを書き換えて、入力の値によって出力の値を変えることも可能です。

package.jsonにはnode-redセクションを記述する必要があります。

```json:package.json
{
  "name": "enebular-privatenode-contrib-test01",
  "version": "0.0.1",
  "description": "This is a test node.",
  "main": "test01.js",
  "scripts": {},
  "repository": {
    "type": "git",
    "url": "git+https://github.com/kitazaki/enebular-privatenode-contrib-test01.git"
  },
  "keywords": [
    "node-red",
    "kitazaki"
  ],
  "dependencies": {
  },
  "author": "kitazaki",
  "license": "Apache-2.0",
  "bugs": {
    "url": "https://github.com/kitazaki/enebular-privatenode-contrib-test01/issues"
  },
  "homepage": "https://github.com/kitazaki/enebular-privatenode-contrib-test01#readme",
  "node-red": {
    "nodes": {
      "test01": "test01.js"
    }
  }
}
```

package.jsonのnode-redセクションで記載されたtest01.jsファイルにNode.jsモジュールを記述します。

```javascript:test01.js
module.exports = function(RED) {
	function test01(config) {
		RED.nodes.createNode(this,config);
		var node = this;
		node.on('input', async function(msg) {
			const mes = msg.payload;
		        msg.payload = 'enebularサイコー';
            		node.send(msg);
        	});
    	}
	RED.nodes.registerType('test01', test01);
}
```

test01.htmlにプライベートノードに関する3つの情報(ノード定義、編集テンプレート、ヘルプテキスト)を記述する必要があります。

```html:test01.html
<script type="text/javascript">
	RED.nodes.registerType('test01', 
		{
			category: 'analysis-function', 
			color: '#E6E0F8',
			defaults:
			{
				name: {value: ""}
			},
			inputs: 1, 
			outputs: 1, 
			icon: 'arrow-in.png', 
			label: function()
			{
				return this.name || "test01"
			},
		});
</script>

<script type="text/x-red" data-template-name="test01">
	<div class="form-row">
		<label for="node-config-input-name"><i class="icon-tag"></i>name</label>
		<input type="text" id="node-input-name" placeholder="name">
	</div>
</script>

<script type="text/x-red" data-help-name="test01">
	<p>
		output is test01 <br>
	</p>
</script>
```

# さいごに

Node-REDへカスタムノードを公開せずに、プロジェクト内でプライベートノードを共有することができます。
個人用途ではカスタムノードを公開しても問題ありませんが、業務用途では機密情報や知財保護の観点で便利だと思います。
それでは、良きenebularライフを！