Node.js入門 〜開発環境〜


### はじめに

---

　こないだ、色々な本と一緒に[Amazon.co.jp： JS+Node.jsによるWebクローラー/ネットエージェント開発テクニック: クジラ飛行机: 本](http://www.amazon.co.jp/JS-Node-js%E3%81%AB%E3%82%88%E3%82%8BWeb%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC-%E3%83%8D%E3%83%83%E3%83%88%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E9%96%8B%E7%99%BA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-%E3%82%AF%E3%82%B8%E3%83%A9%E9%A3%9B%E8%A1%8C%E6%9C%BA/dp/4883379930)っていう本を買ってもらったから、6月ごろに作った仮想マシンの起動方法とか忘れないようにメモしとく。
　
　一応、各種インストール方法とかも触れるけど、基本的に自分がし終わったことはあんまり覚えてないから足りてないのだけ詳しくインストール方法書く。だから対象は、「MEANスタックで開発したいから、開発環境整えたいな〜とか、昔仮想マシン作ったけど起動方法とかあんま覚えてないな〜」って人向けなのかな？？
　
　この本にも開発環境の構築については書いてあるけど、自分が参考にしたのはドットインストールの「ローカル開発環境の構築」ってやつ。だからディレクトリ名とかもそれに準じてる。

### 仮想マシンの作成

---

　ここでは、VirtualBox上にCentOSのインストールされた仮想マシンを作成します。

#### VirtualBoxとVagrantのインストール

　Vagrantってのは、CentOSがインストールされたマシンイメージをコマンド一発でダウンロードできるツールって本書には書いてある。とりあえずインストール！
　どっちも名前で検索したら公式HPが出るからそっから探してインストーラーに従ってインストール。終わり。

#### 仮想マシンの追加

仮想マシンを追加したいディレクトリに移動して、vagrant initで、Vagrantfileが自動で作成される。

```zsh
cd Documents/MyVagrant
vagrant init
```

　そしたら、Vagrantfileの一部分をいじります。

```vi:Vagrantfile
# config.vm.box = "base"
config.vm.box = "chef/centos-6.5"
```

　初期状態では、1行目のように書いてあるので、#で1行全部コメントアウトして、2行目の内容をコピペしてもらうか、"base"って書いてあるところを"chef/centos-6.5"って書き換えるか2通りの方法があるので好きな方を選んでください。
　このようにすることで、Vagrant Cloudから自動で仮想マシンファイル(Boxファイル)をダウンロードできるようになります。

#### 仮想マシンの起動

 これで仮想マシンが作成できたので、次は起動します。

```zsh
vagrant up
```

　これで、仮想マシンが起動します。初めて起動した時のみ、先ほどVagrantfileをいじって、自動でBoxファイルをダウンロードするようにしたので、時間がかかります。

#### 仮想マシンの操作

　仮想マシンを起動するときには、以下のコマンドを実行します。

```zsh
vagrant up
```

　他にも、終了など色々なコマンドがあります。一部を紹介しておきます。困ったときにはヘルプを見るようにしてください。

```zsh
vagrant up # 仮想マシンを起動する。
vagrant halt # 仮想マシンを停止。
vagrant suspend # 仮想マシンをスリープさせる。
vagrant resume # 仮想マシンをスリープから復帰させる。
vagrant reload # 仮想マシンの再起動。
vagrant status # 仮想マシンの状態を確認。
vagrant destroy # 仮想マシンを破棄。
vagrant ssh # 仮想マシンへログインする。
vagrant --help # ヘルプの表示。
```

#### 仮想マシンにログインする

　先ほどの一覧にもあったvagrant sshコマンドを実行して、仮想マシンにログインします。

### node.jsのインストール

---

　nvmっていうツールを使ってNode.jsの任意のバージョンをインストールする。

```bash
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.25.3/install.sh | bash
```

　成功したら、再起動するように言われるので、仮想マシンからログアウトして、再起動。

```bash
exit # これでログアウトできる。

vagrant ssh # 再ログイン
```

　そしたら、本書推奨のNode.jsの0.12.4をインストールする。

```bash
nvm --version # nvmが入ってるか確認出来る。
nvm install v0.12.4 # インストール
nvm alias default v0.12.4 # デフォルトのエイリアスを設定
node -v # Node.jsのバージョンを確認できる。
```

　これで、Node.jsのインストールは完了です。ただ、nvmを利用してインストールすると、sudoコマンドを使用した際に、npmやnodeコマンドが使用できなくなります。そこで、sudoコマンド実行時のパスを普段のユーザーパスと同じにします。

```bash
sudo visudo
```

　たくさんの設定項目が出てきますが、直すのは3点です。

```
# 1つ目
Defaults env_reset
↓
Defaults !env_reset # !を追加します。

# 2つ目
# Defaults env_keep += "HOME"
↓
Defaults env_keep += "HOME" # #を削除します。

#3つ目
Defaults secure_path = /sbin:/bin/usr/sbin:/usr/bin
↓
# Defaults secure_path = /sbin:/bin/usr/sbin:/usr/bin  # #を追加します。
```

### gitのインストール

---

　gitもインストールしておきます。

```bash
sudo yum install git
```

### 仮想マシンのWebサーバーを利用できるようにする(09/17更新)

---

　仮想マシンでWebサーバーを作成しても、ホストマシン(Macなど使っているPC)からは、仮想マシンのWebサーバーにアクセスすることはできません。なので、Vagrantfileに以下の設定を~~加えます。~~すでに書いてあって、コメントアウトしてあるので、コメントを消すだけで大丈夫です。

```vi:Vagrantfile
  config.vm.network "forwarded_port", guest: 80, host:8080
  config.vm.network "private_network", ip: "192.168.33.10"
```

　ファイル末のendの上に書きましょう。
　これらの設定を行うことで、仮想マシンのWebサーバーのポート80が、ホストマシンのポート8080に割り当てられ、仮想マシンのIPアドレスが、192.168.33.10に割り当てられる。

### おわりに

---

　実は、mountエラーとかで、色々参考にしたんだけど上手くいかなかったです。なので、前作ってたのを消してから入れなおしました。
　次も環境構築2ってことで、npmでのNodeのモジュールの入れ方やエディタとして、Atomを紹介できればなって思っています。


### 参考

---

- [Vagrant 立ち上げると mount エラー が表示されちゃったときの解決方法（new - Qiita](http://qiita.com/murachi1208/items/1dea1416ec5729d03632)
- [メモ：CentOS7にNode.jsをNVMでインストール - Qiita](http://qiita.com/ystg/items/0c79d0d5e998e5861be2)
- [Vagrant | synced\_folder でホストOSとゲストOSの任意のフォルダを同期する - Qiita](http://qiita.com/tbpgr/items/67125ea883409ae5fd51)
- [VagrantでCentOS7の仮想マシンを作成する。 - nyasu\_h](http://nyasu1111.hateblo.jp/entry/2015/02/11/034103)
- [Vagrant で VirtualBoxの Guest Additionsをインストールし直す際のメモ - tanacasinoのメモ](http://tanacasino.hatenablog.com/entry/2014/08/15/111014)