Laravel入門 - Macに環境構築 -

MacにHomesteadを使用して仮想マシン上にLaravel環境する手順。

# 主要登場人物

## VirtualBox
仮想マシン環境を提供してくれる。
例えばMac上に仮想マシンを起動して、その中ではWindowsを起動して使用する等。
今回はLaravelが走る仮想Ubuntuマシンを走らせてもらう。

## Vagrant
VirtualBox、VMWARE、AWS等の仮想環境の構築等をコマンドベースで実行できるようにするツール。
今回は仮想Ubuntuマシンを構築・制御するのに使用する。
VirtualBoxをラップしてくれるイメージ。

## Homestead
パッケージングを事前に済ませたLaravel公式のBox。(公式抜粋) 
BoxとはVagrantのBoxのことであり、Laravelの開発に必要なOSやPHP、Nginxが入った状態で配布されている。
HomesteadがさらにVagrantをラップしているようなコンセプトになっている。
とはいえ、VagrantのBoxはVagrantコマンドでDLするし、Vagrantの設定ファイルであるVagrantfileをHomesteadで設定するような操作になっていて最初ちょっと立ち位置がわかりにくい…。

## Composer
依存管理ツール。
ライブラリAをインストールする際に、Aが必要としているB、さらにはBが必要としているC,D…を自動的にインストールしてくれる。
今回は仮想Ubuntu上にLaravelフレームワークをインストールするのに使用する。

# 環境構築

## Vagrantのインストール
[公式サイト](https://www.vagrantup.com/downloads.html)からDLしてインストールする

## VirtualBox のインストール
[公式サイト](https://www.virtualbox.org/)からDLしてインストールする

## laravel/homestead boxをVagrantへ追加する

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

UbuntuOSにPHPやらNginx等Laravelをすぐに試せるVagrantBoxがDLされる。

## HomesteadのDL

```console
$ git clone https://github.com/laravel/homestead.git ~/Homestead
$ cd ~/Homestead
$ git checkout release
$ bash init.sh
```

この中にVagrantが使用するVagrantfileが含まれている。
そして、Vagrantfileは以降設定するHomestead.yamlの中を参照するように出来ている。

## Homesteadの設定

Homestead.yamlを必要に応じて設定する。
今回はfoldersのmapとtoとsitesのmapとtoを編集。

foldersの方は仮想マシンとホストマシンとの間で共有されるフォルダのパスを設定する。
Homesteadで複数のプロジェクトを管理する場合はこの設定が増えていくイメージ。

sitesの方はドメインの設定。
mapにアクセスするとNginxはtoのディレクトリをルートディレクトリとする。

```yaml:Homestead.yaml
ip: "192.168.10.10"
memory: 2048
cpus: 2
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

# mapがホストマシン、toが仮想マシンのパス
# ホストマシンに指定したディレクトリが存在していること
folders:
    - map: ~/vagrantcode/Laravel/hello
      to: /home/vagrant/hello

sites:
    - map: homestead.hello
      to: /home/vagrant/hello/public

databases:
    - homestead

features:
    - mariadb: false
    - ohmyzsh: false
    - webdriver: false
```

## SSH鍵ファイルの作成(未作成の人は
```console
$ cd ~/
$ ssh-keygen -t rsa
```

## Vagrant2.2.6でVirtualbox6.1を認識させる
私が環境を構築した時点でのVagrant、VirtualBoxそれぞれのVersionが2.2.6と6.1だったのだが、Vagrantが上手にVirtualBox6.1を認識できなかった。
[こちら](https://qiita.com/shuu1222/items/7a6d04172363be44025c)を参考に認識させることが可能だった。

## Vagrant Boxの実行

```console
$ vagrant up
```

VirtualBoxを立ち上げて確認するとHomesteadのマシンが実行状態になっているのが確認できるはず。

## ComposerによるLaravelプロジェクトの構築

仮想マシン上にはLaravelプロジェクト自体は構築されていないので、好きなプロジェクトを構築する。

sshで仮想マシンに接続後Homestead.yamlで設定したfoldersのパスと対応する場所にプロジェクトを構築する。
※↓の場合はhelloプロジェクト

```console
$ vagrant ssh
$ cd /home/vagrant
$ composer create-project laravel/laravel --prefer-dist hello
```

# 動作確認

ここまで実行すれば、ホスト環境からブラウザでHomestead.yamlに設定したIPにアクセスすればLaravelの画面が見えるはず。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200860/6dcc259c-6f8b-eef2-eea1-8c9b34e1fb46.png)

# 参考サイト
https://readouble.com/laravel/6.x/ja/homestead.html
https://qiita.com/7968/items/97dd634608f37892b18a
https://qiita.com/daichi87gi/items/d5da33c76295ee32a735
https://qiita.com/hkiri/items/7060a9caff306c973679

https://qiita.com/pugiemonn/items/bcd95a35c3ec7624cd61
https://qiita.com/you-me/items/b886dd0fc8e5047c4bc6
https://weblabo.oscasierra.net/vagrant/

https://blog.office-iwakiri.com/archives/mac-652
https://it.becrazy.jp/article/laravel-homestead-setting
https://qiita.com/oreo3@github/items/4054a4120ccc249676d9