Laravel6.xを仮想環境に導入する（Vagrant - homestead　導入編）

# はじめに
laravel6になってからの構築手段とか初動について、いくつかQiita上にもあるものの、情報が一つで完結仕切らない部分が（少なくとも自分と同僚には）あったので、自分の通った道をまとめてみました。
初学者の一助になりましたら幸いです。

# 想定使用環境
## 対応OS
Windows 10 professional

…を想定していますが、他の環境でもほとんど同様に通ると思います。

## 使用ソフト
軽率に壊して作り直すのが容易となるメリットを享受したいため、仮想環境上につくります。

### 必須（手順に盛り込みます）
- Oracle VM VirtualBox
- Vagrant
- Laravel Homestead

### 強く推奨（代替手段が分かる人はそれでも可）
- git for windows
    - git bashを使用

### 推奨（代替手段がいっぱいあるのでお好みで）
- エディタ
    - Visual Studio Code とか

なんか他にわかりやすい／面白い物があれば教えていただければ幸いです（小声）

# 実際に導入してみる
概要については以下の記事にほとんどまとまっています。

実際の導入もほぼ同様に可能…なのですが、ある程度補足はあるものの土台がlaravel5.4頃の記述なので、laravel6に即していない部分があったりするので注意。なお、本記事の段落とリンク先のstepを合わせて記述しています。

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

また、本来のLaravelのリファレンスもある程度読んでおくと良いでしょう。

https://readouble.com/laravel/6.x/ja/homestead.html
## 仮想環境を入れる
### 1.VagrantとVirtal Boxのインストール
それぞれ
- https://www.vagrantup.com/downloads.html
- https://www.virtualbox.org/

から落としてください。参考までに、自分が使用したバージョン（11/10頃）

|ソフト名|バージョン|
|----|----|
|Vagrant|2.2.6|
|VirtualBox|6.0.14|

### 2.Homesteadのvagrant boxを導入
Windowsのcmdでも一応打てるはずですが、以降git bashの使用を推奨します。

```bash
(user名)@(PC名) MINGW64 ~
vagrant box add laravel/homestead
```

### 3.Homesteadのダウンロード
今回はデスクトップに作成するものとします。場所に関してはある程度考慮するのが良いと思います。初学者の人は一度試しに作ったあと、二回目に場所を変更すると応用問題になると思います（自分個人としてはデスクトップじゃない方がいいと思っています）。

```bash
(user名)@(PC名) MINGW64 ~（以下省略）
$ cd ~
$ pwd
/c/Users/（user名）
$ cd Desktop/
$ pwd
/c/Users/（user名）/Desktop/
$ git clone https://github.com/laravel/homestead.git ./Homestead
```

### 4.Homesteadの設定ファイルの作成
デスクトップにフォルダが増えていると思うので、直接フォルダを開いて、"init.bat"を動かしましょう（mac/linuxは移動して"bash init.sh"）。

"homestead.yaml"が生成されます。

### 5.SSH鍵ファイルの作成

既にできている場合(git bashはllエイリアスがありますが、実コマンドは多分"ls -l"。-alではなさそう。)

```bash
$ ll .ssh
-rw-r--r-- 1 user 197121 2610 MM月 DD HH:mm id_rsa
-rw-r--r-- 1 user 197121  574 MM月 DD HH:mm id_rsa.pub
```
出力がなかった場合はできていないので、以下のコマンドで作成しましょう。

```bash
$ ssh-keygen
```
いくつかコマンドが出ますが、Enterで飛ばして構いません。passphraseも改行２回で飛ばせますが、ある程度適当に入れることを推奨。SSHについて詳しくはまとめてくれている他記事を参照（以下は一例です）。

https://qiita.com/kenju/items/b09199c4b3e7203a2867

### 6.yamlファイルの編集
windows環境なら直接エディタで開いてしまうのが早いと思います。

他記事では大体"folders"が鬼門です。例によってデスクトップに作ることをひとまず前提にします（注記あり）。

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

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: C:\Users\(user名)\Desktop\hoge #修正部分１
      to: /home/vagrant/code

sites:
    - map: homestead.test
      to: /home/vagrant/code/moefan/public #修正部分２

databases:
    - homestead

features:
    - mariadb: false
    - ohmyzsh: false
    - webdriver: false
    - mysql8: true #この行を追加

# ports:
#     - send: 50000
#       to: 5000
#     - send: 7777
#       to: 777
#       protocol: udp
```
laravel6でだいぶ変わった部分のようで、laravel5の初期状態で入っていたbootstrapやvue/react、Database系といったものの大半が初期状態では入らなくなった模様。dbについては好みがあると思いますが、今回はひとまずmysql8を導入します（が本記事ではこの後使いません）。

Windows環境では以下の問題があるようです。

1. mapを相対パスで書くとうまく動作しない（公式にも記述あり）
    - →ホームディレクトリの"~"を使用せず"C:\"から始まる絶対パスで記述
1. mapの中にバイト文字（例：日本語）が含まれていると、後の起動時にコケる
    - →この例で言うと"(user名)"の部分が日本語だとコケるので、日本語が含まれない場所に作成する

自分は２に見事に引っかかりました…

またこのタイミングで、実際にlaravelを入れるフォルダを当該の場所に作成してください。この例では"C:\Users\（user名）\Desktop"に"hoge"を作成します。

### 7.仮想マシンの起動
先程Homesteadを入れた場所（記事としてはデスクトップ）に移動して、"vagrant up"を打ちます。

```bash
(user名)@(PC名) MINGW64 ~
$ cd Desktop/Homestead/
(user名)@(PC名) MINGW64 ~/Desktop/Homestead (master)
$ vagrant up
```
yamlで設定したIPの被りやBIOS側の仮想化支援機能などの問題がある場合もありますが、その部分のトラブルシュートは本記事では割愛します（先の5.4時代の記事などに対処があります）。

## 仮想環境にlaravelを入れる
### 8.仮想マシン上でlaravelをインストールする
```bash
(user名)@(PC名) MINGW64 ~/Desktop/Homestead (master)
$ vagrant ssh
```
問題がなければ、VMの中の仮想マシン(Ubuntu)にログインできるはずです。先程手順6で設定した"code"フォルダがマウントされているはずなので、そのフォルダに移動します。

```bash(仮想マシン)
vagrant@homestead:~$cd code/
```
本記事で言う"C:\Users\（user名）\Desktop\hoge"と同期しているはずなので、試しに以下のコマンドを打ってみましょう

```bash(仮想マシン)
vagrant@homestead:~/code $ touch hoge.txt
vagrant@homestead:~/code $ ls
（hoge.txtが出力される）
```
windows上からもフォルダを確認して、"hoge.txt"ができているかを確認しましょう（確認したら消しても構いません）。

同期が確認できたらlaravelのインストールです。

```bash(仮想マシン)
vagrant@homestead:~/code $ composer create-project laravel/laravel --prefer-dist moefan
```
moefanは任意名です（手順６の「修正部分２」と同じ）。windows上のフォルダにもmoefan（またはフォルダ名）が追加されていることを確認しましょう。

### 9.laravelページの表示（＋α）
ここまでくればlaravelのページが表示できるはずです。

http://192.168.10.10/

IPアドレスはyamlファイルの一番上の設定に準じますが、hostsを定義して別名でアクセスしてみましょう。

C:\Windows\System32\drivers\etc　に"hosts"というファイルがありますので、「管理者権限」で編集します。

```hosts
192.168.10.10 homestead.test
```
http://homestead.test/

自環境では特にVMもwindowsも再起動無しで動きましたが、場合により再起動が必要になるかもしれません。

# 環境構築後
Laravel使い始めとして触ってみるオススメとか。
## 認証系
公式でほとんど搭載しているauthを有効にしてみるのが良いと思います。ただしwindows環境ではこの手順そのままだとエラーを吐くので、続き記事で書こうかと思います。
→書きました　https://qiita.com/honami/items/48b39e12f81d1dbe49c4

https://readouble.com/laravel/6.x/ja/authentication.html

https://qiita.com/rf_p/items/d4c0eb4e21fb92618cf6

## 公式チュートリアル
laravelのドキュメントでのチュートリアルは5.2までしか対応していないけど、ある程度同じで作れます。Qiitaのリンク先は5.7で5.1のチュートリアルをやったメモですが、ほぼ同様で（レイアウト崩れに目を瞑れば）完成します。これもどこかでまとめたほうがいいのかしら…

https://readouble.com/laravel/5.2/ja/quickstart.html

https://qiita.com/bboobbaa/items/cf0d7910161d69be2429

# さいごに
この手順通りにやってもうまく行かなかった…ということもあるかもしれませんが、答えはだいたいネット上に落ちているので、見つけたらそっと指摘してやってください。

バージョンが上がって使えなくなる可能性もあると思います。その場合は土台が使えそうなら使いまわしつつ、新バージョン対応として記事とか書いておくと次の人が喜ぶと思います。