【Laravel5.8】Laravel Homesteadでの開発環境構築

# 内容
Laravel Homesteadを利用してLaravel5.8の開発環境を構築する

# 環境
- Windows10 / macOS Mojave 10.14.6
- VirtualBox 6.0.10
- Vagrant 2.2.5
- git version 2.23.0.windows.1
- git version 2.20.1 (Apple Git-117)
- laravel/homestead (virtualbox, 8.0.1)
- Laravel Framework 5.8.33

# 各種インストール
まず初めに、今回は必要なものを一式ダウンロードインストール

- **VirtualBox**

仮想環境を作るためのツールのひとつ
ダウンロードをするとインストーラーが開くので指示通りにインストールを進める
https://www.virtualbox.org/wiki/Downloads

- **Vagrant**

該当するOSを選択してダウンロードインストール
https://www.vagrantup.com/downloads.html

- **gitとGit Bash**（Windows10）

gitのインストールと合わせてGit Bashのインストールもする。
Git Bashを導入することでUnixコマンドでWindowsのファイルを操作できたりするようになる
※以下、Git Bashを利用してコマンドを実行する
https://gitforwindows.org/

- **git**（macOS)

・インストーラをダウンロードしてインストールする方法
　下記リンクより "click here to download manually" を選択してダウンロード
　https://git-scm.com/download/mac

　もしくは

・Homebrewからインストール方法

```sh
# Homebrewがあるか確認
$ brew list

# listが表示されればインストール
$ brew update
$ brew install git
```

Homebrewがない場合こちらが参考になるかと思います
https://tracpath.com/bootcamp/git-install-to-mac.html



# Laravel Homesteadの追加
## Vagrantへのboxの追加
下記コマンドを実行し、何か聞かれたら**virtualbox**をチョイスする

```sh:~\
> vagrant box add laravel/homestead
```
boxを追加したらLaravel Homsteadをダウンロードする
今回はホームディレクトリの中に**MyVagrant**を作成し、その中に**Code**というディレクトリを作成して管理することにする

```sh:~\
# ホームディレクトリにMyVagrant作成し、その中にCodeを作成し移動
> mkdir MyVagrant
> cd MyVagrant
> mkdir Code
> cd Code

# リポジトリをクローン
> git clone https://github.com/laravel/homestead.git Homestead
```

完了すると、作成した`~\MyVagrant\Code\`下に**Homestead**ディレクトリが生成される

## 設定ファイルの生成
生成されたHomesteadディレクトリに移動し、設定ファイルを生成するコマンドを実行する

```sh:~\MyVagrant\Code\
# Homesteadディレクトリに移動
> cd Homestead

# 設定ファイル生成 (Windows..)
> init.bat
# 設定ファイル生成 (Mac / Linux..)
$ bash init.sh
```

完了すると**Homestead.yaml**が生成される。生成されたファイルをエディタで開き、**folders**項目を編集。
**map**がWindowsもしくはMac側のディレクトリ、**to**が仮想環境のディレクトリであり、これらが同期されるようになる

```yaml:~\MyVagrant\Code\Homestead\Homestead.yaml
---
ip: "192.168.10.10"
memory: 2048
cpus: 2
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    # - map: ~/code　   # 変更前
    - map: ~/MyVagrant　　# 変更後
      to: /home/vagrant/code

sites:
    - map: homestead.test
    # to: /home/vagrant/code/public  # 変更前
      to: /home/vagrant/Laravel/public  # 変更後(後ほどプロジェクト名をLaravelとするため)

databases:
    - homestead

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

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

```


## SSH鍵ファイルの作成

```sh:~\MyVagrant\Code\Homestead
# SSH鍵ファイルを作成するコマンド
> ssh-keygen -t rsa
```



## hostsファイルの編集
192.168.10.10に対して http://homestead.app でアクセスできるように**hosts**の設定変更が必要
権限で編集できない場合は一度デスクトップに落としてエディタで編集して再度戻せばOK

- Macの場合
    - /private/etc/hosts
- Windowsの場合
    - C:\windows\system32\drivers\etc\hosts

```sh:\windows\system32\drivers\etc\hosts
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost

192.168.10.10 homestead.test  #追記(ipの後に半角スペースを空ける)
```

以上で環境構築は終了。

# 仮想マシンを起動しSSH接続
##  仮想マシンの起動

```sh:~\MyVagrant\Code\Homestead\
# 仮想マシン起動コマンド
> vagrant up
# Homestead.yamlやhostsなどの設定値を後から変更した場合は、それらを反映させるためプロビジョナの実行が必要となる
> vagrant reload --provision

# 立ち上がっているか、仮想マシンの状態を確認する
> vagrant status
# 次のように出力されればOK(running)
Current machine states
homestead          running (virtualbox)
```

## SSH接続

```sh:~\MyVagrant\Code\Homestead\
> vagrant ssh

# 次のように表示されれば接続完了
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-55-generic x86_64)

Thanks for using
 _                               _                 _
| |                             | |               | |
| |__   ___  _ __ ___   ___  ___| |_ ___  __ _  __| |
| '_ \ / _ \| '_ ` _ \ / _ \/ __| __/ _ \/ _` |/ _` |
| | | | (_) | | | | | |  __/\__ \ ||  __/ (_| | (_| |
|_| |_|\___/|_| |_| |_|\___||___/\__\___|\__,_|\__,_|

* Homestead v9.0.0 released
* Settler v8.0.0 released

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

## プロジェクト作成
composerは既にインストールされているため、composerコマンドを使用してlaravelをインストールする

```sh:/home/vagrant/
$ composer create-project laravel/laravel --prefer-dist {プロジェクト名}
# Laravelというプロジェクト名の場合
$ composer create-project laravel/laravel --prefer-dist Laravel
```

以上で、**hosts**で設定した http://homestead.test にアクセスすればおなじみの画面が表示される

![screen.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449626/11f52586-0a2a-941b-8b77-7625375f1fbc.png)