爆速でNode-REDカスタムノードを作成・公開する手順

# はじめに

以前、ハンズオンへ参加してNode-REDのカスタムノードを開発するのは敷居が高いと思っていましたが、「公式とおりの手順を踏まないといけない」という先入観を捨てて、「自分が作ったカスタムノードを他の人にも早く使って欲しい」という思いを優先して、思い立ったら爆速(最短、最速)で作成・公開する私の手順を共有したいと思います。

# 公式の手順

### 公式(本家サイト)

https://nodered.org/docs/creating-nodes/

### 公式(日本語サイト)

https://nodered.jp/docs/creating-nodes/

### 参考になるQiita記事

https://qiita.com/zuhito/items/1c65fdbb3743d9f87edd

# どこの手順を省略できるか

Node-REDカスタムノードを作成・公開して利用するまでの一般的な流れは①〜⑤です。

![スクリーンショット 2021-12-17 13.18.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/013df8e5-f3b6-f81f-042d-4d62bc349f4f.png)

実は② GitHub は必須ではありません。(①→③→④が最短パスです。)
③ <a href="https://www.npmjs.com">npm</a>、④ <a href="https://flows.nodered.org/">Node-REDライブラリ</a> への登録・公開は必須です。  

②' は <a href="https://enebular.com">enebular</a> が npm、Node-REDライブラリへカスタムノードを登録・公開せずに、enebular ユーザへ共有することができるサービス(機能)です。

https://qiita.com/kitazaki/items/b3aac2d4a80a79b13fee

# 環境準備

gitコマンドを使うことは必須ではありませんが、npmコマンドは必須です。

# ベースとするカスタムノード

ブラウザでGitHubへアクセスしてZIPファイルをダウンロードするか、gitコマンドでcloneします。

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

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/402fae31-5567-b35d-3aaa-fadd2e7ea4f1.jpeg" width="75%">

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

# カスタマイズが必要な要素

Node-REDのカスタムノードとして動作するのに必要なファイルは

- package.json
- test01.html
- test01.js

の3ファイルですが、npmへ登録するためには

- README.md

の1ファイルが追加で必要です。

# これまでに作ったカスタムノード

###　node-red-contrib-kitazaki-test01

ベースとなるカスタムノードそのままです。

https://flows.nodered.org/node/node-red-contrib-kitazaki-test01

###　node-red-contrib-ina-sensor

商業雑誌 (シェルスクリプトマガジン) の連動企画で BitTradeOne から Jetson Nano と Raspberry Pi (以降、ラズパイ) で共通で使用可能な電力測定ボードを発売する企画の製作に協力することになり、Node-RED から電力測定ボードを操作するノードを作成しました。

https://qiita.com/kitazaki/items/6a94b47c2e4c2b94ab47

電力測定ボードには テキサス・インスツルメント社製デジタル出力電流・電力・電圧モニター IC (INA260) と 単色有機 EL ディスプレイ (SSD1306) が搭載されています。
単色有機 EL ディスプレイ (SSD1306) については既にノードが公開されており、このノードは INA260 を操作するためのノードです。

https://flows.nodered.org/node/node-red-contrib-ina-sensor

INA260 は I2C 接続方式でアクセスする仕様のため、Jetson Nano と ラズパイ でノードを共通化でき、内部で i2c-bus npm モジュールとina226 npm モジュールを使用しています。これらの npm モジュールを使用するために package.json の dependencies オブジェクトへ定義を追加する必要があります。

```json:package.json
{
  "name": "node-red-contrib-ina-sensor",
  "version": "1.0.1",
  "description": "a node-red node for the ina226 and ina260 sensor module",
  "main": "ina.js",
  "scripts": {},
  "repository": {
    "type": "git",
    "url": "git+https://github.com/kitazaki/node-red-contrib-ina-sensor.git"
  },
  "keywords": [
    "node-red",
    "ina226",
    "ina260",
    "raspi",
    "current",
    "sensor",
    "voltage",
    "power",
    "kitazaki"
  ],
  "dependencies": {
    "i2c-bus": "^5.2.0",
    "ina226": "^2.0.0"
  },
  "author": "kitazaki",
  "license": "Apache-2.0",
  "bugs": {
    "url": "https://github.com/kitazaki/node-red-contrib-ina-sensor/issues"
  },
  "homepage": "https://github.com/kitazaki/node-red-contrib-ina-sensor#readme",
  "node-red": {
    "nodes": {
      "ina": "ina.js"
    }
  }
}
```

###　node-red-contrib-lifewill-emodiversity

LIFULLさんが公開したLIFEWILL Emodiversity APIをNode-REDから利用するノードです。
<a href="https://heroes-league.net/">ヒーローズ・リーグ 2021</a>のサポーター(メインスポンサー)としてLIFULLさんが加わりましたが、応募〆切直前だった(2021年11月15日〆切に対して、2021年10月27日に追加した)こともあり、実装のための動作確認にあまり時間を掛けられないことから、<b>「爆速でカスタムノードを作成・公開しよう」</b>と思い立ったのがきっかけです。

https://flows.nodered.org/node/node-red-contrib-lifewill-emodiversity

LIFEWILL Emodiversity API へ HTTP アクセスするために axios npm モジュールを使用しています。この npm モジュールを使用するために package.json の dependencies オブジェクトへ定義を追加する必要があります。

```json:package.json
{
  "name": "node-red-contrib-lifewill-emodiversity",
  "version": "0.0.4",
  "description": "a node-red node for LIFE WILL Emodiversity API",
  "main": "emodiversity.js",
  "scripts": {},
  "repository": {
    "type": "git",
    "url": "git+https://github.com/kitazaki/node-red-contrib-lifewill-emodiversity.git"
  },
  "keywords": [
    "node-red",
    "lifewill",
    "emodiversity",
    "lifull",
    "kitazaki"
  ],
  "dependencies": {
    "axios": "^0.21.1"
  },
  "author": "kitazaki",
  "license": "Apache-2.0",
  "bugs": {
    "url": "https://github.com/kitazaki/node-red-contrib-lifewill-emodiversity/issues"
  },
  "homepage": "https://github.com/kitazaki/node-red-contrib-lifewill-emodiversity#readme",
  "node-red": {
    "nodes": {
      "emotion_analyze": "emotion_analyze.js",
      "emotion_map": "emotion_map.js"
    }
  }
}
```

# 登録・公開手順

カスタムノードが完成したら、npm と Node-RED ライブラリへ登録・公開します。

### npmへのパッケージ登録・公開

```bash
npm publish
```

### Node-REDへのノードライブラリ登録・公開(手動)

https://qiita.com/kitazaki/items/c222c8f3906b6064d5cf

# まとめ

思い立ったら爆速(最短、最速)でカスタムノードを作成・公開して、他の人が便利さを享受できる習慣が広がるといいですね！
良き Node-RED ライフを！