2016年6月2日木曜日

【Node.js】HerokuでNode.jsを使うまでのチュートリアル

サーバーサイドのjavascriptを学習するためにHerokuというサービスを利用してみました。

今回は、その手順を紹介していきます。


環境/準備するもの

  • Mac, teminal, vim
  • Unixコマンドに慣れておく
  • Node.js
  • Herokuのアカウント作成

Herokuとは?

Unixコマンドとか、データベースとか、サーバーサイドとか、可視化されていなくて、コマンドラインで操作して、ネットの説明も専門用語だらけで、解りづら過ぎて、全員どっかしらではまるなら、何故最初からわかりやすく書いてくれる人がいないのかが、疑問。

Herokuの公式サイトにある”Getting Started with Node.js on Heroku” のガイドラインに従って、動かしていきました。



使用したHerokuコマンド 


heroku create
git init
git add .
git commit -m “message”h
git push heroku master
heroku ps:scale web=1
heroku open

heroku log —tail    Ctrl+C

heroku ps




Procfileとは

アプリのルートディレクトリに置くファイルで、アプリを起動するときに何のコマンドが実行されるかを宣言するためのもの。

dynoとは

dynoとは、Procfileで指定されたアプリが動くWebの名前。
gこれは、heroku psコマンドで、チェックできる。
dynoは、30分放置するとスリープして、また起きるまで数秒かかるらしい。

herokuは、ルートディレクトリにpackage.jsonという名前のファイルの有無で、それがNode.jsのアプリかどうかを判断するようです。
自分のアプリを作成する場合は、npm initコマンドで、それを生成してくれます。
そして、package.jsonファイルでは、Herokuで動かすアプリのNode.jsのバージョンなどの依存関係を設定することができます。
npm installコマンドを使うことで、それを自動で調べてくれて、ローカルにインストールしてくれます。
こうすることで、アプリをローカルの環境で動作させることができるようになります。

ローカル環境でアプリを動作させるには、heroku local webコマンドを使います。これは、最初にインストールしたToolbeltに含まれているコマンドです。heroku localというコマンドを打つだけでもOKです。これを打てば、herokuがProcfileを調べてくれて、そこに記述されているアプリケーションを実行してくれます。動作したアプリは、heroku local 後にブラウザのアドレスバーに”localhost:5000”と打ち込めば、動作確認ができます。ローカルサーバーの停止は、Ctrl+C。

※ heroku local コマンドは、アプリと同時に、config varsというのも設定するそうです。


package.jsonファイル内のdependencyに、新たに要素を追加して、index.jsで、そのもmoduleを読み込んで、/coolというディレクトリに表示させるような設定を行います。

この編集が完了したら、npm installで依存関係を解消して、heroku localでローカルサーバーを立ち上げます。
すると、”localhost:5000/cool”にアクセスすると、coolなASCII Faceが表示されます。ブラウザをリロードする度に、異なるものが表示されるようになっているようです。

最後に、これをgitを使って、herokuのサーバーにアップします。

git add .
git commit -m “Demo”
git push heroku master
heroku open

この後に、heroku openで開いたブラウザのURLの末尾に、”/cool” を付け足してリロードすれば、先ほどローカル環境で動いていたアプリが、heroku上(dyno上)で動くようになりました。


heroku上でconsoleを動かせるコマンド


heroku run node で、heroku のコンソールに入ります。アプリの動作テストなどをコンソール上で行うときなどは便利かもしれません。
また、heroku run bash とすれば、herokuのディレクトリでbashコマンドが使えます。vimは使えませんでした。


config vars を定義する


app.get('/', function(request, response) {
  response.render('pages/index')
});

このの部分を、

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

と編集します。

そして、heroku local ⇛ localhost:5000

すると、cool の顔が100個表示されたと思います。

var times = process.env.TIMES || 100

の箇所の論理演算子 || は、process .env.TIMES が false の場合に、100を times という変数に代入しているということです。

そこで、同じディレクトリに .env というファイルを作成してみましょう。

その中に、TIME=2 と記述し、保存して、もう一度 heroku local ⇛ localhost:5000 とすれば、cool の顔が2つだけ表示されます。
これは先程の process.env.TIMES が true になったので、100 がfalse になり、実行されなくなったためです。

現在、heroku config コマンドを見てみると、〜 has no congif vars. と表示されるはずです。

そこで、heroku config: set TIMES=2 というコマンドを打ち込めば、heroku上で、TIMESを2に設定してくれます。

この設定を解除するには、heroku config:unset TIMES と打ち込めばOK。

別の数字を代入するには、そのまま heroku config:set TIMES=1000 などと打ち込めば上書きしてくれるようです。

heroku config:set TIMES=1000 として試してみれば、heroku上でしっかり表示されることが確認できます。


postgreSQLのデータベースにリモート接続する


heroku pg:psql というコマンドで、heroku上のpostgreSQLのデータベースにアクセスすることができます。
コマンドラインで指示を与えていきます。
create table test_table (id integer, name text);
これでtest_tableという名前のテーブルを作成し、テーブルの1列目は整数のid番号、2列目は、文字で名前を格納します。
insert into test_table values (1, ‘hello database’);



これで、heroku open ⇛ /db にアクセスすると、データベースの中身を見ることができます。


HTH.

0 件のコメント:

コメントを投稿