年末年始Webアプリ開発自習の記録1: Node.js 開発環境準備

#はじめに
**[連休を機に考える、怠惰な私の自習戦略][Plan]**にて自習の計画を立てたので、さっそく始めていきます。

#やりたいこと

- 特定のWebRequestをHeader付きのRequestにする中継サーバー
    - 目標1
        - HTTP Requestを受けて、特定のHTTP Requestを送る。返ってきたResponseをそのまま返す
        - 借りているVPSに置いて動かす
        - コードはNode.jsだけで良さそうだが、サーバーサイドのnginxから繋ぐ作業が必要そう
        - Node.jsをデーモンにする
        - 超簡単そうだから一番最初にできそう
        - ExpressやTypescriptを使い始められると尚良し

目的はFitbitの目標達成を、IFTTTを使ってHabiticaの日課達成に繋げることです。
HabiticaのREST APIはAPI Keyなどを一緒に送る必要があるため、IFTTTだけでは実現できません。

#環境準備
自習戦略でも書きましたが準備を重視するタイプなので、何をしたかなるべく詳細に書こうと思います。

##コード置場
普通は1プロジェクトに1リポジトリでしょうが、何回も作り直したりすると思うので、自習用のリポジトリを一つだけ作ってそこに脳死で放り込んでいくことにします。
**[GitHub - 18konoe/Study-Node](https://github.com/18konoe/Study-Node)**

##VS Code
Visual Studio 2017もあることにはあるんですが、今後のことを考えてVS Codeにしました。
先達の知恵を借りてイカしたPluginをどしどし入れていきます。
**[VSCodeのオススメ拡張機能 24選 (とTipsをいくつか)](https://qiita.com/sensuikan1973/items/74cf5383c02dbcd82234)**

###設定の同期
複数マシンを使う自分が最重要視すべきは設定やプラグインの同期方法。**[Syncing](https://marketplace.visualstudio.com/items?itemName=nonoroazoro.syncing)**を使います。

**Upload**
![](https://github.com/nonoroazoro/vscode-syncing/raw/master/docs/gif/Example-Upload.gif)

**Download**
![](https://github.com/nonoroazoro/vscode-syncing/raw/master/docs/gif/Example-Download.gif)

##Rest Client
**[Insomnia](https://insomnia.rest/)**というツールを教えてもらったので使ってみます。
おすすめ募集中です。

##Node.js
~~**[nodistでNode.jsをバージョン管理](https://qiita.com/satoyan419/items/56e0b5f35912b9374305)**を参考にNode.jsをセットアップします。
**[GitHub - nullivex/nodist](https://github.com/nullivex/nodist/releases)**~~古い上にnpmがアップデートできないので違うものを使います。
そもそもサーバーでNVMを使ったんだから、Windows版もあるやろ！と思って探したらあった。
**[nvm-windows でwindows上のnode.jsのバージョンを切り替えて利用する](https://qiita.com/idani/items/53567d92f936846e111c)**を参考にセットアップ。
**[GitHub - coreybutler/nvm-windows](https://github.com/coreybutler/nvm-windows/releases)**からダウンロード

```
> nvm list available

|   CURRENT    |     LTS      |  OLD STABLE  | OLD UNSTABLE |
|--------------|--------------|--------------|--------------|
|    11.6.0    |   10.15.0    |   0.12.18    |   0.11.16    |
|    11.5.0    |   10.14.2    |   0.12.17    |   0.11.15    |
|    11.4.0    |   10.14.1    |   0.12.16    |   0.11.14    |
|    11.3.0    |   10.14.0    |   0.12.15    |   0.11.13    |
|    11.2.0    |   10.13.0    |   0.12.14    |   0.11.12    |
|    11.1.0    |    8.15.0    |   0.12.13    |   0.11.11    |
|    11.0.0    |    8.14.1    |   0.12.12    |   0.11.10    |
|   10.12.0    |    8.14.0    |   0.12.11    |    0.11.9    |
|   10.11.0    |    8.13.0    |   0.12.10    |    0.11.8    |
|   10.10.0    |    8.12.0    |    0.12.9    |    0.11.7    |
|    10.9.0    |    8.11.4    |    0.12.8    |    0.11.6    |
|    10.8.0    |    8.11.3    |    0.12.7    |    0.11.5    |
|    10.7.0    |    8.11.2    |    0.12.6    |    0.11.4    |
|    10.6.0    |    8.11.1    |    0.12.5    |    0.11.3    |
|    10.5.0    |    8.11.0    |    0.12.4    |    0.11.2    |
|    10.4.1    |    8.10.0    |    0.12.3    |    0.11.1    |
|    10.4.0    |    8.9.4     |    0.12.2    |    0.11.0    |
|    10.3.0    |    8.9.3     |    0.12.1    |    0.9.12    |
|    10.2.1    |    8.9.2     |    0.12.0    |    0.9.11    |
|    10.2.0    |    8.9.1     |   0.10.48    |    0.9.10    |

This is a partial list. For a complete list, visit https://nodejs.org/download/release

> nvm install 10.15.0
Downloading node.js version 10.15.0 (64-bit)...
Complete
Creating C:\Users\dmorita\AppData\Roaming\nvm\temp

Downloading npm version 6.4.1... Complete
Installing npm v6.4.1...

Installation complete. If you want to use this version, type

nvm use 10.15.0

> nvm use 10.15.0
Now using node v10.15.0 (64-bit)

> node -v
v10.15.0

> npm -v
6.4.1

> npm i -g npm to update
C:\Program Files (x86)\Nodist\bin\npx -> C:\Program Files (x86)\Nodist\bin\node_modules\npm\bin\npx-cli.js
C:\Program Files (x86)\Nodist\bin\npm -> C:\Program Files (x86)\Nodist\bin\node_modules\npm\bin\npm-cli.js
C:\Program Files (x86)\Nodist\bin\update -> C:\Program Files (x86)\Nodist\bin\node_modules\update\bin\update.js
+ update@0.7.4
+ to@0.2.9
+ npm@6.5.0
added 1061 packages from 915 contributors in 48.681s

> npm -v
6.5.0
```
※一度nodistを入れていたから普通にアップデートできましたが、OS再インストールしたマシンでnvmのみではうまくいきませんでした。
**[nvm環境でnpmのアップデートができない時の対処法](https://qiita.com/jshindo/items/cdbb67208c364b33e287)**を参考にアップデートしました。

#プロジェクト作成
**[npmでnode.jsのpackageを管理する](https://qiita.com/sinmetal/items/395edf1d195382cfd8bc)**を参考に、前回作ったRepositoryにプロジェクトを作ります。

```
> mkdir RestRelayService
> cd RestRelayService
> npm init -y
{
  "name": "RestRelayService",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
```
最初はnode.jsしか使わないと思うのでnpm initする必要はなかったと思いますが、せっかくなのでやってみました。

今回の準備はここまで。次回でコードを書きます。
次回：**[年末年始Webアプリ開発自習の記録2: Node.jsでHabiticaにPOSTを送るWebアプリケーション作成][Next]**

[Plan]:https://qiita.com/dmorita/items/7a85ee9c2de506c27502
[Prev]:https://qiita.com/dmorita/items/
[Next]:https://qiita.com/dmorita/items/483b8fe40e9c4f9c950a