VagrantでMacに仮想環境構築

# vagrantについて
詳細は[公式ページ](http://www.vagrantup.com/ "vagrant")を見てください。

# 必要なもの
+ vagrant
+ virtualbox


# vagrantのインストール
てっとり早くdmgファイルをダウンロードしてきちゃいます。
http://www.vagrantup.com/downloads.html

```bash
$ which vagrant
/usr/bin/vagrant

$ vagrant -v
Vagrant 1.4.3
```
こんな感じで出てくることを確認しておきます。


# virtualboxのインストール
こちらもてっとり早くdmgファイルをダウンロードしちゃいます。
https://www.virtualbox.org/wiki/Downloads


# 仮想環境構築
+ vagrant用ディレクトリ作成
+ vagrant init
+ Vagrantfile編集
+ 起動


##vagrant用ディレクトリ作成
今回はテストなので/tmp下に作成します。

```bash
$ cd /tmp
$ mkdir vagrant-test
$ cd vagrant-test
```

##vagrant init
初期化を行います。

```bash
$ 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がこのディレクトリに置かれたよ、"vagrant up"で仮想環境を作れるよ！」的なことを言っています。
念のためVagrantfileがあるか確認しておきます。

```bash
$ ls
Vagrantfile
```

##Vagrantfile編集
Vagrantfileの主な設定項目は以下になります。

+ 使用するbox
+ boxのURL
+ ホスト・仮想環境間でやりとりするネットワーク
+ ホストと仮想環境における同期フォルダ
+ 仮想環境のメモリやCPU数

などなどです！
それでは、実際にVagrantfileを編集します。
init直後はいっぱいコメントが書いてありますが、
今回設定した内容は以下です。

```text:Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|

  config.vm.box = "precise64"
  config.vm.box_url = "http://files.vagrantup.com/precise64.box"

  config.vm.network :forwarded_port, guest: 22, host:2222, id: "ssh"

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  config.vm.network :private_network, ip: "192.168.33.10"                     
  # Shared folders
  config.vm.synced_folder "../vagrant-test", "/vagrant-test"

  # VM option
  config.vm.provider "virtualbox" do |v|
    v.customize ["modifyvm", :id, "--memory","1028"]
    v.customize ["modifyvm", :id, "--cpus","1"]
    v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
  end

end
```

使用するboxの指定については、

```bash
$ vagrant box add boxの名称 boxのURL
```
と実行し、

```text:Vagrantfile
config.vm.box = "boxの名称"
```
のみの指定とすることもできます。
今回はubuntuですが、centOSバージョンを後日載せます。


##起動
```bash
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'precise64'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Running 'pre-boot' VM customizations...
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
[default] Machine booted and ready!
・・・・
```
vagrant up の実行結果はちょっと長いので割愛します。
↑は途中までとなっています。


# 仮想環境に入ってみる
仮想環境に入るには"vagrant ssh"というコマンドをたたきます。

```bash
$ vagrant ssh
vagrant@precise64:/vagrant-test$
```

無事入ることができました。
Vagrantfileの設定でフォルダを同期したので、
実際に同期されているか確認してみます。

```bash
$ ls / | grep vagrant
vagrant
vagrant-test
```

仮想環境にもvagrant-testというフォルダができていることが確認できます。
ディレクトリの中身はというと、

```bash
$ ls /vagrant-test
Vagrantfile
```

となっています。


# 仮想環境停止
vagrant upで起動させて環境を停止させます。

```bash
$ vagrant halt
```
"vagrant destroy"というコマンドがありますが、
こちらは環境を破棄してしまうので注意が必要です。


# おわり
今回は仮想環境の構築、接続をメインにしたのでこれで以上となります。
実際のプロジェクトでは、webサーバーやDBなど色々なものを使用すると思います。
今回使用したvagrantとansibleなどを組み合わせると、
簡単かつメンバー全員が同じ環境を構築でき、開発を進めることができます。

ansibleと組み合わせての環境構築に関しては、後日記事を書こうと思います。
以上、最後まで読んでくださった方に感謝致します。

記事に誤り等ありましたらご指摘下さい。