いまさらvagrant入れました

#はじめに
複数人で開発するようになりましたが、毎回環境を構築してうんちゃらかんちゃらするのは大変にアレなので、バーチャルマシン上で環境を複製してみたいと思ったのがきっかけ。
一度入れて結局使ってなかったため、再度インストールからやることにしました。

#そもそもvagrantとは？
Virtual Machineを管理するためのツールのようなもの、という認識でいます。Laravelで言うところのArtisanみたいな。
Virtual MachineはVirtualBox上から管理して、その中のホストの設定やサービス情報の設定などなどを記述しておくことで、環境が変わっても仮想マシンは常に同じものを提供できるとかいったメリットがある...らしい。
やろうと思えば起動時に毎回DBをキレイにしてすべての仮想マシンを同じ状態から開始したりできるようになるんだろう。多分。
この辺はテスト駆動開発あたりで使えそうだなぁと妄想。

#インストール手順
##ローカル環境
Windows10 Pro x64
Core i5-6300U 2.40GHz
メモリ16.0GB

##必要になるもの
+ [Git Bash](https://git-for-windows.github.io/)
+ [VirtualBox](https://www.virtualbox.org/wiki/Downloads)
+ [vagrant](https://www.vagrantup.com/downloads.html)

すべてインストール時の設定はデフォルトで行いました。

##vagrantからboxファイルを登録する
boxファイルってのは仮想マシンのブートメディア的なものです。多分。
任意の場所でGit Bashを立ち上げ、下記のように入力します。

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

任意のバージョン名が返ってきたら無事に第一段階はパスしてます。
続いて下記のように入力。
boxダウンロードには時間がかかりますので(約20分程度)、気長にお待ち下さい。

```bash:bash
$ vagrant box add (登録したい任意のマシン名) (boxファイルURL)
```

[boxファイルダウンロード先](http://www.vagrantbox.es/)

例：CentOS7を登録する場合

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

##Vagrantfileを作成する
Vagrantfileが実際の設定(ホスト名や仮想マシンのIPアドレスなど)を記述する場所になるらしい。
Vagrantfileはbashが開いているカレントディレクトリに作成されるようです。

```bash:bash
$ vagrant init (登録した任意のマシン名)
```

このコマンド一発でVagrantfileの雛形が生成される。
あとはvimかテキストエディタかなんかで設定を書き換えてあげる。
が、個人的にドメイン名打ち込んだらページが表示されるようにしたいため、もう一手間かけました。


###~~hostnameを設定する(不要な場合スキップ)~~
~~どーもvagrant標準の設定ではhostnameを設定できないみたい。なのでプラグインで対応します。~~

```bash:bash
# $ vagrant plugin install vagrant-hostsupdater
# $ vagrant plugin list #インストール状態確認用
```

~~これで下準備終了。~~
2017/04/24追記：他環境でうまく行かなかったのでhostnameの設定は行わないこととしました。

##Vagrantfileを書き換える
では早速Vagrantfileを書き換えて行こうと思う。
 
```bash:bash
$ vim Vagrantfile
```

```bash:Vagrantfile
# 仮想マシンのIPアドレス。基本的にはコメントを外すだけでOK。
config.vm.network "private_network", ip: "192.168.33.10"

# 2017/04/24追記：どーもローカルのhostsを書き換えているらしく、うまくいかない環境があったのでコメントアウトしました。
# hostnameを有効にする場合はこっちを記述。
# config.vm.hostname = "(任意のホスト名)"
# config.vm.network :"private_network", ip: "192.168.33.10"

# GUIで起動する場合はコメントを外す。
config.vm.provider "virtualbox" do |vb|
  # Display the VirtualBox GUI when booting the machine
  vb.gui = true
end
```

##仮想マシンを立ち上げる
ではいよいよマシンを立ち上げていきます。

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

はい。これで仮想マシン上がりました。
以降は仮想マシン上で設定をして、テストページを表示させるところまでやっていきたいと思います。なにせ立ち上げてすぐは空っぽですからね！仮想マシン！

```bash:VirtualMachine
$ sudo su -
$ yum install -y httpd     #Apacheサービスをインストールする
$ systemctl start httpd
$ systemctl status httpd   #念のため起動確認
$ systemctl stop firewalld #ローカルなのでファイアウォールを止める

$ cd /var/www/             #ドキュメントルートに移動して
$ chmod 777 html           #パーミッションを変更
$ cd html
$ vi index.html            #サンプルページを作成
```

んでローカルマシンからhttp://(任意のIPアドレス or ホスト名)にアクセスすると、サンプルページが表示されていることと思います。
ふぅ、これで一段落。あとはsshでつなげるようにしたり、ローカルのリポジトリを仮想マシンから見に行くようにしたり、起動時にサービスを自動で上げるようにしたり、色々設定をアレしないと行けないんだろうな...やること山積み。

#所感
基本的にローカルマシンで環境を統一するためにvagrantを入れるような認識でいいんですよね。
例えばその時、ソースコードはどっち側で管理するんだろう...ローカルホスト？仮想マシン？
まだまだ仮想マシンの実運用イメージが湧かないなぁ...うむむ。

#参考
+ [Vagrantのインストール、設定手順](http://qiita.com/Esfahan/items/41c4469f28f6011ab33b)
+ [Vagrant の設定（主にネットワーク）あれこれ](http://qiita.com/murachi1208/items/00c3c2fe51763a6535f8)
+ [VirtualBox Vagrant でローカル開発web環境の共通化](http://qiita.com/yasshcy/items/8079c0cf4a96e461863b)