読者です 読者をやめる 読者になる 読者になる

ハードウェアエンジニアの備忘録

電子工学(半導体物性)→応用光学・半導体プロセス→アナログ回路→C/C++→C#/.NETと低レイヤーから順調に(?)キャリアを登ってきているハードウェアエンジニアの備忘録。ブログ開始時点でiOSやサーバーサイドはほぼ素人です。IoTがマイブーム。

HerokuでNode.jsのアプリをディプロイする(Mac版)

Getting Started on Heroku with Node.js | Heroku Dev Center

上のリンクに従い、HerokuでNode.jsのサンプルアプリをディプロイする。

 

①下準備

下準備として、以下の2点が必要だ。

②Heroku Toolbeltのインストール

Heroku Toolbeltをダウンロードし、インストール。ターミナルを開き、

$ heroku login

でログインする。

$ node -v
v6.0.0
$ npm -v
v3.8.6
$ git --version
git version 2.6.4

などと正しく必要なモジュールがインストールされていることも確認しておく。

③アプリケーションを準備する

適当なディレクトリに移動し、サンプルアプリをgit cloneし、cdする。

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

 ④アプリをディプロイする

$ heroku create
$ git push heroku master

 これで、ディプロイができた。

$ heroku ps

 から動いていることも確認できる。また、以下コマンドで作成されたURLにアクセスすることもできる。

$ heroku open

 ⑤ログを見る

$ heroku logs --tail

 これでログを確認できる。中止するにはCtrl+Cを押せば良い。

⑥Procfileを定義する

Procfileとはプロジェクトのルートディレクトリに置かれるファイルのことで、どのコマンドで何をするかを記述できる。今、ルートディレクトリでls

を行うとProcfileが確認できる。Viなどでそれを開いてみると、

web: node index.js

 と記述されている。

これらは

$ <process type>: <command>

のルールで記述され、process typeにはweb, worker, urgentworker, clockなどがある。webプロセスタイプに限ってはHTTPトラフィックを受信する唯一のプロセスであるため名前の変更はできない。

⑦アプリケーションをスケールさせる

$ heroku ps
Free quota left: 17h 23m
=== web (Free): node index.js (1)
web.1: idle 2016/05/01 14:15:13 +0900 (~ 1h ago)

 上のようにheroku psコマンドで稼働中のdynoが確認できる。無料のdynoは30分後にinactiveになり、また1日に18時間以上稼動できない。webリクエストによってactiveにはなるが、それには多少のレイテンシを伴う。これを避けるにはdynoをアップグレードすることとなる。

⑧アプリケーションの依存関係を宣言する。

③でサンプルアプリケーションをコピーしていれば、すでにpackage.jsonファイルがある。このディレクトリで、以下コマンドを打つ。

$ npm install

 

⑨アプリケーションをローカルで動かす

アプリケーションをローカルで動かすのは以下コマンドを使う。

$ heroku local web

 こうすることで、ブラウザからhttp://localhost:5000にアクセスしてみるとアプリケーションが動いていることが確認できる。停止するにはCtrl+Cで良い。

⑩ローカルの変更をプッシュする

アプリケーションの変更をherokuにプッシュする方法を学ぶ。例として、依存関係を追加し、それをテストするコードを書いてみよう。

$ npm install --save --save-exact cool-ascii-faces

 とコマンドを打ち、cool-ascii-facesを追加しよう。また、index.jsを開き、

var cool = require('cool-ascii-faces');
(中略)
app.get('/cool',fucntion(request,response) {
response.send(cool());
});

 上のコードを追加する。

$ npm install
$ heroku local

 として、http://localhost:5000/coolにアクセスすると、アスキーアートの顔が表示される。エンコーディングUTF-8が良い。

このコード変更をまず、ローカルのgitのレポジトリに足す。

$ git add .

 次に、コミットする。

$ git commit -m "Demo"

 ディプロイする

$ git push heroku master

 実際にheroku上で動いていることを確認するには

$ heroku open cool

 とすれば確認できる。

11.コンソールを始める

heroku runコマンドを使うことで、コマンドスクリプトを使用することが可能だ。

$ heroku run node

とすることで、nodeが立ち上がり、node.jsのコマンドを受け付ける。

また、

$ heroku run bash

 とすると、bashコマンドを受け付ける。

12.Config varsを定義する

herokuは設定を外面化することができる。暗号鍵などは外部のconfig varsに格納する。index.jsに以下のコードを足す。

app.get('/times', function(request, response) {
   var result = ''    var times = process.env.TIMES || 5
   for (i=0; i < times; i++)      
result += i + ' ';
 response.send(result);
});

herokuでconfig varを設定するのは

$ heroku config:set TIMES=2

などとする。