Laravelの開発環境をHomesteadで作る（Windows）

Windows環境にてHomesteadを利用し、
PHPフレームワークLaravelの開発環境を作る手順の忘備録です。

## 1. 前提条件
Vagrant、VirtualBox、Gitをあらかじめインストール済。
私は下記の環境で実施しました。

|  ホストOS              | Vagrant         | Oracle VM VirtualBox | Git for Windows      |
| ---------------------- | ----------------|----------------------|----------------------|
|  Windows 10 Home 64bit | 2.2.14          |6.1.16                | 2.27.0               |

## 2. Homestead Vagrant Boxのインストール
Gitbashを立ち上げ下記のコマンド実行します。
(以降、コマンド実行は全てGitbashからのものです)

```
$ vagrant box add laravel/homestead
```

`laravel/homestead`BoxのがBoxのリストに追加されていることを確認します。

```
$ vagrant box list
laravel/homestead (virtualbox, 9.7.2)
laravel/homestead (virtualbox, 10.1.1)
```

# 3. Homesteadのインストール
下記のコマンドを実行し、Homesteadをホームディレクトリにインストールします。

```
$ git clone https://github.com/laravel/homestead.git ~/Homestead
```
公式曰く

>masterブランチは常に安定しているわけではないため、
バージョンタグがついたHomesteadをチェックアウトすべきでしょう。
最新の安定バージョンは、GitHubのリリースページで見つかります。

との事なので、[こちら](https://github.com/laravel/homestead/releases) のリリースページを参照して安定バージョンをチェックアウトします。

```
$ cd ~/Homestead
$ git checkout v10.17.0　// 執筆時点での最新バージョン
```

Homesteadフォルダ直下で下記のコマンドを実行する、もしくはHomestead直下の`init.bat`をダブルクリックして`Homestead.yaml`を生成します。

```
$ bash init.sh
```

# 4. 共有フォルダの設定

先にホストPC側の共有フォルダを作っておきます。

```
$ mkdir ~/Homestead/code
```

`Homestead.yaml`を開き、共有フォルダを設定します。
`map`はホストOSの共有フォルダのパス、`to`はゲストOSの共有フォルダのパスをそれぞれ表します。
Windowsの場合、なぜかfoldersの`map`に相対パスが使えないため絶対パスで指定してください。

```yaml:&#x20;Homestead.yaml

folders:
    - map: C:\Users\Taro Tanaka\Homestead\code
      to: /home/vagrant/var/www/html
```
GuestAdditionsのバージョンが一致しない場合に自動で対応してくれるプラグインをインストールします。

```
$ vagrant plugin install vagrant-vbguest
```

Homestead直下のVagrantfileにホストOSとゲストOSの共有フォルダを同期するための設定を追記します。

```
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    ........
    # 追記
    config.vm.synced_folder '.', '/vagrant', disabled: false
end
```


# 5. サイト設定の追加
`map`のホスト名を`to`のゲストOS上のディレクトリに接続する設定です。
この記事では後々ゲストOSのディレクトリ`var/www/html`に`lara_project`という名前のLaravelプロジェクトを作る予定なので先に設定しておきます。

```yaml:&#x20;Homestead.yaml

sites:
    - map: homestead.test
      to: /home/vagrant/var/www/html/lara_project/public
```

`C:\Windows\System32\drivers\etc`下にあるhostファイルの最終行に`Homestead.yaml`中のIPアドレス・ホスト名を追記します。
編集には管理者権限が必要ですので、下記記事の方法などを用いてください。
[管理者権限でメモ帳を開いてhostsを編集するコマンド](https://qiita.com/tiibun/items/5719869552ee5b713d83)

```&#x20;Hosts
192.168.10.10 homestead.test
```

# 6. sshキーの生成

以下の通り`Homestead.yaml`で必要なため、
sshキーを生成していない場合は [この辺](https://qiita.com/aberyotaro/items/aee83b4bb86e6ee052f8) の記事を参考に`~/.ssh`下に公開鍵(`id_rsa.pub`)、秘密鍵(`id_rsa`)を生成しておきます。

```yaml:&#x20;Homestead.yaml
authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa
```

# 7. Vagrantの起動

諸々の設定が完了したのでいよいよゲストOSを起動します。
起動し終わるまで暫くお待ちください。

```
$ vagrant up
```

起動完了した時点で http://homestead.test を開いた際、

> No input file specified.

と表示されていればOKです。
（まだサイト設定した `/home/vagrant/var/www/html/lara_project/public` 配下に`index.php`がないのでこの表示になります）

# 8. Laravelプロジェクトの作成

下記のコマンドでゲストOSにログインします。

```
$ vagrant ssh
Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 4.15.0-124-generic x86_64)

 _                               _                 _
| |                             | |               | |
| |__   ___  _ __ ___   ___  ___| |_ ___  __ _  __| |
| '_ \ / _ \| '_ ` _ \ / _ \/ __| __/ _ \/ _` |/ _` |
| | | | (_) | | | | | |  __/\__ \ ||  __/ (_| | (_| |
|_| |_|\___/|_| |_| |_|\___||___/\__\___|\__,_|\__,_|

* Homestead v10.17.0, v11.4.0
* Settler v9.7.2 (Ubuntu 18.04)
* Settler v10.1.1 (Ubuntu 20.04)
```

`var/www/html`ディレクトリを作成し、遷移します。

```
$ mkdir -p var/www/html
$ cd var/www/html
```

`lara_project`というプロジェクト名でLaravelプロジェクト作ります。

```
vagrant@homestead:~/var/www/html$ composer create-project laravel/laravel lara_project --prefer-dist
```

プロジェクト作成完了後、改めて http://homestead.test 開き、Laravelの画面が表示されていればOKです。
![larave_top.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/780135/3ccef763-2ce1-453d-c84c-80eeadfe8084.png)

# 8. データベースのマイグレーション

エクスプローラー上で`C:\Users\Taro Tanaka\Homestead\code`を開くと`lara_project`がsyncされているはずです…。
`lara_priject`直下の`.env`ファイルのDB設定を下記のように編集します。

```env:&#x20;.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
↓
DB_CONNECTION=mysql
DB_HOST=homestead.test
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
```
ユーザー:homestead と DB: homestead がデフォで作成されているため、ここではそれを使ってます。

設定変更後、ゲストOS上でマイグレーション実行して完了です。

```
$ cd lara_project
$ php artisan migrate
```

---
以上です、ありがとうございました。