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
▼以前の記事はこちら
公開前の確認事項
命名規則について
ノードの命名規則について、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"が必要です。他のキーワードを入力する場合は、空白区切りで入力できます。
▼その他の設定項目については、こちらをご覧ください。
途中で間違えても、後で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に公開する前に、コマンドでチェックすることができます。もし不備があれば、この時点で修正しておきましょう。
▼チェックするためのツールをインストールするコマンド
npm install -g node-red-dev
▼チェックするためのコマンド
node-red-dev validate
例えばLICENSEを明記することや、作成したノードが含まれているサンプルフローをexamplesフォルダに用意するなどの項目があります。
ローカル環境でノードの動作確認をする
作成したノードは、以下のコマンドでインストールできます。
npm install <フォルダのパス>
例えばLinux環境でDesktopに私のServoノードを置いていた場合は、npm install /home/<ユーザー名>/Desktop/node-red-mcu-servoになります。
Node-REDを起動するときに参照しているpackage.jsonに、インストールしたノードが追記されます。また、同じディレクトリのnode_modulesフォルダにインストールしたノードのフォルダが追加されます。
以下のコマンドでアンインストールできます。npm listでパッケージ名を確認し、コマンドを入力してください。
npm list
npm uninstall <パッケージ名>
例えば私のServoノードをアンインストールする場合は、npm uninstall @background404/node-red-contrib-mcu-servoになります。
npmパッケージを公開する
▼あらかじめnpmのアカウントは作成しておいて下さい。
まずはコマンドラインでnpmにログインします。
npm login
以下のコマンドでnpmにpublishします。
npm publish --access public
私の場合、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を選択します。
▼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