# coah

## しないといけないこと

#### .envを書く

この辺を書いておくとよいです

```
TWITTER_CONSUMER_KEY=
TWITTER_CONSUMER_SECRET=
TWITTER_CALLBACK_URL=
MONGODB_URI=
```

## 必要なもの

- io.js
- redis
- mongodb
- sketch tools

### あると便利なもの

- nvm
- direnv

### インストール方法

#### nvm

```
brew install nvm
echo '
[[ -d /usr/local/opt/nvm ]] && export NVM_DIR=/usr/local/opt/nvm
[[ -f $NVM_DIR/nvm.sh ]] && source $NVM_DIR/nvm.sh
' >> ~/.{zshrc,bashrc}
```

iojsのアップデート頻度が高い + バージョンによって動かない等あるので、nvmとかnodebrewとかでバージョン管理してください、ここではnvmを想定して説明します


#### iojs

```
nvm install
nvm alias default
nvm use
```

プロジェクトルートに`.nvmrc`があります、同じ階層でnvmの作業をするとバージョン指定が省略できます


#### sketch tools

```bash
brew install caskroom/cask/brew-cask
brew cask install sketch-tool
```

フォントをビルドするために必要です（特にフォントをいじらない場合は不要です）、brewcaskで入れられます

[こちら](http://bohemiancoding.com/sketch/tool/)からダウンロードして手動でインストールしてもいいです


#### direnv

```bash
brew install direnv
direnv allow
```

`.envrc`がある場所へ移動すると中に書いてある処理が自動で実行されます、最初に`direnv allow`と叩いて実行を許可しないと有効になりません（次回以降は変更があるまで不要です）


## 開発のはじめかた

```bash
npm i
npm run dev
```

アプリケーションサーバ・ウォッチサーバが立ち上がります

特定のファイルを編集後、必要であればサーバをリロードし、読み込みが可能な状態になった時点でブラウザがオートリロードされます、`child_process.fork`と`browser-sync`を使っています

キャッシュを使った差分ビルドなど活用しているのでそこそこ軽快に動作するはずです、「このタスクが重い」などあれば指摘ください


## 単独ビルド

```
npm run build
```

静的ファイルがすべてビルドされます、サーバは立ち上がりません


## SublimeLinterの設定

```
SublimeLinter
SublimeLinter-jscs
SublimeLinter-contrib-eslint
```

上記3パッケージを導入します

```
npm -g i jscs esprima-fb eslint eslint-plugin-react babel-eslint
```

アクティベートするには上記パッケージが必要です

```
direnv allow
```

開発パッケージには全てのlinterが含まれています

direnvで`node_modules/.bin`へパスを通せば上記パッケージの導入は不要です

`ctrl` + `` ` ``でコンソールが開きます、パッケージが足りない旨警告が出ていた場合は`npm -g`します(jscsはdirenvを使ってもパスが通らないかもしれないです)


## カスタムフォントのビルド

```bash
gulp symbols
```

フォント生成はosxでしか動作しないためオートメーション化されていません、`lib/symbol/symbol-font-16px.sketch`を編集後、上記コマンドにて手動でビルドしてください

**git監視下にあるファイルが変更されますが正しい挙動です**

生成ファイルを`public`フォルダへ配送する処理はbuildタスクに入っています、ウォッチサーバが起動していれば生成コマンドを実行後に自動で配送されオートリロードされます

フォントはなるべくピクセルパーフェクトになっていると良いと思います


## プロダクションモード

[unitech/pm2](//github.com/unitech/pm2)を使います

インスタンス数などの設定は`package.json`に記述されています

direnvを導入していれば`pm2`コマンドが使えます

何か問題が起きた場合は`pm2 kill (node_modules/.bin/pm2 kill)`してください、PM2プロセスがmasterごと全部落ちます


## 環境変数を上書きする

```bash
$ cat .env
ENV1=hoge
ENV2=fuga
```

プロジェクトルートに`.env`ファイルを作れば起動時にその値で上書きされます

ファイルの読み込みやデフォルト値の設定に関する処理は`lib/env.js`に記述されています、`.env`は`lib/env.js`よりも優先されます
