Vagrant を使ってみる


[Vagrant](http://www.vagrantup.com/) は、[VirtualBox](https://www.virtualbox.org/) などの仮想マシン上でPHPの開発環境を動かすツールらしいと聞き、少しだけ触ってみました。これが便利すぎて、もうMAMPやXAMPPは要らない！ということで、期待が高まります。

今回やってみた環境は Mac OSX 10.8.5 と VirtualBox を使いました。しかし、概ねどんな環境向けにも使えるようにバリエーションが提供されていますので、Windows の方でも Ubuntu の方でもほとんど同じ手続きで使えるみたいです。

今回は、ツールをセットアップして、立ち上げるところまでをやってみようと思います。こちらの記事を参考に、追っかけさせていただきます。

- [VagrantでローカルにPHP開発環境を構築してみた | webOpixel](http://www.webopixel.net/develop/835.html)



# VirtualBox をインストール

[VirtualBoxのサイト](https://www.virtualbox.org/)からインストーラーをダウンロードして実行します。
VirtualBox はこの記事の執筆時点で私のコンピューター上にインストールされていたので、そのバージョンを使いました。若干古くて 4.2.12。

# Vagrant をインストール

[Vagrantのサイト](http://www.vagrantup.com/)からインストーラーをダウンロードして実行します。
このときダウンロードしたのは `Vagrant-1.4.3.dmg` です。

このファイルをダブルクリックで実行すると、マウントされたディスクイメージの中に `Vagrant.pkg` というファイルができるので、これを実行します。そうすると、インストーラーが起動されて、後は言われるままに進めていけばOKです。

インストールが完了したら、ターミナルから `vagrant` というコマンドが使えるようになりました。次のコマンドでバージョン番号を調べて、ちゃんと `Vagrant 1.4.3` と返ってくれば成功です。

```bash:command
$ vagrant -v
```

```bash:output
Vagrant 1.4.3
```

# 素のままの仮想マシンを立ち上げる

Vagrantの仮想マシンは、いろんな構成で設定されたものがたくさん配布されていて、それを使ったほうが早いと教えてもらいました。が、一旦基本的な操作を理解しといた方がよいと思うので、素の状態の仮想マシンを動かす手順をやってみます。

## Boxファイルをインストール

Vagrant のインストールができたら、VagrantにBoxファイルを入れていきます。[Vagrantbox.es](http://www.vagrantbox.es/) でたくさん配布されているので、欲しい環境のボックスを選んで入れます。

インストール直後の状態では、Boxは何もインストールされていません。この状態でBoxの一覧を表示しようとすると、なんにもないよ！と返ってきます。

```bash:command
$ vagrant box list
```

```bash:output
There are no installed boxes! Use `vagrant box add` to add some.
```


入れ方は下記のルール。コマンドラインから行います。

```bash:command
$ vagrant box add {title} {url}
```

BoxはVagrantに複数追加することができるのでしょう。起動するときに `{title}` を指定して起動するようです。参考にした記事の方は `base` としています。しかし、起動のコマンドに `base` と指定していないので、デフォルトのBoxにつける名前なのかも知れません。今回はそのまま倣わせていただきました。

```bash:command
$ vagrant box add base http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130731.box
```

実行すると、ダウンロードが始まります。どのBoxもそれなりに容量があるので、それなりの時間がかかります。しばらく待ちます。

```bash:output
Downloading box from URL: http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130731.box
Extracting box...te: 35233/s, Estimated time remaining: 0:00:01)
Successfully added box 'base' with provider 'virtualbox'!
```

通信環境もよくなかったのでだいぶ待ちましたが、無事インストール成功です。
それからもう一度一覧を表示すると、先ほどインストールした base が表示されるはずです。

```bash:command
$ vagrant box list
```

```bash:output
base (virtualbox)
```


## 試しに立ち上げてみる

参考サイトの方がそうしているので、倣います。
適当なディレクトリを作成し、その中で `vagrant init` コマンドを実行します。

```bash:command
$ mkdir ./vagrantTest/
$ cd ./vagrantTest/
$ vagrant init base
```

最後の `base` の部分は、前の手順でインストールした Box の名前です。別の名前でインストールした Box を使う場合は、この部分を変更してください。 `base` という名前は省略できるみたいです。
成功すると、次のように表示されます。

```bash:output
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` というファイルが作成されているはずです。
この Vagrantfile は、Vagrantの構成を決める設定ファイルのようなもののようです。

このままだと素の状態ですが、一応立ち上げたり、再起動したり、落としたり、削除したりすることができるので、そのコマンドを練習してみましょう。

```bash:起動する
$ vagrant up
```

```bash:再起動する
$ vagrant reload
```

```bash:SSH接続する
$ vagrant ssh
```

```bash:停止する
$ vagrant halt
```

一度 `vagrant up` して起動すると、`.vagrant` というディレクトリが作られて、その中にいくつかファイルが作られます。あと、VirtualBox の管理画面に新しい仮想マシンが追加されていることが確認できるはずです。
仮想マシンなので、それなりのディスク容量を使っているかも知れません。次のコマンドを使うと、これら仮想マシンのファイルを削除することができます。

```bash:削除する
$ vagrant destroy
```

# アリモノの Vagrantfile から仮想マシンを動かす

さきほどの手順 `vagrant init` で作成された `Vagrantfile` に、いろいろ設定やスクリプトを書いて仮想サーバーのコンディションを編集していく、というのが。

が、いきなりこれを覚えようと思うと大変なので、すでに誰かが作ったアリモノの Vagrantfile を探してくることにします。

- [PHPの開発に使えるVagrantfileのまとめ](http://www.engineyard.co.jp/blog/2013/vagrantfile-for-php/)

ここでは、こちらの記事にまとまっている中から、なるべくシンプルそうなやつを1つ選んで動かしてみたいと思います。

- [MiniCodeMonkey/Vagrant-LAMP-Stack](https://github.com/MiniCodeMonkey/Vagrant-LAMP-Stack)

README.md の指示に従って進めてみます。インストールは `git clone` で行うそうです。

```bash:command
$ git clone git@github.com:MiniCodeMonkey/Vagrant-LAMP-Stack.git
```

`Vagrant-LAMP-Stack` というディレクトリの中に、リポジトリ内のファイルがたくさん落ちてくるので、この中に入って Vagrant を起動します。

```bash:command
$ cd Vagrant-LAMP-Stack
$ vagrant up
```

```bash:output
Bringing machine 'projectname' up with 'virtualbox' provider...
[projectname] Box 'precise32' was not found. Fetching box from specified URL for
the provider 'virtualbox'. Note that if the URL does not have
a box for this provider, you should interrupt Vagrant now and add
the box yourself. Otherwise Vagrant will attempt to download the
full box prior to discovering this error.
Downloading box from URL: http://files.vagrantup.com/precise32.box
Extracting box...te: 179k/s, Estimated time remaining: 0:00:02))
Successfully added box 'precise32' with provider 'virtualbox'!
There are errors in the configuration of this machine. Please fix
the following errors and try again:

vm:
* The 'hostmanager' provisioner could not be found.

Vagrant:
* Unknown configuration section 'berkshelf'.
* Unknown configuration section 'hostmanager'.


```

あ、エラー...。

まったく同じエラーが出た人発見。

https://github.com/MiniCodeMonkey/Vagrant-Laravel-Stack/issues/3

エラーになっている3つをインストールすればいいらしいのでやってみます。

```bash:command
$ sudo gem install berkshelf
$ vagrant plugin install vagrant-berkshelf
$ vagrant plugin install vagrant-hostmanager
```

これらをインストールしたところでもう1回リトライ。

```bash:command
$ vagrant up
```

私の環境では `stdin: is not a tty` など、一部エラーぽいメッセージが出たりしていて気になりますが、今度は一応進んでいる模様です。いろんなライブラリなどをダウンロードしてきて、自動的にどんどん進んでいきます。かなり時間がかかってます。時間がかかりすぎて居眠りしたりしてしまったので、実際どれくらい待ったかわかりませんが(汗)、いつの間にか立ち上がっていてました。

ステータスを確認してみます。

```bash:command
$ vagrant status
```
```bash:output
Current machine states:

projectname               running (virtualbox)

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.
```

projectname となっているのは、Vagrantfile に `project_name = "projectname"` と書かれているからだと思います。

同じく Vagrantfile に `ip_address = "172.22.22.22"` という記述があります。仮想マシンが、このIPアドレスで立ち上がる、ということでしょうか。

ブラウザで `http://172.22.22.22/` にアクセスしてみると、次のような画面が表示されます。

![スクリーンショット](https://qiita-image-store.s3.amazonaws.com/0/28914/a66ea644-8ef5-0792-e5a2-efd48f3ac1f4.png "スクリーンショット")

動いてますね！




# まとめ

Vagrantのインストールから、適当な仮想マシンをインストールして立ち上げるところまでをやってみました。

最初は時間がかかったり、躓くこともあるのかなと思いますが、慣れれば確かにいろんな構成のサーバー環境をコマンド一発で作り出すこともできそうです。開発したシステムをテストするのに、いろんな環境で動かしてみないと行けない場合などは、いちいち複数のOSレベルから環境を用意するのは大変ですが、これなら手軽にエミュレートすることができそうです。

今回は Mac上で動かしてみただけですが、Windowsの人でも同じ手順でできるのであれば、人に説明するのもだいぶラクチンになりそうです。XAMPPやMAMPが要らない！というのも確かに、と思いました。

しかし、仮想マシンをまるまる作ることになるので当然なんですが、ディスク容量を結構くいそうだなぁ、という心配が...。私のPCは、もうディスクの空き容量が数ギガバイトしか残ってない逼迫した状態なので、あんまり多用はできないなと思いました。

やっぱり、MAMPにも、まだ当面はお世話になることになりそうです。


※この記事はこちらにアーカイブしました。→ http://www.pxt.jp/ja/diary/article/289/