Node.jsの開発環境をとっとと立てる@ホストはWindowsで

いろいろ忘れていたのでちゃちゃっと環境構築した際のメモ


## tl;dr

- Vagrant - VirtualBox でCentOSをホストする
- nvmインストールして好きなnodeのバージョン入れる
- yarnはスクリプトでさくっと入れる、使うかはわからない


## 経緯

- ちょっとした事情から Nuxt.js を勉強しようと思った。
- 普段使うマシンがWindowsなのでUnix系をどこかに用意しようと思った。
- dockerで作ると何かでコケたときに中でいじったファイルの復帰がめんどい。
- GCE無料枠あるからvagrantとどちらがよいかなと考えたところ、以下からvagrantを選択
    - インスタンス作る壊すならGCEが楽
    - 容量的にはvagrantの方が余裕がある
    - ローカルファイルの共有はvagrantの方が楽
- しばらく使ってなかったのでとりあえず最新化しよう　←　ここからが記事の内容


## 環境

ターミナルは手抜きです。
そのままvi使うと日本語入力化けますが、その辺気になるならIP公開してtera termとかで。

| | |
| ---- | ---- |
| ホストOS | Windows 7 |
| 仮想化 | VirtualBox 5.2.18 |
| ゲストOS | CentOS7.2 |
| ターミナル | PowerShell 6 |


## 手順

### VirtualBox のインストール

[公式サイト][virtualbox-dl] からダウンロードしてインストールする。
ここは前にインストール済だったものを使用したが、Chocolatey からのインストールがうまく行かなかった気がする。
(うろ覚え)

### vagrant のインストール

Chocolatey から1コマンドでインストール。
ただしインストール後に大体再起動が必要になる。

```powershell
# 新規にインストールする場合はこちらで
PS> choco install vagrant

# すでにインストール済で更新する場合はこちらで(筆者は旧バージョンが入っていたのでアップグレードした)
PS> choco upgrade vagrant
```

### ベースボックスの登録

[Vagrantbox.es][vagrant-es] に大量のベースボックスが登録されているので、お好きなものを登録。
筆者はcent6系をよく使っていたけど最近7系の方が記事多そうなのでそちらを新規登録しました。

```powershell
PS> vagrant box add cent72 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'cent72' (v0) for provider:
    box: Downloading: https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box
    box: Download redirected to host: github-production-release-asset-2e65be.s3.amazonaws.com
    box: Progress: 100% (Rate: 1478k/s, Estimated time remaining: --:--:--)
==> box: Successfully added box 'cent72' (v0) for 'virtualbox'!
```

### ゲストOS設定

ゲスト用のディレクトリ切ってinitでVagrantfileは手動で編集。

```powershell
PS> cd D:\workspace\vagrant
PS> mkdir centos
PS> vagrant init
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

# Vagrantfileいじってから起動
PS> vagrant up
~~~~ 特にエラー出なかったので略 ~~~~
~~~~ GuestAdditionsがバージョン違ったのでアップデート走って一度restartかかった ~~~~

# 以下でログインできる
PS> vagrant ssh
[vagrant@localhost ~]$
```

いじった内容は以下の感じ

- baseボックス名の変更
- IP固定化
- (一応)public IPつけた
- syncフォルダの名称変更
- メモリ指定
- プロビジョニングに `yum update` 追加

```powershell
PS> diff (cat .\Vagrantfile.org) (cat .\Vagrantfile)

InputObject                                                  SideIndicator
-----------                                                  -------------
  config.vm.box = "cent72"                                   =>
  config.vm.network "private_network", ip: "192.168.33.10"   =>
  config.vm.network "public_network"                         =>
  config.vm.synced_folder "../share", "/share"               =>
  config.vm.provider "virtualbox" do |vb|                    =>
    vb.memory = "1024"                                       =>
    vb.name = "nuxt"                                         =>
  end                                                        =>
  config.disksize.size = '50GB'                              =>
  config.vm.provision "shell", inline: <<-SHELL              =>
    yum update -y                                            =>
  SHELL                                                      =>
  config.vm.box = "base"                                     <=
  # config.vm.network "private_network", ip: "192.168.33.10" <=
  # config.vm.network "public_network"                       <=
  # config.vm.synced_folder "../data", "/vagrant_data"       <=
  # config.vm.provider "virtualbox" do |vb|                  <=
  #   vb.memory = "1024"                                     <=
  # end                                                      <=
  # config.vm.provision "shell", inline: <<-SHELL            <=
  #   apt-get update                                         <=
  #   apt-get install -y apache2                             <=
  # SHELL                                                    <=
```

### nvmのインストール

ここから先はゲストOS上で作業。
[nvm + Node.js + npmのインストール][qiita-nvm-node-npm] を参考にさせていただいてインストール。
インストール直後は環境変数が読まれていないので再ログインまたは `.bashrc` の再読込で。

```bash
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash && . .bashrc
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 12819  100 12819    0     0  55695      0 --:--:-- --:--:-- --:--:-- 55978
=> Downloading nvm as script to '/home/vagrant/.nvm'

=> Appending nvm source string to /home/vagrant/.bashrc
=> Appending bash_completion source string to /home/vagrant/.bashrc
=> Close and reopen your terminal to start using nvm or run the following to use it now:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

$ nvm --version
0.33.11
```

### nodeのインストール

LTS使えれば良いのでとりあえずそれでインストール

```bash
$ nvm install --lts && nvm use --lts && nvm list
Installing latest LTS version.
Downloading and installing node v8.12.0...
Downloading https://nodejs.org/dist/v8.12.0/node-v8.12.0-linux-x64.tar.xz...
######################################################################## 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v8.12.0 (npm v6.4.1)
Creating default alias: default -> lts/* (-> v8.12.0)
Now using node v8.12.0 (npm v6.4.1)
->      v8.12.0
default -> lts/* (-> v8.12.0)
node -> stable (-> v8.12.0) (default)
stable -> 8.12 (-> v8.12.0) (default)
iojs -> N/A (default)
lts/* -> lts/carbon (-> v8.12.0)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.14.4 (-> N/A)
lts/carbon -> v8.12.0

$ node --version
v8.12.0
```

### yarnのインストール

npmよりyarnの方が早いというのを以前見かけたので、[githubの記事][curl-install] を参考にインストール。
yarnだと何ができてできなくてはちゃんと把握していないけど、使えるときにさくっと動けばいいかなぐらいの感覚で。
インストール直後は環境変数が読まれていないので再ログインまたは `.bashrc` の再読込で。

```bash
$ curl -o- -L https://yarnpkg.com/install.sh | bash && . .bashrc
~~~~ 出力省略 ~~~~
$ yarn --version
1.10.1
```

## 最後に

環境作るのはすぐできたけどメモ残すのに時間がかかったという。。(´・ω・`)
とりあえずコツコツ Nuxt 勉強していきます。

----

[virtualbox-dl]:https://www.virtualbox.org/wiki/Downloads
[vagrant-es]:https://www.vagrantbox.es/
[qiita-nvm-node-npm]:https://qiita.com/sansaisoba/items/242a8ba95bf70ba179d3
[curl-install]:https://github.com/yarnpkg/yarn/issues/3255