タイトルに深い意味はないです。
tl;dr
- 京急の運行情報を取得するNode-RED向けノードを作成しGitHubで公開
- npmモジュールとしてpublishしたが、Node-REDライブラリに反映されなかった
- 実装に不備はなさそうで、今回はnpm側の問題が原因らしい
- ノード作成時に陥りやすい問題や、npm特有の問題をまとめる
やりたかったこと
Node-REDのノードで、大好きな京浜急行に関するノードがなかったため、作ってみようかなと思い、上記リポジトリで実装を開始しました。
本家ドキュメントに沿って、ノード開発を進めてきて、ほぼほぼ動作してそうだったので、公開に踏み切ったわけです。
Node-REDのノードと言っても、要はnpmパッケージ開発とフローはほぼ一緒で、上記のように開発をしたあとにnpmコマンドでnpmjsに公開をする流れです。特にNode-REDのノードの場合は、Node-REDのライブラリが定期的にnpmjsをクロールしているようで、Node-RED向けノードはその後自動でNode-REDライブラリに登録される感じになっています。
発生した問題
npmjsで公開されていれば、いわゆるnpm install
コマンドで、誰でもそのパッケージは使えるようになります。
更にNode-REDライブラリに自分のパッケージが登録されると、Node-REDのUIからコマンドを打つことなくノードをインストールすることが可能になるわけです。
しかし、ここで問題は発生します。npmコマンドによりnpmjsにパッケージは公開できたものの、その後Node-REDライブラリに自分のノードが追加されることがありませんでした。
正直、Node-REDライブラリに登録されなくても、そこまで致命的ではないのですが、Node-REDをWebのサービスとして提供しているケースだと、ノード追加はNode-RED UI上からのインストールに頼らざるを得ないため、Node-REDライブラリに登録されることが極めて重要になってくるわけです。(要はnpmコマンドが使えない)
試したワークアラウンド
少し待ってみる
Node-REDライブラリまでには時間がかかることもあるということだったので、ちょっとまってみました。
そこそこ時間かかるときありますね
— 菅原のびすけ (@n0bisuke) 2019年4月23日
ただ、1日経っても登録されることはありませんでした。
実装を見直してみる
よくやりがちなミスとして、
- package.jsonのkeywordsに「node-red」がない
- プレフィックス「node-red-contrib-」を用いて命名されてない
- README.mdがない
- LICENSEがない
- npmで公開されてない
- npm versionしたあとにgit pushし忘れてる
上記の項目が挙げられますが、これも問題ありませんでした。
設定あってるはずですなー
— Tanaka Seigo (@1ft_seabass) 2019年4月24日
本家Node-REDの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のフォーラムに聞いてみる
こうなったら、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のバージョンをインクリメントしてくれる便利コマンドです。major
、minor
、patch
がオプションで指定できて、インクリメントする部分(?)を変えることができます。このコマンドでは変更点を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 ./
してみたところ・・・
ついに公開されましたー!
京急の運行情報を取得するだけのノードですが、ぜひご利用ください。
まとめ
- package.jsonなどでミスしやすい箇所があるので気をつける
- なにかわからないことがあったらフォーラムで聞く
- 聞いてもわからないこともある
- ひたすら試行錯誤する
- 反映までに時間がかかったり、24時間は再publishできないこともあるので、時間に余裕を持って開発をする
参考スライド
- 作者:Node‐REDユーザーグループジャパン
- 発売日: 2017/09/01
- メディア: 単行本