【Laravel 環境構築】Laravel5.6 + Vagrant + VirtualBox + Homestead

#Laravel環境構築

##内容紹介

⓪Laravel環境構築における前提条件
①Homesteadのboxをadd
②Homesteadをgit clone
③Homestead.yamlを作成
④Homestead.yamlを編集
⑤Vagrantでlaravelをダウンロード
⑥ブラウザで確認
⑦補足

##⓪Laravel環境構築における前提条件

###バージョン

Laravel 5.6.0 ( 2018.02.07 Release )
homestead 5.1.0

###環境構築 日時

2018.2.21

###前提

vagrantとvirtualBoxはインストール済み
ssh鍵は作成済み(~/.ssh/id_rsa  ~/.ssh/id_rsa.pub)

###ゴール

ブラウザで、`192.168.10.10` を叩いた時に、laravelのアプリが立ち上がる

###手動で作成するディレクトリ

    ~/laravel_environment
    ~/laravel_environment/code

※Vagrant(ゲストOS)ではなくホストOSに作成します。
※パスやディレクトリ名に関しては必要に応じてご変更下さい。


##①Homesteadのboxをadd

まずは、初めにhomesteadのboxをインストールします。

###今回作業をするディレクトリの作成

```
$ cd ~
$ mkdir laravel_environment
$ cd laravel_environment
```

### vagrant box add laravel/homestead

選択が出るので、virtualbox(3番)を選択します。
初めは20分くらいかかります。(すでにaddしてある方は不要です)

```
$ vagrant box add laravel/homestead
==> box: Loading metadata for box 'laravel/homestead'
    box: URL: https://vagrantcloud.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) hyperv
2) parallels
3) virtualbox
4) vmware_desktop

Enter your choice: 3
==> box: Adding box 'laravel/homestead' (v5.1.0) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/laravel/boxes/homestead/versions/5.1.0/providers/virtualbox.box
==> box: Successfully added box 'laravel/homestead' (v5.1.0) for 'virtualbox'!
$
```


##②Homesteadをgit clone

###ディレクトリの作成

```
$ mkdir code
$ cd code
```

①で作成したディレクトリの下にcodeを作成した状態です。
`~/laravel_environment/code`

###git clone `https://github.com/laravel/homestead.git` Homestead

```
$ git clone https://github.com/laravel/homestead.git Homestead
Cloning into 'Homestead'...
remote: Counting objects: 2773, done.
remote: Total 2773 (delta 0), reused 0 (delta 0), pack-reused 2773
Receiving objects: 100% (2773/2773), 538.26 KiB | 149.00 KiB/s, done.
Resolving deltas: 100% (1644/1644), done.
Checking connectivity... done.
$
```

これで、`~/laravel_environment/code/Homestead` が新しく作成されています。

##③Homestead.yamlを作成

cloneしたHomesteadの中で、bash init.shを実行し、Homestead.yamlを作成します。

###移動

```
$ cd Homestead/
```

###bash init.sh

```
$ bash init.sh
Homestead initialized!
$
```

成功のメッセージ表示されて
`~/laravel_environment/code/Homestead/Homestead.yaml` が新しく作成されています。

##④Homestead.yamlを編集

編集後のHomestead.yaml

```php:Homestead.yaml
cpus: 1
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: ~/laravel_environment/code
      to: /home/vagrant/code

sites:
    - map: 192.168.10.10
      to: /home/vagrant/code/Laravel/public

databases:
    - homestead

# blackfire:
#     - id: foo
#       token: bar
#       client-id: foo
#       client-token: bar

# ports:
#     - send: 50000
#       to: 5000
#     - send: 7777
#       to: 777
#       protocol: udp
```

###差分

デフォルトのHomestead.yamlをあらかじめコピーして置き、編集後のHomestead.yamlと比べると下記の通りになります。

```php:差分を表示
$ diff -u Homestead.yaml.20180221 Homestead.yaml
--- Homestead.yaml.20180221 2018-02-21 22:09:04.000000000 +0900
+++ Homestead.yaml 2018-02-21 22:13:25.000000000 +0900
@@ -10,12 +10,12 @@
     - ~/.ssh/id_rsa

 folders:
-    - map: ~/code
+    - map: ~/laravel_environment/code
       to: /home/vagrant/code

 sites:
-    - map: homestead.test
-      to: /home/vagrant/code/public
+    - map: 192.168.10.10
+      to: /home/vagrant/code/Laravel/public

 databases:
     - homestead
$
```

##⑤Vagrantでlaravelをダウンロード

まず、vagrant upを実行します。
次に、vagrant sshをします。

```
$ vagrant ssh
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-112-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

0 packages can be updated.
0 updates are security updates.

vagrant@homestead:~$

vagrant@homestead:~$ cd /home/vagrant/code

vagrant@homestead:~/code$ composer create-project laravel/laravel --prefer-dist Laravel
Installing laravel/laravel (v5.6.0)
  - Installing laravel/laravel (v5.6.0): Downloading (100%)

(以下省略)
```

ゲストOSに、/home/vagrant/code/Laravel が作成される。
ホストOSに、~/laravel_environment/code/Laravel がシンクされている。

##⑥ブラウザで確認

ブラウザで、`192.168.10.10` を打ち込み確認してみます。

![laravel.png](https://qiita-image-store.s3.amazonaws.com/0/117024/c2cce0c7-2ff0-0de4-ce8a-a7db9027afe7.png)

きちんと表示されることができました。
めでたしめでたし。

##⑦補足

###No input file specified.

もしも画面に `No input file specified.` とメッセージが表示されてしまう方は、
ディレクトリの名前やパスの設定と、 `Homestead.yaml` の設定などを見直しが必要かもしれません。
もし修正したら、`vagrant reload` もしくは `vagrant provision` を実行することを忘れないで下さい。


###ディレクトリcodeについて

Homestead.yaml を作成した時にデフォルトで記載されている「code」というディレクトリですが
5.4 までは、Code (先頭大文字)
5.5 からは、code (先頭小文字) に変更されています。

現在は5.6なのでcode (先頭小文字) が正しいです。
https://readouble.com/laravel/5.4/ja/homestead.html
https://readouble.com/laravel/5.5/ja/homestead.html

###ipではなくホスト名で表示されるようにしたい

※今回はブラウザでip叩いて表示されるようにしましたが、もしもホスト名(URL)の方が良い方は、`/etc/hots` で、IPとホスト名をひも付けて下さい。
そのあと、`Homestead.yaml` の
`map: 192.168.10.10` の部分を
`map: hogehoge.com` などに変更下さい。

###その他参考URL

https://qiita.com/7968/items/97dd634608f37892b18a