Node-REDのノードを公開してみる

はじめに

 以前の記事でNode-RED MCU用のノードを作成しました。今回はそのノードを公開してみました。

 1月に「Node-REDのノードをつくるハンズオン」というイベントがあり、ノードの公開について詳しく紹介されていました。その時の資料を参考にしています。

▼こちらのイベントです

https://node-red.connpass.com/event/305047/

▼イベントの資料はこちら

https://qiita.com/kazuhitoyokoi/items/64ed5b7798197bb6dfdf

 なお上記の資料とは違って、テストケースの作成やGitHubアクションでの公開は省略しています。npmには直接publishしており、必要最低限の内容だけ紹介しています。

▼今回作成したものはすでに公開しています。

https://flows.nodered.org/node/@background404/node-red-contrib-mcu-servo

▼以前の記事はこちら

Node-RED MCU用のノードを作成してみる その2(Servoノード)

はじめに  以前Node-RED MCU用のServoノードの作成について、Qiitaに記事を投稿しました。その時点ではPWM outノードと一緒に使う前提で、msg.payloadの加工程度のことし…

公開前の確認事項

命名規則について

 ノードの命名規則について、2022年1月31日に改訂されたようです。

▼こちらに詳しく書かれています。

https://nodered.org/docs/creating-nodes/packaging#naming

 scoped name、例えば@myScope/node-red-sampleのような名前を付けるようにとのことです。

▼npmのscopeについてはこちら

https://docs.npmjs.com/cli/v8/using-npm/scope

 要するに、ユーザー名や組織名の後にノードの名前を書くようにします

 私の場合、npmのアカウント名がbackground404で、Servoノードは@background404/node-red-contrib-mcu-servoという名前で公開しています。

 推奨されているように、少なくともnode-red-が含まれていると、Node-RED用のパッケージだと分かりやすいですね。

▼後述するスコアボードにも、Namingに関する記載があります。

 以前はコアプロジェクトのノードはnode-red-から始まる名前、他のノードはnode-red-contrib-から始まる名前にするように推奨されていたようです。

 私はnode-red-contrib-から始まる名前にしています。

▼こちらにも記載がありました。

https://nodered.org/blog/2022/01/31/introducing-scorecard

 なお、GitHubのリポジトリと、npmパッケージの名前は異なっていても大丈夫です。ただし、管理がややこしくなるかもしれません。

▼私はその命名規則を知らないときに作成していたので、contribが抜けています。npmに公開するときはこのリポジトリ名ではなく、package.jsonの名前が適用されます。

package.jsonの作成

 npm initコマンドで、対話形式でpackage.jsonを作成することができます。

 このとき名前を付けるのですが、先程の命名規則に従ったものにします。また、keywordには"node-red"が必要です。他のキーワードを入力する場合は、空白区切りで入力できます。

▼その他の設定項目については、こちらをご覧ください。

https://qiita.com/kazuhitoyokoi/items/64ed5b7798197bb6dfdf#%E3%83%8E%E3%83%BC%E3%83%89%E3%82%92%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E5%8C%96-npm-init

 途中で間違えても、後でpackage.jsonを編集すれば大丈夫です。

▼実際に作成したpackage.jsonはこちら。

{
  "name": "@background404/node-red-contrib-mcu-serial",
  "version": "0.0.1",
  "description": "Node to use serial communication with Node-RED MCU",
  "main": "node/mcu_serial_in.js",
  "scripts": {
    "test": "mocha test/**/*_spec.js"
  },
  "engines": {
    "node": ">=14.0.0"
  },
  "node-red": {
    "version": ">=1.3.7",
    "nodes": {
      "mcu_serial": "node/mcu_serial.js"
    }
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/404background/node-red-contrib-mcu-serial.git"
  },
  "keywords": [
    "node-red",
    "node-red-mcu",
    "moddable",
    "Serial"
  ],
  "author": "@background404",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/404background/node-red-contrib-mcu-serial/issues"
  },
  "homepage": "https://github.com/404background/node-red-contrib-mcu-serial#readme"
}

 enginesやnode-redプロパティは後で記入しています。node-redプロパティのnodesに書いたものがNode-REDで読み込まれます。

スコアを確認する

 パッケージに不備が無いかチェックするための、スコアボードという仕組みがあります。

▼Node-REDのflowsでの表示はこちら。右側に12と書かれていて、これは満点です。

▼スコアボードの詳細はこちら

https://nodered.jp/blog/2022/01/31/introducing-scorecard#node-developers

 Node-REDのflowsに公開する前に、コマンドでチェックすることができます。もし不備があれば、この時点で修正しておきましょう。

▼チェックするためのツールをインストールするコマンド

▼チェックするためのコマンド

 例えばLICENSEを明記することや、作成したノードが含まれているサンプルフローをexamplesフォルダに用意するなどの項目があります。

ローカル環境でノードの動作確認をする

 作成したノードは、以下のコマンドでインストールできます。

 例えばLinux環境でDesktopに私のServoノードを置いていた場合は、npm install /home/<ユーザー名>/Desktop/node-red-mcu-servoになります。

 Node-REDを起動するときに参照しているpackage.jsonに、インストールしたノードが追記されます。また、同じディレクトリのnode_modulesフォルダにインストールしたノードのフォルダが追加されます。

 以下のコマンドでアンインストールできます。npm listでパッケージ名を確認し、コマンドを入力してください。

 例えば私のServoノードをアンインストールする場合は、npm uninstall @background404/node-red-contrib-mcu-servoになります。

npmパッケージを公開する

▼あらかじめnpmのアカウントは作成しておいて下さい。

https://www.npmjs.com/

 まずはコマンドラインでnpmにログインします。


 npm login

 以下のコマンドでnpmにpublishします。

 私の場合、ENTERを入力後、デフォルトブラウザで二段階認証のパスワードを入力するようになっていました。

▼npmのpublishについてはこちら

https://docs.npmjs.com/cli/v9/commands/npm-publish

▼パッケージがpublicの場合は、オプションが必要なようです。

https://docs.github.com/ja/actions/publishing-packages/publishing-nodejs-packages

 リポジトリに変更があった場合は、再度publishする必要があります。このとき、npm versionコマンドでバージョンを上げる必要があります

▼こちらの記事が簡潔でした。

https://qiita.com/__mick/items/e92e3fc001994ca9dfaf

npm version major # v1.0.0 から v2.0.0 へ変更

npm version minor # v1.0.0 から v1.1.0 へ変更

npm version patch # v1.0.0 から v1.0.1 へ変更

https://qiita.com/__mick/items/e92e3fc001994ca9dfaf

Node-REDに登録する

 Node-REDのflowsのページで+のマークを押すと、追加したいものの選択肢が表示されます。

▼今回はNodeを選択します。

https://flows.nodered.org/add

▼npmのリポジトリ名を入力し、add nodeを選択するとflowsに追加されます。

https://flows.nodered.org/add/node

▼実際に公開しているものはこんな感じ。

https://flows.nodered.org/node/@background404/node-red-contrib-mcu-servo

 この後少し時間がたつと、Node-REDの「パレットの管理」からインストールできるようになります。

 リポジトリに変更があった場合、npmのバージョンアップ後、Node-REDのflowsにも再度追加する必要があります。これでNode-RED側にも変更が反映されます。

最後に

 GitHubを活用しながら開発し、npmに公開し、Node-REDに登録するという流れでした。公開するのに必要なものは第三者が使うことを想定した内容で、理に適った良い仕組みだと思います。

 今回は私のServoノードを題材にしましたが、最近他にも3つのノードを公開しました。また記事にまとめようと思います。

▼Node-RED MCU用のSerialノード

https://flows.nodered.org/node/@background404/node-red-contrib-mcu-serial

▼Pythonの仮想環境を扱うノード

https://flows.nodered.org/node/@background404/node-red-contrib-python-venv

▼VOICEVOX COREを扱うノード

https://flows.nodered.org/node/@background404/node-red-contrib-voicevox-core

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です