[入門]Laravelローカル仮想環境構築(VirtualBox + Vagrant + Homestead)のいろは

今回はVirtualBox、 Vagrant、 Homesteadを使ってLaravelの環境構築をする方法を順を追ってできるだけ簡潔に説明していこうと思います。

ps.
VirtualBoxによる環境構築に関する記事は他にもたくさんありますが、長々と一つ一つの説明すると、途中でこんがらがってしまい、逆にわかりづらくなってしまっているものが多かったので、この記事では出来るだけ分量を抑え、簡潔に書いていこうと思います。

##VirtualBoxとは
既存のOS上に仮想のOSを実行できる仮想化ソフトウェアのこと。

windows上でMacOSを起動したり、逆にMac上でwindowsを起動できたりする仮想化マシン。

####VirtualBoxを扱う上で最低限抑えておくべき重要語句

####ゲストosとホストos
あるコンピュータに仮想環境を構築する場合、そのコンピューターをホストos、仮想環境側をゲストosと呼ぶ。
例えば、MacBook　に Windowsの仮想環境を立てるならば、MacBook 側がホストos、windows側がゲストosとなる。

開発を進めていくにあたってある作業を「ホストで実行するか、ゲストで実行するか？」を考える必要がある場合があるためしっかり抑えておく。
####共有フォルダ
ゲストosとホストos間で紐付けられたフォルダのこと。
このフォルダ下で作成されたファイルやフォルダ、編集内容は双方にリアルタイムで反映される。

先ほどの例を借りると、
この機能を利用することで、ホストos側のMacで変更した内容は、リアルタイムでゲストos側のWindows に共有しているフォルダにも反映される。
逆も同じく、Windows側で変更した内容は、リアルタイムでMac側の共有フォルダにも反映される。

##Vagrantとは
VirtualBoxで構築した仮想環境をコマンドラインから操作するためのソフトウェア。
VirtualBox に対して、仮想マシンの起動や操作、停止や破棄などの指示をしてくれる。

❇︎仮想マシンに対して、 Vagrant 経由で指示をするため、VirtualBox を操作することは基本的にない。

##Vagrant Boxとは
DB・Webサーバ・言語など、仮想環境に必要な機能を一つのパッケージとして管理する機能。

ゲストosの元となるパッケージ(テンプレート)を追加できる。

Laravelアプリケーションは、公式に公開されているHomesteadというパッケージ(テンプレート)を利用することで、Laravel環境に必要なものを一気にインストールすることができる。

##Homesteadとは
Vagrant Boxのパッケージの一種で、Laravelの環境構築に必要なOS、Nginx、PHP、MySQL等の環境を一つにまとめたパッケージ。

#Let's 環境構築！
##①VirtualBox, Vagrantインストール
VirtualBox
https://www.virtualbox.org/


Vagrant
https://www.vagrantup.com/downloads.html

##②Homestead vagrant box のダウンロード
ターミナルを開き、以下のコマンドでVagrant BoxにHomestead vagrant boxを追加する。

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

Enter your choiceと使用する仮想化ソフトウェアの種類を聞かれるが、
今回はVirtualbox の番号を入力する。

##③Homesteadのダウンロード
任意のディレクトリを作成し、そこに Homestead のファイルをダウンロードする。

```
#任意のディレクトリ作成し移動
$ mkdir app
$ cd app
```

```
#作成したディレクトリ下でHomesteadのテンプレートをダウンロード
$ git clone https://github.com/laravel/homestead.git Homestead
```

これでの中にappディレクトリの直下に Homestead のファイルがダウンロードされる。

##④Laravel Homestead の設定ファイルの作成
```
#先ほど作成したHomesteadの直下に移動する
$ cd Homestead
```

```
#Homesteadを初期化
$ bash init.sh
```
Homesteadを初期化することによってHomestead の設定ファイルであるHomestead.yamlが生成される。

##⑤Homestead の設定ファイルの編集
先ほど作成したHomestead.yamlファイルを編集する。

```
$ vim Homestead.yaml
```

中身を以下の通りに設定する。

```ruby:Homestead.yaml
---
ip: "192.168.10.10" #Vagrant に割り当てられるIPアドレス
memory: 2048 #仮想サーバに割り当てるメモリの容量
cpus: 2 #CPUの数
provider: virtualbox #利用する仮想化ソフトウェア

authorize: ~/.ssh/id_rsa.pub #公開鍵の場所

keys:
    - ~/.ssh/id_rsa #秘密鍵の場所

folders:　#共有フォルダの指定
    - map: ~/app #ホストos側(先ほど作成したappディレクトリ下に設定)
      to: /home/vagrant/code #ゲストos側

sites: #homestead.test でアクセスしたときに to に記載した仮想マシンのディレクトリを参照。
    - map: homestead.test
      to: /home/vagrant/code/Laravel/public

databases:
    - homestead #データベース

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

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

##⑥仮想マシンの起動
以下のコマンドで仮想マシンを起動する。

```ruby:Homesteadディレクトリ下
#仮想マシンの起動
$ vagrant up
```

##⑦仮想マシン(ゲストos)上でLaravelインストール

```
#ゲストosにログイン
$ vagrant ssh
```

先ほど、Homestead.yamlのfolderで設定したように、以下のto以降の部分に合わせるため、codeディレクトリ下にlaravelをインストールする。

```
folders:　#共有フォルダの指定
    - map: ~/app #ホストos側(先ほど作成したappディレクトリ下に設定)
      to: /home/vagrant/code #ゲストos側
```

code/に移動

```
vagrant@homestead:~$ cd code
```


laravelのインストール()
先ほど、Homestead.yamlのsitesで設定したように、ホストosのブラウザからLaravelアプリケーションにアクセスする時に、ホストosの/home/vagrant/code/Laravel/public下を参照させるため、プロジェクト名をLaravelとして、インストールする。
(Laravelのデフォルトのドキュメントルートはpublic。)


```
sites: #homestead.test でアクセスしたときに to に記載した仮想マシンのディレクトリを参照。
    - map: homestead.test
      to: /home/vagrant/code/Laravel/public

```

```
#laravelのインストール(結構時間かかります)
vagrant@homestead:~$ composer create-project laravel/laravel --prefer-dist Laravel
```

##⑧Laravel ページの表示
###ホスト名とIPアドレスの対応付け

```ruby:ホストos
$ sudo vim /etc/hosts
```

最後の行に以下の行を追加する。

```ruby:/etc/hosts
192.168.10.10 homestead.test
```

これで、ブラウザ上でhomestead.testにアクセスした際に、IPアドレス192.168.10.10を参照されるようになる。

ブラウザ上でhomestead.testと打ってみて、Laravelの文字が大きく表示されたら成功