Vagrantを、恐る恐る動かしながらくどくどと説明してみた（まずはVirtualBoxを使って設置）

# はじめに

動機を３行で記述すると

- 開発、検証作業などでいろいろやりたいお。
- でも仮装の構築、変更は骨が折れるお。
- だからVagrantでやるお！

## Vagrant 自体は知っていた

昨年（２０１５年）に参加した勉強会で「VagrantとDockerがどうこう」という話を聞きましたが、その時は「VagrantのBoxが、誰が作ったかわからないので怖い」という印象を持っていました。

## 環境構築には時間が掛かる。

この前受講したブートキャンプでも「環境構築」でつまずきました（本題とはあまり関係ないところで）
railsのgemの不一致などが原因でしたが、特定に時間が掛かりました。

※講師曰く、「ベイグラントに環境を用意して〜」　やっぱり必要だ。


## 私の環境
- ホストOSは Mac OS 10 (El Capitan) 　
- MacBook Pro (Late 2013) Core i5 メモリは8GB
- Virtualbox5.0 インストール済み


ホストOSはMacOS Xです（ありがち。Linux系OSでも、それほど違わないとは思いますが・・・）

重要なのは、ゲストOSを構築、起動させるためのアプリがVirtualBoxだってこと。
バージョンまではそこまで厳密には問われない・・・と思う。

# Vagrantをインストール

Vagrantの公式ダウンロードページによると
https://www.vagrantup.com/downloads.html

- MacOSX
- WINDOWS
- DEBIAN
- CentOS

などが存在しますが、ここはMacOS X を選択してダウンロード
（各自環境に合わせて使ってください）

# VMを設置する

Vagrantの場合、VirtualBoxとインストール方法が大きく異なります。

- VirtualBox単品：VirtualBox側で新規仮想マシンを作成、設定してISOイメージをマウントしたりしてインストール
- Vagrantを使う：Box（仮想OSや設定が入ったもの）を元に仮想サーバファイルを作成する。


## 作業用のディレクトリを作成する。


Vagrantの設定ファイルなどを置く場所を作ります（仮想マシンのデータが入ったファイルとは別物です）
仮にユーザディレクトリの myvm/test_vm に設置する場合

```bash:terminal
$ cd /Users/rojiuratech/
$ mkdir myvm/test_vm/
```

とでもして用意してください

## box（仮想イメージのようなもの）を選択し、Vagrantfileを生成する

参考元によると、公式(hashicorp)が運営しているVagant Cloud を使う方が良いみたい。（こっちの方が安全そう）

centos6.x系を使いたかったので（2015年末時点で、Webサーバの環境に多い）
絞り込みを実施

https://atlas.hashicorp.com/boxes/search?utf8=✓&sort=&provider=&q=centos

bento/centos6.7　を選ぶことに

https://atlas.hashicorp.com/bento/boxes/centos-6.7

vmware、parallels、virtualbox向けのboxがそれぞれ用意されていているので、
virtualbox向けの設定コマンドをターミナルで入力し実行。


```bash:terminal
$ vagrant init --minimal bento/centos-6.7; vagrant up --provider virtual box
```

- 仮想環境が見つからなかったのでatlasにダウンロードしに行きました
- SSHを設定しました
- マウントします

みたいなメッセージが流れます。

## Vagrantfile を確認する

作業ディレクトリに、Vagrantfile が生成されます。
インストール時に　minimal　と指定したので、本当に最小限の記述しかありません

```bash:terminal
$ cat Vagrantfile 
Vagrant.configure(2) do |config|
  config.vm.box = "bento/centos-6.7"
end
```

記述形式がRubyなのはVagrantの仕様です。
boxは　bento/centos-6.7 を使います。　的な記述があるだけです。

なお、インストールされている　vagrant box の一覧は

```bash:terminal
$ vagrant box list
bento/centos-6.7 (virtualbox, 2.2.2)
```
と言った感じで、確認可能です。

# とりあえず、動かしてみる

2016年1月に加筆修正
VirtualBox マネージャーを表示してみてください
va_hallo_default_（以下略）と言った感じの作成したディレクトリ名を含む、新しい仮装マシーンが生成されているはずです。


## Vagrantで起動する


Vagrantfileが存在するディレクトリで

```bash:terminal
$ vagrant up

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'bento/centos-6.7' is up to date...
==> default: VirtualBox VM is already running.
```

※最初にVagrantfileを生成した時には、もう動いていた（私の環境固有だったのかもしれませんが・・・）

## vagrantで終了する

```bash:terminal
$ vagrant halt

==> default: Attempting graceful shutdown of VM...
```

シャットダウン成功


## 仮装マシーンの設定、状況に関して


このケースでは特に設定をしていないので、マシンスペックなどは適当ですが・・・動作自体はvirtualBox単品で仮装マシーンを作った時と同じような感じです。

# カスタマイズしてみる

Vagrantの醍醐味？の環境カスタマイズを試してみることにしました。

```ruby:Vagrantfile
Vagrant.configure(2) do |config|
  config.vm.box = "bento/centos-6.7"
  config.vm.provider "virtualbox" do |v|
    v.name = "Hello Vagrant"
    v.cpus = 2
    v.memory = 1024
    v.customize ["modifyvm", :id, "--vram","16"]
  end
end
```

注目
 v.customize ["modifyvm", :id, "--vram","16"]

modifyvm で　設定 id 設定するもの　値
というのが基本みたい。

# 参考
VagrantとDockerについて名前しか知らなかったので試した

http://qiita.com/hidekuro/items/fc12344d36d996198e96

まさに上記リンク先の想定読者で、こうなるとカッコいいなぁ像になりたい。
メリットも、上記リンク先の各種ソフトウェアの概要がしっくりするような。

仮想OSをカスタマイズする
http://qiita.com/darwin/items/8d6b34945407fa5dd26f

自前で生成したboxに設定を記述する・・・と言った趣旨ですが、virtualbox上でVagrantの設定をカスタマイズする方法が簡潔に記載されています。

http://qiita.com/ftakao2007/items/0ec05c2ef3c14cdbea11

vagrantのネットワークについて
http://labs.septeni.co.jp/entry/20140707/1404670069

VirtualBox でも、設定がわかりにくい・・・のがこのネットワークですが

[Vagrant & VirtualBox] Vagrant: 同じLAN内の端末から仮想マシンにアクセスする

http://www.d-wood.com/blog/2014/06/13_6344.html

社内LANの他のマシンから接続させたい