enebularのHerokuボタンからアプリがビルド・デプロイできないを解決


## 【追記】2018/11/12
この記事を投稿したのが2018/11/08だったのですが、
その日のうちに**修正されたようです。**（対応が早い！）
GitHubで`Thank You @pokiiio, @TakedaHiromasa`とメンション飛ばされてました。嬉しい。
ということで[公式ドキュメント](https://docs.enebular.com/ja/Deploy/DeployFlow/Heroku/)の手順通りenebularのHerokuボタンからデプロイできます。
**修正されましたが、もしいつかenebularに限らず同じエラーで困る人が出た時のためにこの記事は残しておきます。**

---

こんにちは、[たいしょー](https://dotstud.io/members/taisyo/)です。
急にenebularのHerokuボタンからアプリをビルド・デプロイできなくなったのでその原因と解決っぽいものを書きます。
`とにかくビルド・デプロイしたい！！`という人は下記のHerokuボタンを押してください。
[![Heroku Deploy](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy?template=https://github.com/TakedaHiromasa/enebular-agent-heroku/tree/0.18.X)

# はじめに
enebularは近々ソフトウェアアップデートを行うようです。
なので、もしかしたらそこでこの問題は解決されるかもしれませんが、それまでの間の一時的なつなぎとしてこの記事を参照していただければと思います。

# enebularのHerokuボタン
下記の公式ドキュメントにもある通り、enebularは作成したフローをHerokuで作成したenebular Node-REDにDeployする機能があります。
>Heroku へのデプロイ
>https://docs.enebular.com/ja/Deploy/DeployFlow/Heroku/

まずこのドキュメント通り進めていって、プロジェクトのDeploy設定の`Deploy to Heroku`ボタンを押すとHerokuにenebularのアプリが作成できます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/259617/a223574e-ed57-7537-d65a-6e552b69e1b5.png" width=500>

# 突然ビルドできなくなった
先週(10/31)まで[ここ](https://github.com/enebular/enebular-agent-heroku/tree/0.18.X)のHerokuボタンからビルドできていたのに先日(11/5~6)急にビルドできなくなりました・・・
<img width="635" alt="loveheroku.png" src="https://qiita-image-store.s3.amazonaws.com/0/259617/2f53512d-6510-44ef-eef4-3a04bd78102e.png">
※急に「Love, Heroku」が表示されるように...

もともとNode.jsやHerokuには全然詳しくないんですが、(Herokuに至っては先日初めたばかり)このままアプリが作れないのも困るのでなんとか解決します。

# 原因調査
### ビルドログ
上記のビルド失敗ログ(LoveHerokuログ)を見た感じ、`「Node version not specified in package.json」`とあるようにNodeのバージョンあたりがおかしいようです。
と、いうことでビルドが成功していた頃のビルドログと、失敗した時のビルドログを比べてみました。

| 成功 | 失敗 |
|:-:|:-:|
|<img alt="成功" src="https://qiita-image-store.s3.amazonaws.com/0/259617/585dcb43-96b3-e7e2-90a7-4ae0e5ccfb61.png"　width=450>|<img alt="失敗" src="https://qiita-image-store.s3.amazonaws.com/0/259617/96f5d09e-6190-5112-e97e-9528baed7e99.png"　width=450>

明らかにNodeのバージョンが変わってます。
バージョンが変わったせいでパッケージの依存関係がうまく構築できず「Love,Heroku」したのでしょうか・・・？

### HerokuのNode.jsサポートについて
上記のログにもある通り、enebularアプリのビルドではNode.jsやnpmのバージョンは明示的に指定しておらず、Herokuのデフォルトに従っているようです。
「LoveHerokuログ」でも`package.jsonでNodeのバージョン指定しろ`と言っています。
もう解決策は目に見えてますが、`「一週間前までは8.xだったじゃん！！ なんで今日から10.xになったん！！！」`と理不尽な怒りを抑えるために[Heroku Dev Center](https://devcenter.heroku.com/)で調べてみると、Node.jsのサポートについて説明されていました。
> Heroku Node.js Support
> https://devcenter.heroku.com/articles/nodejs-support

その中の・・・
<img src="https://qiita-image-store.s3.amazonaws.com/0/259617/aca96e0c-c9e5-6b23-2565-6fb059a21bb0.png" width=500>
こ、これだー！！！
ちょうどビルド成功時と失敗時の間がactive LTSの切り替わり時期だったようです。運が悪いですね・・・

# 修正・解決
### どうする？
さて、解決方法としてはうまくビルドできていた頃のNode.jsのバージョンでビルドするように指定すればいいことが見えてきました。
で、どう修正するかなんですが、色々総当たりで試行錯誤した結果、
[enebular/enebular-agent-herokuリポジトリ](https://github.com/enebular/enebular-agent-heroku)の`0.18.X`ブランチで`node:8.12.0`を指定するとある程度安定して動きそうでした。(npmはデフォルト6.4.1)
enebular公式ドキュメントにもあったプロジェクトDeploy設定のHerokuボタンは`ev2`ブランチに繋がっているのでこのブランチはまだサポート外なのかもしれませんがお許しください・・・
(ev2ブランチはnodeのバージョン指定を色々試してもうまく動かなかった)

### 修正
Herokuボタンの仕組みは、Herokuボタンが押されるとそれに紐づけられたコードリポジトリ(GitHubとかの)を読みにいきます。
リポジトリにはアプリをどうやってビルドするかのいわゆるMakefile的な情報が書かれていてそれを元にHerokuはビルド・デプロイを行うらしいです。
**と、いうことでコードリポジトリを修正しました！**

>[/TakedaHiromasa/enebular-agent-heroku/tree/0.18.X](https://github.com/TakedaHiromasa/enebular-agent-heroku/tree/0.18.X)

そして修正したHerokuボタンです。好きなだけ押してください。
[![Heroku Deploy](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy?template=https://github.com/TakedaHiromasa/enebular-agent-heroku/tree/0.18.X)

以上、みなさん良きenebular&Herokuライフを！