WindowsでLaravel 5.4のHomestead仮想マシンを準備する


完成イメージ
![003.png](https://qiita-image-store.s3.amazonaws.com/0/27816/f66dbece-3334-7553-73fc-6bfea66f544c.png)

# 要望
- XAMPPなどを使わず、VagrantのHomestead仮想マシン上でLaravelを動作させたい。
- Dropbox内のLaravelのフォルダをVagrantの共有フォルダとしたい。  
  (`C:\Users\%USERNAME%\Dropbox\server\laravel`をVagrantの`/home/vagrant/Code`と関連付ける)
- VagrantのフォルダもDropbox内に作って、設定を他のPCと共有したい。


# 環境
- Windows 10
- Laravel 5.4
- Homestead (Vagrant Box) 2.1.0
- Homestead (GitHub) 5.3.2
- VirtualBox 5.1.22
- Vagrant 1.9.5


# インストール
- Laravel: https://laravel.com/docs/5.4/installation  
  今回は`C:\Users\%USERNAME%\Dropbox\server\laravel\blog`にインストールします。
- VirtualBox: https://www.virtualbox.org/wiki/Downloads
- Vagrant: https://www.vagrantup.com/downloads.html

Vagrantのインストール後、PCの再起動が必要になります。


# Vagrant Boxの追加
PowerShellで`vagrant box add laravel/homestead`を実行します。
下記のように実行環境の選択を促されたら「2」を入力します。

```txt:PowerShell
> vagrant box add laravel/homestead
==> box: Loading metadata for box 'laravel/homestead'
    box: URL: https://atlas.hashicorp.com/laravel/homestead
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) parallels
2) virtualbox
3) vmware_desktop

Enter your choice: 2
```

Boxが追加されたことを確認します。

```txt:PowerShell
> vagrant box list
laravel/homestead (virtualbox, 2.1.0)
```


# 仮想マシン作成前の準備
## Homesteadの設定ファイルをGitHubからクローンする
今回は`C:\Users\%USERNAME%\Dropbox\vagrant\homestead1`内にVagrantfileその他の設定ファイルを収めることとします。

```txt:PowerShell
> cd C:\Users\$($env:UserName)\Dropbox\vagrant
> git clone https://github.com/laravel/homestead.git homestead1
> cd homestead1
> git checkout v5.3.2
```

## `.vagrant/`を除外する
他のPCと共有する際、`.vagrant/`だけは除外します。
このPC固有の仮想マシンのIDなどが記録されているためです。
あらかじめ`.vagrant/`を作成し、[Dropboxの選択型同期](https://www.dropbox.com/help/syncing-uploads/selective-sync-overview)で除外しておいてください。

```txt:PowerShell
> mkdir .vagrant
```

![001.png](https://qiita-image-store.s3.amazonaws.com/0/27816/e0ba3589-3324-23b8-2cf6-9146571519a1.png)

**注意**: 仮想マシン作成後に行う場合は、`.vagrant/`をよそに避難させてから選択型同期してください。そうしないと`.vagrant/`の中身が削除されてしまいます。

## 設定ファイルを初期化する
下記を実行すると`Homestead.yaml`を含む複数のファイルが生成されます。

```txt:PowerShell
> .\init.bat
```

## 共有フォルダとNginxサイトの設定
`Homestead.yaml`を下記のように修正します。

```diff:Homestead.yaml
  folders:
-     - map: ~/Code
+     - map: ~/Dropbox/server/laravel
        to: /home/vagrant/Code

  sites:
      - map: homestead.app
-       to: /home/vagrant/Code/Laravel/public
+       to: /home/vagrant/Code/blog/public
```

## hostsファイルに追記する
メモ帳を**管理者権限で開き**、`C:\Windows\System32\drivers\etc\hosts`に下記を追記します。

```txt:hosts
192.168.10.10   homestead.app
```


# 仮想マシンを作る
準備が整ったので仮想マシンを作成します。

```txt:PowerShell
> vagrant up
```

ブラウザで`http://homestead.app/`にアクセスします。
下記のように表示されれば成功です。

![003.png](https://qiita-image-store.s3.amazonaws.com/0/27816/f66dbece-3334-7553-73fc-6bfea66f544c.png)

# 余談
## 仮想マシンの中身を確認したい
SSHで接続してコマンドラインで操作できます。

- アドレス: 192.168.10.10
- ユーザ名: vagrant
- パスワード: vagrant

私は[Rlogin](http://nanno.dip.jp/softlib/man/rlogin/)を使っているので下記のように設定しました。

![004.png](https://qiita-image-store.s3.amazonaws.com/0/27816/f89ad728-4930-dc3f-c6fa-6ec46f00317c.png)

試しに仮想マシン内の`~/Code/blog/`を覗いてみると`app/`や`config/`などが存在し、Laravelのフォルダが共有フォルダとして関連付けられていることが確認できます。

![006.png](https://qiita-image-store.s3.amazonaws.com/0/27816/13651af9-d193-9104-3a5e-2d9ddf748592.png)


## Homestead.yamlの変更を反映させたい
共有フォルダやNginxサイトの設定を変更した場合は`vagrant reload --provision`で反映されます。


# 参考文書
- https://laravel.com/docs/5.4/
- https://readouble.com/laravel/5.4/ja/