AngularアプリをHerokuにデプロイする

AngularアプリをHerokuにどうやってデプロイするのか気になったので、調査・検証しました。"ng new"で作成されたAngularプロジェクトをGithub経由でデプロイすることができたので、手順を記録しておきます。

作業環境

  • Angular CLI : 11.2.11
  • Node : 14.15.5
  • Git : 2.19.0
  • OS : Windows10
  • Github, Herokuのアカウントを作成しておく

手順

  1. "ng new <アプリ名>"でAngularプロジェクトを作成する
  2. Angularプロジェクトをデプロイ用に修正
  3. AngularプロジェクトをGithubリポジトリに登録する
  4. Herokuにて"Create new app"をクリック。アプリ名とデプロイ方法を設定(Github連携を指定)
  5. Githubリポジトリの更新が起きるたびに、自動ビルド・デプロイが行われる。(手動でのビルドも可能)

各手順の内容を書いていきます。

Angularプロジェクトの作成

任意のフォルダにて、"ng new <アプリ名>"を実行します。(本記事では"angular-heroku-app"という名前でプロジェクトを作成しました。)f:id:kurobuchimeganex:20210505161535p:plain
作成されたプロジェクトの構成は以下の通りになります。
f:id:kurobuchimeganex:20210505161949p:plain
cdコマンドでプロジェクト内に移動して、"ng serve"を実行します。すると、Angularアプリをローカルで起動することができます。ブラウザ上で"http://localhost:4200"にアクセスすることで、起動中のAngularアプリを利用できます。

f:id:kurobuchimeganex:20210505162440p:plain
ng serveの実行結果
f:id:kurobuchimeganex:20210505163033p:plain
ブラウザ上でAngularアプリにアクセス(ローカル)

Angularプロジェクトをデプロイ用に修正

AngularアプリをHerokuでも使えるようにするために、プロジェクトを修正します。以下の手順を実施しました。

  • npmでexpressパッケージをインストール
  • "ng build --prod"を実行。(やらなくても良い)
  • server.jsを作成し、ローカルでアクセスできるか試す。(やらなくても良い)
  • package.jsonにて"start", "build"項目を修正

まず、プロジェクトルート内で"npm install express --save"を実行し、expressパッケージをインストールします。
次に、"ng build --prod"を実行し、プロジェクトをローカルでビルドします。ビルドがうまくいくと、プロジェクトフォルダ内にで"dist/アプリ名"のフォルダが生成されます。

f:id:kurobuchimeganex:20210505180443p:plain
ビルド後にdistフォルダが生成される

ビルドが上手くいったら、プロジェクトロート直下にserver.jsを作成し、Webサーバーを実装します。

const express = require('express');
const path = require('path');

const app = express();

// 'dist/アプリ名'を指定
app.use(express.static(path.join(__dirname, 'dist/angular-heroku-app')));

// 'dist/アプリ名/index.html'を指定
app.get('/*', (req, res, next) => {
    res.sendFile(path.join(__dirname, 'dist/angular-heroku-app/index.html'));
});

app.listen(process.env.PORT || 8080);

プロジェクトルートにて、"node server.js"を実行してみます。ブラウザで"http://localhost:8080"にアクセスし、Angularアプリが上手く動作するか確かめます。
最後に、package.jsonにて、start項目とbuild項目を修正します。start項目は"node server.js"を設定し、build項目は"ng build --prod"を設定します。

f:id:kurobuchimeganex:20210505174637p:plain
package.jsonの編集(start項目とbuild項目)

AngularプロジェクトをGithubリポジトリに登録

作成したAngularプロジェクトをGithubリポジトリに登録します。まずは、Githubにてリポジトリを作成します。Githubにログインして、"new repository"をクリックします。

f:id:kurobuchimeganex:20210505163538p:plain
リポジトリの作成

f:id:kurobuchimeganex:20210505164138p:plain
Githubリポジトリを作成したら、ローカルのAngularプロジェクトをGithubリポジトリに登録します。この時、ブランチ名を"master"から"main"に変更しています。

f:id:kurobuchimeganex:20210505165340p:plain
GithubリポジトリへAngularプロジェクトを登録

Herokuでアプリを作成

Herokuにログインし、画面右上の"Create new app"をクリックします。すると、アプリ名を入力する画面になります。この時、他のデプロイされているアプリの名前と被らないようにする必要があります。

f:id:kurobuchimeganex:20210505165906p:plain
"Create new app"をクリック
f:id:kurobuchimeganex:20210505170144p:plain
アプリ名の入力

"Create App"ボタンをクリックすると、デプロイ方法を選択する画面に移ります。今回Githubを使ったデプロイのため、Deployment method項目にてGithubを選択します。すると、Githubリポジトリを入力する項目が出てくるため、デプロイするリポジトリ名を入力します。リポジトリ名を入力が"Search"ボタンを押すと、"Connect"ボタンが出てきます。Connectをクリックすることで、次の設定へ進めます。

f:id:kurobuchimeganex:20210505170952p:plain
デプロイするリポジトリ名を入力
f:id:kurobuchimeganex:20210505171118p:plain
"connect"ボタンをクリックした結果

"connect"ボタンを押下後、"Automatic deploys"項目と"Manual deploy"項目が出てきます。"Automatic deploys"項目では、Githubリポジトリを更新するたびに、自動ビルド&デプロイを実行するかを設定できます(CIの設定ができる)。"Enable Automatic Deploys"ボタンをクリックして、自動デプロイを有効化します。

f:id:kurobuchimeganex:20210505171645p:plain
自動デプロイ設定と手動デプロイ実行

Manual deployでは手動デプロイを実行できます。"Deploy Branch"ボタンをクリックすることで、GithubリポジトリをHerokuにデプロイします。

デプロイ後

自動デプロイもしくは手動デプロイが上手くいくと、"https://アプリ名.herokuapp.com"でアプリを利用できるようになります。

f:id:kurobuchimeganex:20210505175938p:plain
HerokuにAngularアプリをデプロイできた^^

感想

デプロイ方法が思いのほかシンプルで扱いやすかったです。さらに、Githubリポジトリの更新をトリガーに、Herokuで自動ビルドが行われるのが非常に便利に感じました。
Angularに関して、まだまだ知識が浅いため、引き続き学習に努めたいと思います^^

参考になったサイト

betterprogramming.pub
dev.to