Vagrant（仮想化）でLaravel環境の構築について自分なりにまとめてみた（Windows10）

# はじめに
<!-- 発端や概要を記載 -->
Laravelでの環境構築の際にLaravelの<a href="https://readouble.com/laravel/6.x/ja/installation.html">公式ドキュメント様</a>よりVagrant環境（仮想環境）で構築するよう記述されていたので私自身のアウトプットのために記事にしてみました。

# 目次
<!-- タイトルとアンカー名を編集 -->
1. [環境構築](#Chapter1)
1. [使ってみてわかったこと](#Chapter2)
1. [参考文献](#reference)

<!-- 各チャプター -->
<a id="#Chapter1"></a>
#環境構築
Vagrantとは、ローカル環境内に<a href="https://bcblog.sios.jp/what-is-virtualenvironment-vmware/#:~:text=%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E3%81%A8%E3%81%AF%E3%80%81%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3,%E3%81%97%E3%81%9F%E3%82%8A%E3%81%99%E3%82%8B%E6%8A%80%E8%A1%93%E3%81%A7%E3%81%99%E3%80%82">仮想環境</a>を比較的簡単に構築することだと認識しています。
詳細は<a href="https://e-words.jp/w/Vagrant.html">IT用語辞典</a>にて確認をお願いします。
では、環境構築についてはじめようかと思います。
まずは手順１～手順３まで入れてください。
手順１：[VirtualBox](https://www.virtualbox.org/)を入れる。
手順２：[Vagrant](https://www.vagrantup.com/)を入れる。
手順３：[Git](https://gitforwindows.org/)を入れる。

下記コマンドは、homesteadに用いる仮想環境の下地を作成する
※git bashを開きそのまま下記を実行してください。

```言語名:vagrantコマンド
 vagrant box add laravel/homestead
```

gitコマンドより、Homesteadディレクトリを作成してhomesteadを入れる。

```言語名:Gitコマンド
 git clone https://github.com/laravel/homestead.git Homestead
```

cd /Homesteadのディレクトリに入る

```言語名:.bash
cd /Homestead 
```

初期設定ファイルを作成（初めての場合は絶対にする）

```言語名:.bash
./init.sh
#下記コマンドが表示されたらOK
>Homestead initialized!
```

homesteadに移動してyamlファイルを入れる。

```言語名:.bash
cd homestead
vi Homestead.yaml
```
※viは、linux上でテキストを編集するコマンドです。（類似でvimがある）
簡単なコマンド
文字の挿入：「i」
挿入から抜ける：「Esc」ボタン
保存：「:wq!」

yamlファイルの編集

```yaml: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:\homestead\Laravel\
      to: /home/vagrant/code

sites:
    - map: homestead
      to: /home/vagrant/code/homestead/public

databases:
    - homestead

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

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


```
上記で設定したパス「C:\homestead\Laravel\」先のディレクトリを作成する。

```Homestead.yaml
folders:
    - map: C:\homestead\Laravel\
      to: /home/vagrant/code

```

公開鍵と秘密鍵を生成する

```言語名:.bash
cd homestead
mkdir ~/.ssh && cd $_
#鍵作成
ssh-keygen -b 4096
#パスフレーズを入れる・入れないは自由。鍵ファイル名はHomestead.yamlのそれと合わせるようにしてください。
Generating public/private rsa key pair.
Enter file in which to save the key (xxxxx): ~/
Enter passphrase (empty for no passphrase):
#２回パスワード聞かれるので適当にパスワードを入力してください
※忘れないように！！
Enter same passphrase again:
```
上記より生成されているか確認する
下記は確認コマンドより（id_rsa(秘密鍵),id_rsa.pub(公開鍵)）

```言語名:.bash
cd ~/.ssh
```

hostsファイルの書き換え（C:\Windows\System32\drivers\etc\hosts）
権限により編集できないのでテキストファイルで開きなおしてください。
[hostsの書き換え方](https://itbenricho.com/hosts-file-windows7.html)


```hosts:hosts
#下記を追加する一番したに追加する
192.168.10.10 homestead
```

※補足として仮に複数のアプリと連動させたい場合は、192.168.10.10 プロジェクト名 プロジェクト名1
のように引数みたいに記述すればよい。

#Laravelプロジェクトの作成

まずは、vagrant sshで仮想環境に入ります。
※Homestead.yamlファイルを編集したディレクトリ内で下記コマンドを実行してください。

```
vagrant ssh
```

そして、ディレクトリを作成してください。

```
mkdir code
```

codeの内部に入っていください。

```
cd code
```
Laravelを導入します。

```
composer create-project laravel/laravel homestead --prefer-dist
```

#Vagrant実行
vagrantの実行

```hosts:hosts
#下記を追加する
vagrant up
```

※vagrant up (vagrantの起動),vagrant up --provision(起動時に起動),vagrant reload(再起動)
vagrant halt(仮想のシャッドダウン)今はこれぐらいのコマンドでよい。

※yamlファイルを編集した後必ずbkを取ってvagratn up --proviesionをして下さい。（yamlの設定がvagrantに反映されないので）

このようなエラーがでた場合は、gitbashの文字コードをUTF-8からshift-jisでできるようになる。
まあ「encode!」っていってのるので修正しましょー。
※Git Bashを右クリックしてoption→text→文字コード(shift-jis)と変更する。

```hosts:hosts
#下記を追加する
C:/HashiCorp/Vagrant/embedded/gems/2.2.10/gems/childprocess-4.0.0/lib/childprocess/windows/process_builder.rb:44:in `encode!': "\xE8" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to UTF-16LE (Encoding::UndefinedConversionError)
        from C:/HashiCorp/Vagrant/embedded/gems/2.2.10/gems/childprocess-4.0.0/lib/childprocess/windows/process_builder.rb:44:in `to_wide_string'
        from C:/HashiCorp/Vagrant/embedded/gems/2.2.10/gems/childprocess-4.0.0/lib/childprocess/windows/process_builder.rb:67:in `create_environment_pointer'
        from C:/HashiCorp/Vagrant/embedded/gems/2.2.10/gems/childprocess-4.0.0/lib/childprocess/windows/process_builder.rb:28:in `start'
        from C:/HashiCorp/Vagrant/embedded/gems/2.2.10/gems/childprocess-4.0.0/lib/childprocess/windows/process.rb:70:in `launch_process'

```

これで下記URLでLaravelの画面が表示されたら完了です。
http://homestead/

#その他エラーの原因
先にディレクトリを作成せずにvagrant upしてしまった場合は、下記の対応をしたら言いそうです。

もう一つ嵌りがちなのがvagrant up前にローカルに共有フォルダを作成必要があるみたいです？
- vagrant up前にローカルに共有フォルダを作成する。作成していなかった場合はvagrant destroyとvagrant upで再構築してみてください。
- ファイルのパスが間違っている
- ファイル権限の確認
下記ywatanabe358様参考

https://qiita.com/ywatanabe358/items/03c8290fca3ed6e9b6b7

<a id="#Chapter2"></a>
#使ってみてわかったこと
取り敢えず、linuxコマンドに強くなるのかな～と思います。後は、簡単にアプリを配置したり削除できたりする事が可能なので便利だと思います。仮想化の勉強になるのでおすすめです。

[ほとんどこの方を参考にしました](https://qiita.com/ricoirico/items/9745160bcf9983fa30ad)
有難うございます。

追記：できれば間違っている点やおかしな点があれば教えて頂けると幸いです。

<a id="#reference"></a>
#参考文献
- [Laravel公式ドキュメント](https://readouble.com/)
- [ビジネスについて考える](https://bcblog.sios.jp/)
- [IT用語辞典](https://e-words.jp/)
- [ricorico様](https://qiita.com/ricoirico)
- [ywatanabe358様](https://qiita.com/ywatanabe358)