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

こんにちは、ポキオです。

[IoTLT Advent Calendar 2019](https://qiita.com/advent-calendar/2019/iotlt)と[enebular Advent Calendar 2019](https://qiita.com/advent-calendar/2019/enebular)の15日目の記事です。
~~手抜きです、ごめんなさい。~~


![ポキオ Node-RED ノード作成](https://lh3.googleusercontent.com/ErN3bJigHpElEQ0-tnk_k8az9XIHRdR9Px3nJQtUuFvu37sn5TPTy7sWekD2Y4nF237SV0m6sk4exQjKquAtBqp2XLLjY1SKxZrI9VGXTY8IFydWAv6_kDZOFEtBkMmyCG5rf739ypg=s600 "ポキオ Node-RED ノード作成")

## tl;dr

 - 京急ノードを作ってみました
 - Node-REDのノードライブラリに反映されるまで時間がかかることがあります
 - 一度公開したあとも、ノードのメンテは必須です
 - Node-RED、だぁいすき！


## 話の発端：Node-RED向けの京急ノードを作りたかった

この記事をご覧の諸兄姉にとっては釈迦に説法かもしれませんが、**Node-RED**はグラフィカルなUIで、ノンコーディングでもプログラミングができてしまう、素晴らしいツールでございます。

Node-REDで部品として動くパーツである**ノード**は色々準備されていたり、**ノードライブラリ**でも種々のノードが公開されていて、Node-REDの可能性を無限に広げてくれています。

ただし、なかなか日本向けのノードがないのに玉に瑕で、だからこそ自分でノードを作って公開しようというモチベーションが湧いてきたわけです。とりわけ、**私は京急が大好きなので**、京急にまつわるノードを作ろうと思い立ったわけです。


で、作ったのがこれです。

[node-red-contrib-keikyu](https://flows.nodered.org/node/node-red-contrib-keikyu)
https://flows.nodered.org/node/node-red-contrib-keikyu

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212109/b6d65f73-7d75-ba60-0f18-f4659668fc96.png)


京急の運行情報が取得できる、すばらしいノードに仕上がっています（笑）


## 問題①：なかなか公開できない！

[詳しい経緯はこちらで公開していますが](https://relativelayout.hatenablog.com/entry/2019/04/27/234001)、公開作業をしている段階で一つの問題にぶち当たりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212109/eb3c1187-fad4-95b9-410c-9829fd48a513.png)


ノードがノードライブラリで公開されるまで、やることは色々あるわけですが、とりあえずコーディングやnpmjs.comでの公開までは順調に進んだわけです。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212109/1e3115b7-046e-83ec-1e17-ae43665628ee.png)


ただ、npmjs.comでnpmモジュールとしてノードを公開したあと、なかなかノードライブラリに反映されないという問題に陥りました。通常は数時間で反映されるわけなのですが、そのときは全く反映されませんでした。



よくある原因としては、


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

などなどありますが、それはすべてOK。**結局、npmjs.comから一度ノードを削除して、再度公開しました・・・。**削除後は24時間経たないと再公開できないという制限がありましたが、なんとか再公開後にノードライブラリに反映されました・・・。もし同じようなことで困っている方がいらっしゃいましたら、お試しくださいませ。



## 問題②：京急ノードが動かなくなった！

公開して、一安心してたんですが、ある日突然ノードが使えなくなっていました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212109/2d573e1b-0e5c-cbc5-660a-dc2e409aac05.png)


結論から言ってしまえば、京急の運行情報ページのレイアウトが更新されていて、いままで使っていたパースのロジックがワークしなくなり、運行情報の取得ができなくなっていました・・・。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212109/8902c41a-fde8-273c-fc1b-71df9a88381d.png)


もともとパースのロジックは、かなりのクソコードだったので致し方ないとおもいつつ、とりあえずコードを修正して、再度公開しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212109/cab78b9b-3d21-7928-8e5b-faa225338755.png)

また、二度と同じようなことがないように、自分が作ったノードが正しく動作しているか、enebular上でCIのように定期的に動かし、ノードの状態を監視する仕組みを作りました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212109/fa0c9f99-cb11-5f0f-f1d3-e3584cfa1dde.png)

こんな感じでステータスが表示されます。これで完璧ですね！（笑）



## 現在平常通り運転しています。


というわけで、今年もいろいろとお世話になりました。
来年もポキオと京急を何卒よろしくおねがいします！

## 宣伝

ポキオとドライブをしながらIoTとかTechな話をする、[**ポキオ・カープール**](https://www.youtube.com/playlist?list=PLtXzEeISYiWIquZdge4ljgO_gqdYi1VtI)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212109/cf500e75-b6db-c37e-83bc-e6c220a50d42.png)


 ぜひご覧ください！
一緒にドライブしながら喋ってくれる方も大募集中です！