enebular x LINE Clova で Node-RED 1.0 と 新 Heroku 環境に対応した話

## はじめに
2年前 (2018年10月) に LINE Clova スキル「<a href="https://clova.line.me/clova-ai/skillstore/skill/net.ddns.kitazaki.haikumaker">５７５メーカー</a>」を enebular で実装し公開しましたが、とうとうリファインする時がやってきました。

当時、なかなか審査に通らず何度も公開を諦めようとしたことを思い出しました。
<a href="https://enebular.connpass.com/event/102144/">enebular developer meetup vol.4</a> で 発表した時の登壇資料に詳細を記載していますので、Clova スキルを公開する際の参考にしてみてください。

<a href="https://www.slideshare.net/kitazaki/2-20181025-enebular-meetup4-kitazaki"><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/26f2a7cd-3f0b-1a1c-3f8f-c5916dc8344f.png" width="75%"></a>

### ５７５メーカーとは
俳句(５７５)を自動で作成するサービスで、上５(3,107語)、中７(3,361語)、下５(3,090語)の中から組み合わせて作成します。
「俳句を作って」と言うと、俳句を作ることができます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/9e96da28-fb23-91b0-b5e8-f352e93b5b38.png" width="75%">

「送って」と言うと、連携したLINEに俳句を送ることができます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/9271d476-5c1b-f4a3-04a2-f9723276196d.png" width="75%">

公開するために審査を通す必要があり、審査で指摘された事項に対応するため多くの機能を実装したことにより巨大なフローになっています。フローは enebular で公開 (publish) していますので、気になる方は参考にしてみてください。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/705f3ec1-8b53-f8a9-3200-db1f19782a90.png" width="75%">


## 経緯
リファインすることになった理由は大きく 3 つあります。

① Clova CEK の対話エンジンが新しくなった
② enebular が Node-RED 1.0 に対応した
③ デプロイ先の Heroku 環境の MongoDB が利用停止になった

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/4a9593af-f215-2412-5079-59a91ecb5da2.png" width="75%">

### ① Clova CEK の対話エンジンに対応
2019年6月に対話エンジンが新しくなって対話モデルを再ビルドする必要があったのですが、最悪、運営側で強制的に再ビルドすると書かれていたので、そのままにしてありました。
今回、③の理由で Heroku 環境が停止になったことで運営から連絡を受けたため、②の対応と合わせて①の対話モデルを再ビルドして再申請することにしました。
結果的に、対話モデルの再ビルドで動作は問題ありませんでした。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/3343ad35-8c37-205d-3d65-59f107025784.png" width="75%">

## ② enebular が Node-RED 1.0 に対応
2020年7月に enebular で使用している Node-RED のバージョンが 0.18.6 から 1.0.5 にメジャーバージョンアップされました。Heroku 環境にデプロイされている enebular には影響が無いため、そのままにしてありました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/2b7ab2a6-d4e7-41c3-78d9-0bdd63264a6a.png" width="75%">

今回、③の理由で Heroku 環境が停止になったことで、Node-RED 1.0 で再デプロイが必要になり、フローを開いたところエラーが表示されフローに大量の不明ノードが出現し、一瞬唖然となりました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/e720b0db-3921-8dd4-03dc-d610c1dc111b.png" width="75%">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/740031ce-6f95-f14a-a394-ad01ffa41f2f.png" width="75%">

原因は enebular で使用されている Firebase ノードが
<a href="https://flows.nodered.org/node/node-red-contrib-firebase">node-red-contrib-firebase</a>
から
<a href="https://flows.nodered.org/node/node-red-contrib-firebase-data">node-red-contrib-firebase-data</a>
に変更になったことでした。

### Firebase ノードの移行
新しい Firebase ノードは 1 つのみです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/71fbac65-6951-925f-c969-9e0d425558d8.png" width="33%">

firebase.config は設定情報で、firebase.once と firebase.modify ノードを Add Firebase ノードへ移行します。

 - firebase.config ノード

Firebase の URL を入力し、Auth Type に JSON Web Token を指定します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/822aa63b-6fb2-6d1c-ec76-fbe415fa9106.png" width="75%">
トークンは Firebase Admin SDK を使用して作成します。作成したトークンの中で client_email と private_key を設定します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/e57036ee-3f4e-f157-c53d-a1cf5eb92fd2.png" width="75%">

 - firebase.once ノード

Firebase からデータを取得するノードです。Method に get を指定します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/c697d0e6-cb48-9fa8-6ccf-84a079dba3fe.png" width="75%">

 - firebase.modify ノード

Firebase へデータを追加・変更するノードです。Method にそれぞれ push と set を指定します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/4d252c5c-9b19-af8a-b2c9-5f3665b023cf.png" width="75%">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/c6f9cda3-8d49-a8fa-1282-aa402b2cd3ce.png" width="75%">

## ③ Heroku 環境の再構築
2020年11月10日までに環境を移行するよう、Heroku と enebular からそれぞれお知らせメールが届いていました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/d2f8a8f4-ce0c-3eef-c49f-8627296ea979.png" width="75%">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/1c6f0bdc-8e01-bcb8-f7b5-637eb39da8cc.png" width="75%">

しばらくは大丈夫だろうと高を括っていたら、予定とおり2020年11月10日に Heroku 環境が停止され、2020年11月13日に LINE の運営からスキルが使用できない旨のメールが届きました。
一定期間改善されない場合はスキルの公開を停止すると警告され、結果的にこのメールがリファインするトリガーとなりました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/d3181920-2c23-256f-57db-1ab3e90c7c86.png" width="75%">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/16bf2395-c857-4284-8f0b-8d6dfb15e88d.png" width="75%">

Heroku 環境の再構築手順は enebular 公式のドキュメントとおりでした。
https://docs.enebular.com/ja/deploy/deployflow/heroku/
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/c2814fc3-c677-01ca-15f6-499ead80d5f5.png" width="75%">

https://docs.enebular.com/ja/deploy/deployflow/heroku/recreating-by-postgres-addon.html
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/ee63e134-32c8-c32f-d750-28e38974b97f.png" width="75%">

## まとめ
小まめにフローをメンテナンスしないと、いざ急に停止した際に対応するのが大変ですね。
ほとんどの方は問題無く Node-RED 1.0 と 新 Heroku 環境に移行できていると思いますが、もし躓いた方がいれば少しでもお役に立てたら幸いです。
では、良き enebular ライフを！