generated at
herokuにNode.jsのアプリをデプロイする
herokuにNode.jsのアプリをデプロイするチュートリアル
package.json をよんでデプロイしてくれる
heroku local でローカルに展開できる
当然 npm install していないとエラーになるので注意
heroku open でデプロイ先のURLを開く
デフォルトでは / 、第二引数で指定すれば /指定したpath にアクセスする
yarnを使いたい場合はengineに記述しておく
heroku config でconfの設定ができる
KEY=VALUE format


Start every new project with npm init
Use a smart .npmrc
上の2つはyarnを使うのでとばす
Hop on the ES6 train
ES6の文法を使うと便利
Stick with lowercase
PSRみたいにクラス名とファイル名を一致させる規約もあるけど使っちゃだめ
理由:Node.jsがクロスプラットフォームだから
OSXやWindowsはmyclassとMyClassを同じに扱うがLinuxは別に扱う
ポータビリティのため
代わりに、lowercaseを使おう
Cluster your app
nodeのランタイムは1CPU、約1.5GBのメモリに制限されているので、クラスタ化されてないアプリをつよつよサーバにいれてもリソースの無駄
マルチコアをつかったり1.5GB以上のメモリを使いたいので、クラスタサポートをアプリに組み込もう
nodeはクラスタをサポートしている
もしも今、よわよわハードで1つのプロセスしか動かさないとしても、将来に対応するハメになるからやっとくといいよ
自分のアプリが必要なプロセスの数を決定する方法は?
テストをすること
Optimizing Node.js Application Concurrency | Heroku Dev Centerでプラットフォームごとに提供される合理的なデフォルトからはじめてもいい
クラスタのプロセス管理の実装はnpmにいろいろある。自分にあったclusterの抽象化を選ぼう
masterとworkerのファイルを分割したいなら forky - npm
エントリポイントや機能が1つがいいなら throng - npm
Be environmentally aware
環境変数の利点をうまく使おう
Node向けのForemanを使う
>Foreman is a manager for Procfile-based applications. Its aim is to abstract away the details of the Procfile format, and allow you to either run your application directly or export it to some other process management format.
ローカル開発が楽になる
Avoid garbage
V8はlazyでgreedyなGCを使う
デフォルトのメモリ制限が1.5GBぐらいで、未使用のメモリを再生する前に、制限に完全に達するまで待つことがあります
>With its default limit of about 1.5 GB, it sometimes waits until it absolutely has to before reclaiming unused memory.
翻訳怪しいkadoyau
メモリ利用量が増えていてリークはしていないのなら、nodeのlazyのふるまいだろう
GCを制御したいならProcfileにV8のフラグをつける
これは1.5GBよりメモリが少ない環境でアプリを動かしたいとき特に重要
Hook things up
npmのライフサイクルスクリプトは自動化のために便利なhook
ビルド前になんかしたいなら preinstall
ビルド後になんかしたいなら postinstall
環境変数も使える
hookのスクリプトが大きくなりすぎた場合は別ファイルに切り出せる
Only git the important bits
余計なもの(コンパイル結果やnode_modules)は .gitignore して
理由
ネイティブでコンパイルする依存関係があると間違ったアーキテクチャでビルドしたバイナリが含まれてしまうので、ポータビリティがおちる