WindowsでVagrantを導入、バックアップ、復元のまとめ

# WindowsでVagrantを導入のまとめ
## Vagrantについて
> VagantはVirtualBoxのフロントエンドとして使用することができるruby製のツールで、コマンドラインから仮想OSを管理できます。

つまり、VirtualBoxを管理できるツールということ

## 導入メリット
- チーム間でテスト環境を同一で統一出来る
- チーム間でテスト環境を準備する時間が省ける  
※個人で使用するのも含め、これが一番大きいかもしれない
- スナップショットでその時点のバックアップを取れたりするのですぐに開発環境を戻せたりなどの恩恵が受けられる  
※VirtualBoxの機能
- macでもwindowsでも開発環境の違いが関係なくなる
- railsとか動作が環境依存するようなアプリケーションが本番と同じ設定で動作する

## 導入手順
- [VirtualBox](https://www.virtualbox.org/)の左の[Downloads](https://www.virtualbox.org/wiki/Downloads)から「VirtualBox x.x.xx for Windows hosts」をダウンロードして、インストール
- [Vagrant](https://www.vagrantup.com/)の[Download](https://www.vagrantup.com/downloads.html)から「WINDOWSUniversal (32 and 64-bit)」をダウンロードしてインストール
- コマンドプロンプトで下記のコマンドを打ち、バージョンが帰ってきたらインストール成功

```text
vagrant -v
```
- [vagrantbox](http://www.vagrantbox.es/)からCentOSのboxのURLをコピーする  
※CentOSの中でも一番上にある「CentOS 7.0 x64 (Minimal, VirtualBox Guest Additions 4.3.28, Puppet 3.8.1)」を選んだ  
※PuppetはChefやAnsibleのようなシステム自動構築ツールでPuppetを使わずChefやAnsibleを使ってもいい
- 下記のコマンドでboxを追加する  
※コマンドの解説：`vagrant box add タイトル URL`

```text
vagrant box add centos https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box
```

- boxの設定ファイルを作る  
※コマンドの解説：`vagrant init box名`  
※設定ファイルを修正することでIPなどの設定を変更できる  
※Vagrantfile（設定ファイル）から起動するので「Vagrant\centos\Vagrantfile」のようにフォルダを分けた方が良いかもしれない

```text
vagrant init centos
```

- boxを起動する  
※vagrant initしたカレントディレクトリで実施  
※毎回コマンドを打って起動するのも大変なのでバッチファイルでも作っておく

```text
vagrant up
```

- tera termでssh起動  
※sshのIPとportはvagrant upした際に表示される。ちなみにrootのパスワードもvagrant  
※VirtualBoxを起動するとcentosが実行されているのが分かる  
※毎回ログインするのも面倒なのでteratermのログインマクロでも作っておく

```text
ホスト：127.0.0.1
ポート：2222
ユーザ名：vagrant
パスワード：vagrant
```

## boxのバックアップと復元（box自体をエクスポートして削除してインポートするまで）

壊したり、復元したりすると思うのでbox自体をエクスポート、削除、インポートする手順

- 下記コマンドでboxを停止  
※停止したいboxのVagrantfileのカレントディレクトリに移動して実行

```text
vagrant halt
```
- 下記コマンドでboxファイルをエクスポート

```text
vagrant package
```
- 下記コマンドでboxを削除  
※削除したいboxのVagrantfileのカレントディレクトリに移動して実行

```text
vagrant destroy
```

- 下記コマンドでbox一覧から削除  
※カレントディレクトリ内にあるVagrantfile、.vagrantを削除しても最終データがきちんとインポート出来た

```text
vagrant box remove centos
```

- 下記コマンドでboxをインポート  
※コマンド解説：`vagrant box add 新規作成ボックス名 バックアップファイル`

```text
vagrant box add centos package.box
```

- boxの設定ファイルを作る

```text
vagrant init centos
```

- boxを起動する

```text
vagrant up
```

## boxのスナップショット（vagrant1.8から）
※vagrant destroyしてしまうとスナップショットも失われてしまうので注意すること（Vagrantfileファイル、.vagrantフォルダを残していたとしても）

- 下記コマンドでboxを停止

```text
vagrant halt
```

- 下記コマンドでスナップショットを取る

```text
vagrant snapshot save 20160702_1156
```

- 下記のコマンドでスナップショットが取れているかを確認

```text
vagrant snapshot list
```

- 下記のコマンドでスナップショットを復元

```text
vagrant snapshot restore 20160702_1156
```

- 下記のコマンドでスナップショットを削除

```text
vagrant snapshot delete 20160702_1156
```

## よく使うコマンド
- `vagrant box remove box名`  
※vagrantのbox一覧からboxを削除
- `vagrant box list`  
※追加されたvagrantのbox一覧
- `vagrant status`  
※実行しているbox一覧
- `vagrant up`  
※VirtualBoxに登録して、Vagrantfileからboxを起動する
- `vagrant halt`  
※VirtualBoxのboxを電源停止
- `vagrant destroy`  
※VirtualBoxからboxを削除


## 参考
- [今日からすぐできる！VagrantとVirtualBoxを使ってローカル開発環境を構築する方法【初心者向け】](http://techacademy.jp/magazine/6304)
- [Windows上にVirtualBox+VagrantでCentOS環境構築](http://qiita.com/TakashiOshikawa/items/d2fb48d59e9e316af9a2)  
※コマンドなど  
※IPの変更方法など
- [現在のシステム自動構築ツールのシェア](https://www.google.co.jp/trends/explore#q=%2Fm%2F05zxlz3%2C%20%2Fm%2F0k0vzjb%2C%20%2Fm%2F03d3cjz&cmpt=q&tz=Etc%2FGMT-9)
- [Vagrantって流行ってるらしいけど何が便利なの？](http://dev.classmethod.jp/server-side/virtual-box-vagrant/)  
※メリットなど
- [VagrantのSnapshot機能で仮想マシンの状態を保存/復元しよう](http://weblabo.oscasierra.net/vagrant-snapshot/)  
※スナップショット