HerokuでNode.jsを始める方法

Heroku では Python, Ruby, Go など様々な言語を用いてウェブアプリを開発することができますが,今回は Node.js での開発をスタートする方法を紹介したいと思います.

開発環境の構築

今回は macOS で進めていきます.Windows の場合は,公式ページからダウンロードしてください.

まず,パソコンに Heroku の開発用パッケージをインストールします.

terminal

$ brew install heroku/brew/heroku

インストールが終了したら,メールアドレスとパスワードで Heroku にログインします.

terminal

$ heroku login

Node.js, npm, Git を利用するので,インストールされているか確認します.

terminal

$ node --version
v10.6.0

$ npm --version
6.1.0

$ git --version
git version 2.15.2 (Apple Git-101.1)

サンプルアプリのインストール

terminal

# 任意のディレクトリに移動 (ここではホームディレクトリ直下)
$ cd ~/

$ git clone https://github.com/heroku/node-js-getting-started.git
$ cd node-js-getting-started

# 依存パッケージのインストール
$ npm install

パソコン上にチュートリアルとして用意されているアプリをダウンロードして展開します.

アプリの構成

どのようなファイルによってアプリが構成されているかを簡単に確認します.

Procfile

Procfile

web: node index.js

プロセスタイプは web です.デプロイ時に実行するコマンドを書きます.

package.json

package.json

{
  "name": "node-js-getting-started",
  "version": "0.3.0",
  ...
  "engines": {
    "node": "8.11.1"
  },
  "dependencies": {
    "ejs": "^2.5.6",
    "express": "^4.15.2"
  },
  ...
}

アプリの基本情報や依存するパッケージなどを記述します.

terminal

$ npm init

# Yarn の場合
$ yarn init

npm init でプロジェクトを初期化でき,package.json が生成されます. --yes オプションですべてデフォルト値で生成します.

ディレクトリ

  • public: CSS と画像
  • views: ejs (Embbed JavaScript)

index.js

アプリ本体のファイルです.Express がサーバの機能を提供しています.

ローカルサーバでの起動

terminal

$ heroku local web

ローカルで起動すると Procfile に従ってコマンドが実行され,サンプルのアプリであれば http://localhost:5000 で開くことができます.

Heroku へのデプロイ

terminal

# Heroku アプリの作成
$ heroku create

# チュートリアルアプリをデプロイ
$ git push heroku master

# アプリを開く
$ heroku open

heroku create では自動的に名前が付けられますが, --name オプションで既存のアプリと被りのない名前を付けることができます.

各コマンド

ログの確認

terminal

$ heroku logs --tail

アプリのスケーリング

terminal

$ heroku ps

現在動作している dyno を調べることができます.dyno はコアのような概念で,無料プランではひと月 1000 dyno 時間まで利用できます.

最後に

サンプルアプリは Express というウェブアプリケーションフレームワークを利用しており,これによってルーティングなどが機能しています.また,UI として HTML ではなく ejs が用いられているようです.

Vue では webpack-dev-server (webpack-serve) が開発用サーバとして使われることが多く,開発中は Express を考えなくてもなんとかなりますが,本番環境にデプロイするときは webpack-dev-server が使えないので,そこら辺を考える必要があります.