Node.jsをHerokuにデプロイしたらエラーが発生した

こんにちは、今回はNode.jsをHerokuにあげたらエラーが大量発生したのでその解決法を記録しておきたいと思います。

## ■今回対処したエラー
最初に私が直面したエラーを説明しておきます。
とにかくHerokuと私のNode.jsの設定が異なっていたことが原因でした。
①npmとnodeのバージョン
②ビルドコマンド
③startのコマンド
④環境変数を設定していなかった

```plaintext:発生したエラー
 ! [remote rejected] main -> main (pre-receive hook declined)
error: failed to push some refs to 'gitのURL…'
```

## ■環境
・Windows
・Node.js: 14.x
・npm: 6.x

(下記はあまり関係ないけれど)
・Express
・nodemon
・Mongo DB
・mongoose

## ■Node.jsをデプロイする方法
エラーの解説の前に、一旦デプロイ方法です。
もう出来ている方は右下の目次からエラーのところまですっ飛ばして下さい。

こちらを参考にしました。

https://devcenter.heroku.com/ja/articles/getting-started-with-nodejs

①Heroku CLIのダウンロード(これは実際必要だったか不明…)
②インストールしたheroku...exeフォルダでコマンドプロンプトを開く
③下記コマンドを打つ

```plaintext:コマンドプロンプト
heroku login
サイトが開くのでログインする
heroku create
```
④herokuのサイトを開くとURLが出来ているので、開いて「Deploy」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2365717/fbcd1180-563b-f7e5-c489-3f58eabd4d05.png)

⑤Gitを選択して、対象のリポジトリと接続してデプロイ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2365717/0b2b5bb8-0b07-2472-20a2-e574bf3b6bd5.png)

⑥あとは右上「Open app」を押下して、別ウィンドウで正しくアクセス出来たら成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2365717/2d49771f-7e84-29b8-38c0-061e68be41e6.png)

方法としてはVercelやAWS Amplifyに近い印象。
このデプロイの途中(ビルドの途中)でエラーが大量発生しました。。

## ■今回発生したエラーについて
### ①npmとnodeのバージョン
これはこのまま下記記事を参考にしました。(ありがとうございます…！)

https://qiita.com/AK_-_-_-I/items/ad2f45d4a1c79c38d55f

私が使用していたバージョンは
・node: 14.x
・npm: 6.x
だったのですが、Herokuで設定されているバージョンは
・node: 16.x
・npm: 8.x
だったようで、エラーが起きていました。
これはpackage.jsonに自分のバージョンを明記しておくことで乗り切りました。

```plaintext:package.json
    "engines": {
    "node": "14.x",
    "npm": "6.x"
  },
```

### ②ビルドコマンド
余計なビルドコマンドを書いていたせいで、エラーとなっていました。
これはpackage.jsonから余計な一文を削除しました。

エラー内容： sh: 1: tsc: not found
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2365717/9bb6b907-f2d2-6db5-476b-3750feda7f13.png)

```plaintext:package.json(before)
  "scripts": {
    "build": "tsc",
    "dev": "nodemon src/index.js"
  },
```

```plaintext:package.json(after)
  "scripts": {
    "dev": "nodemon src/index.js"
  },
```

### ③startのコマンド
私は今回、立ち上げるコマンドに「npm run dev」を設定していました。
Herokuは「npm run start」で立ち上げているようで、上手く立ち上がっていませんでした。
そこでこちらもpackage.jsonを下記のように書き換えました。

```plaintext:package.json(before)
  "scripts": {
    "dev": "nodemon src/index.js"
  },
```

```plaintext:package.json(after)
  "scripts": {
    "start": "nodemon src/index.js"
  },
```

### ④環境変数を設定していなかった
今回、DBへの接続URLを.envファイルに書いていたのですが、今回GitHubと連携させていたので.gitignoreで弾いたファイルの変数が反映されていませんでした。
これはサイトから設定しました。

「Settings」を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2365717/cd49b66b-ca80-69bb-55ca-86596f2c44ec.png)

下に下がって「Config Vars」の「Reveal Config Vars」ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2365717/ccda6a45-ae59-37b4-a7eb-0c3a64680f55.png)

.envファイルに書いていた変数名と値を入力→Add
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2365717/f0a1f80f-81fe-c6fa-8929-3ba9b15cd980.png)

※今回私は問題なかったですが、Vercel等の時はここで再デプロイしないと環境変数が反映しなかったので、上手くいかない場合は再デプロイすると反映するかもしれません。

### ■まとめ
という事で今回はありとあらゆるエラーを通ってしまいました。
環境構築の際にいつの間にか変な設定をしていたみたいです。。
Herokuは作業自体は簡単なものの、全て英語なのでエラーが起きると辛いですね…！
という事でここまで読んで頂きありがとうございました。

今回デプロイしたGitHubのリポジトリ：

https://github.com/koda-momo/server-household-account-book