Androidのメモとか

ポキオの日記です。今日も遅延してない。

実録 Node-REDノード作成 24時

タイトルに深い意味はないです。

IoTLT GWアドベントカレンダー2日目

ポキオ Node-RED ノード作成

tl;dr

  • 京急の運行情報を取得するNode-RED向けノードを作成しGitHubで公開
  • npmモジュールとしてpublishしたが、Node-REDライブラリに反映されなかった
  • 実装に不備はなさそうで、今回はnpm側の問題が原因らしい
  • ノード作成時に陥りやすい問題や、npm特有の問題をまとめる

やりたかったこと

github.com

Node-REDのノードで、大好きな京浜急行に関するノードがなかったため、作ってみようかなと思い、上記リポジトリで実装を開始しました。

nodered.org

本家ドキュメントに沿って、ノード開発を進めてきて、ほぼほぼ動作してそうだったので、公開に踏み切ったわけです。

ポキオ Node-RED ノード作成

Node-REDのノードと言っても、要はnpmパッケージ開発とフローはほぼ一緒で、上記のように開発をしたあとにnpmコマンドでnpmjsに公開をする流れです。特にNode-REDのノードの場合は、Node-REDのライブラリが定期的にnpmjsをクロールしているようで、Node-RED向けノードはその後自動でNode-REDライブラリに登録される感じになっています。

発生した問題

npmjsで公開されていれば、いわゆるnpm installコマンドで、誰でもそのパッケージは使えるようになります。

ポキオ Node-RED ノード作成

更にNode-REDライブラリに自分のパッケージが登録されると、Node-REDのUIからコマンドを打つことなくノードをインストールすることが可能になるわけです。

ポキオ Node-RED ノード作成

しかし、ここで問題は発生します。npmコマンドによりnpmjsにパッケージは公開できたものの、その後Node-REDライブラリに自分のノードが追加されることがありませんでした

正直、Node-REDライブラリに登録されなくても、そこまで致命的ではないのですが、Node-REDをWebのサービスとして提供しているケースだと、ノード追加はNode-RED UI上からのインストールに頼らざるを得ないため、Node-REDライブラリに登録されることが極めて重要になってくるわけです。(要はnpmコマンドが使えない)

試したワークアラウンド

少し待ってみる

Node-REDライブラリまでには時間がかかることもあるということだったので、ちょっとまってみました。

ただ、1日経っても登録されることはありませんでした。

実装を見直してみる

よくやりがちなミスとして、

  • package.jsonのkeywordsに「node-red」がない
  • プレフィックス「node-red-contrib-」を用いて命名されてない
  • README.mdがない
  • LICENSEがない
  • npmで公開されてない
  • npm versionしたあとにgit pushし忘れてる

上記の項目が挙げられますが、これも問題ありませんでした。

本家Node-REDのSlackに聞いてみる

https://nodered.org/slack/

「何かあったら聞いてくれ」と公式ドキュメントにも書かれていたので、ちょっと質問を投げてみました。

unfortunately your node does not appear in the search on npm - https://www.npmjs.com/search?q=node-red-contrib%20keikyu

どうやら、npmの検索に引っかかっていないようです。

You have done everything right - but npm has failed to add your node to its search index

we don’t have a workaround for that at the moment

私の実装には問題なさそうで、現状できることはなさそうとのこと。

その後、

try updating the version number and publish it again

that sometimes kicks npm

バージョンをちょっと上げて再度publishするといいかもとのことだったので、やってみました。が、ダメでした・・・。

npmのフォーラムに聞いてみる

https://npm.community/

こうなったら、npmの人に聞くしかないと思い、こちらでも質問を投げてみました。

I’m having the same problem with dc-mar. I published it 5 days ago, and it’s still not showing up in searches.

同じ症状に直面した人からコメントはいただけましたが、ワークアラウンドや対応方法に関する情報は得られませんでした。

バージョンを上げて再度publish

結局効果はなかっですが、バージョンを上げて再度publishは何度か試しました。

npm version patch
git push
npm publish ./

npm version hogeは、package.jsonのバージョンをインクリメントしてくれる便利コマンドです。majorminorpatchがオプションで指定できて、インクリメントする部分(?)を変えることができます。このコマンドでは変更点をcommitするところまでやってくれますがpushはしてくれないので、自前でgit pushする必要があります(忘れがち)。

バージョンを下げる

引いてダメなら押してみろ、ではないですが、逆にpublishした最後のバージョンの取り下げも行ってみました。

npm unpublish -f

これもダメでした。

一旦パッケージを非公開にして、再度公開する

もう、ここまで来たらやけくそです。

npm unpublish node-red-contrib-keikyu -f

上記コマンドで、npmパッケージを綺麗さっぱり削除することができます。ただし、このコマンドには副作用があります。

npm ERR! 403 Forbidden - PUT https://registry.npmjs.org/node-red-contrib-keikyu - node-red-contrib-keikyu cannot be republished until 24 hours have passed.

unpublish後24時間以内は、再度publishができないそうです。ご利用は計画的に。

24時間以上経った後、再度npm publish ./してみたところ・・・

ついに公開されましたー!

ポキオ Node-RED ノード作成

京急の運行情報を取得するだけのノードですが、ぜひご利用ください。

flows.nodered.org

www.npmjs.com

まとめ

  • package.jsonなどでミスしやすい箇所があるので気をつける
  • なにかわからないことがあったらフォーラムで聞く
  • 聞いてもわからないこともある
  • ひたすら試行錯誤する
  • 反映までに時間がかかったり、24時間は再publishできないこともあるので、時間に余裕を持って開発をする

参考スライド

speakerdeck.com

「Androidのメモとか」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。

このブログは個人的なメモ書きであったり、考えを書く場所であります。執筆者の所属する団体や企業のコメントや意向とは無関係であります。また、このブログは必ずしも正しいことが書かれているとは限らず、誤字脱字や意図せず誤った情報を載せる場合がありえます。それが原因で読者が不利益を被ったとしても、執筆者はいかなる責任も負いません。ありがとうございます。