Getting Started with Node.js on Heroku

#Getting Started with Node.js on Heroku
https://devcenter.heroku.com/articles/getting-started-with-nodejs#view-the-logs


##クイックスタート
Node.jsとHerokuを使う。

###準備
・Herokuのアカウントを作る。
　　https://id.heroku.com/signup/devcenter
・Heroku Toolbeltをインストールする。
　　https://toolbelt.heroku.com/
・Node.jsをインストールする。
　　http://nodejs.org/
　　日本語 http://nodejs.jp/nodejs.org_ja/


###開発環境のセットアップ
Herokuにログインする。

```
ターミナル
$ heroku login
Enter your Heroku credentials.
Email:
Password (typing will be hidden): 
Authentication successful.
```


###Node.jsでアプリケーションを作成
web.js という名前の、"Hello World!"だけのサンプルアプリを書く。
(私は、Desktopにnodeというフォルダを作り、その中にweb.jsを保存した)

```web.js
var express = require("express");
var logfmt = require("logfmt");
var app = express();

app.use(logfmt.requestLogger());

app.get('/', function(req, res) {
  res.send('Hello World!');
});

var port = process.env.PORT || 5000;
app.listen(port, function() {
  console.log("Listening on " + port);
});
```


###npmとの依存関係を宣言
herokuがNode.jsのアプリだと認識するように、package.jsonに宣言しておく。
(さっき作ったnodeというフォルダにpackage.jsonを作る)

```
ターミナル
$ cd Desktop/node
$ npm init

{
  "name": "★nodeappsample",
  "version": "★0.0.1",
  "description": "★my first and the greatest app you've ever see",
  "main": "web.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "example",
    "heroku"
  ],
  "author": "★Me",
  "license": "BSD"
}
```

★のところは好きなように書ける。

ちゃんとできているか確認する。

```
ターミナル
$ ls
package.json	web.js
```

できてる。
中身を開いてみる。

```
ターミナル
$ open package.json
```

```package.json
{
  "name": "nodeappsample",
  "version": "0.0.1",
  "description": "my first and the greatest app you've ever see",
  "main": "web.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "example",
    "heroku"
  ],
  "author": "Me",
  "license": "BSD",
  "dependencies": {
    "logfmt": "~0.18.1",
    "express": "~3.4.7"
  }
}

```

おぉー！

次、npmで必要となるパッケージをインストールする。

```
ターミナル
$ npm install express logfmt --save
npm http GET https://registry.npmjs.org/logfmt
npm http GET https://registry.npmjs.org/express
npm http 200 https://registry.npmjs.org/logfmt
npm http GET https://registry.npmjs.org/logfmt/-/logfmt-0.18.1.tgz
npm http 200 https://registry.npmjs.org/express
ずらずらずら・・・
```

package.jsonにエンジンフィールドを追加する。

まず、nodeのバージョンを確認する。

```
ターミナル
$ node -v
v0.10.13
```

package.jsonに追加する。

```package.json
{
  "name": "nodeappsample",
  "version": "0.0.1",
  "description": "my first and the greatest app you've ever see",
  "main": "web.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "example",
    "heroku"
  ],
  "author": "Me",
  "license": "BSD",
  "dependencies": {
    "logfmt": "~0.18.1",
    "express": "~3.4.7"
  },
//追加
  "engines": {
    "node": "0.10.13"
  }
}
```


###Procfileでプロセスタイプを宣言
Procfileというファイル名で、プロセスタイプを宣言する。
(さっきのnodeというフォルダにProcfileを作る)

```Procfile
web: node web.js
```

heroku toolbeltでインストールされたforemanを使って、ローカルでアプリを動かしてみる。

```
ターミナル
$ foreman start
12:25:26 web.1  | started with pid 5482
12:25:26 web.1  | Listening on 5000
```

アプリが起動した。
アクセスしてみる。
http://localhost:5000/

Hello World!

と表示された！

ターミナルは、[コントロールC]で終了する。


###Gitにアプリを保存
作ったweb.js、package.json、Procfileをgitで更新するために、gitの設定をする。

```
ターミナル
$ git init
$ git add .
$ git commit -m "★init"
```


###Herokuへアプリをデプロイ
Herokuのアプリを作る。

```
ターミナル
$ heroku create ★アプリの名前　書かなくてもOK
Creating アプリの名前... done, stack is cedar
http://アプリの名前.herokuapp.com/ | git@heroku.com:アプリの名前.git
Git remote heroku added
```

アプリの名前がURLになるため、既に使われているアプリ名は設定できない。

コードをデプロイする。

```
ターミナル
$ git push heroku master
Initializing repository, done.
Counting objects: 592, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (562/562), done.
Writing objects: 100% (592/592), 3.70 MiB | 404.00 KiB/s, done.
Total 592 (delta 94), reused 0 (delta 0)
ずらずらずら・・・
```


###Herokuにデプロイしたアプリを確認
dynoがあることをを確認する。

```
ターミナル
$ heroku ps:scale web=1
Scaling dynos... done, now running web at 1:1X.
```

dynoの状態を確認する。

```
ターミナル
$ heroku ps
=== web (1X): `node web.js`
web.1: up 2013/12/20 12:29:58 (~ 26s ago)
```

dynoがひとつ動いている。

ブラウザでアプリを確認する。

```
ターミナル
$ heroku open
Opening アプリの名前... done
```

ブラウザにHello World!と表示される。




2013.12.20