Laravel8だよ！全員集合！～まずはHomesteadからだよ編～

久々にLaravelでプロジェクト作ってみようと思ったら、あっという間にVer8だってよ。
聞けば、半年ごとにバージョンアップするそうな。そんなの追いつけねーよ。
そうは言っても放置しておけばおいらもいずれ時代遅れの技術者になっちまう。
考えてみたら、Homesteadのところは省略して書いてたっけ。そんなら、ついでにここから書いていこう。
タイトルコールは昭和の感じでね。

# これからやること

この記事では、次のことをやるよ。
・Homesteadをインストールする
・Laravelのプロジェクトを作成する
・DBを私好みに設定する

ちなみに環境はこんな感じ。
Windows10
VirtualBox 6.0.20 →Homesteadは2020年10月25日時点でVirtualBox6.0以上では動かないので注意。最新版をインストールしてしまった人は、泣く泣くダウングレードしよう。
Vagrant 2.2.10
こいつらは自力で何とかしてくれ。特にWindows10は他人がフォローしようがないからね。

準備ができた人かられっつとらい。

# Homesteadをインストールする

基本的に手順は変わってないよ。[公式ページ](https://readouble.com/laravel/8.x/ja/homestead.html)も見てみてね。

## 1.laravel/homesteadを追加しよう

VagrantにhomesteadのBoxを追加するよ。
1回やっておけば、後は何個だって仮想環境作れるよ。
コマンドプロンプトから、次のコマンドを打つんだ。

```cmd
> vagrant box add laravel/homestead
```

そうすると、「どのプロバイダーでやるのさ？」みたいなことを英語で聞かれるので、virtualboxを指定しよう。指定は数字でするから、「3」を入力してenterしよう。

```cmd
C:\Users\eby>vagrant box add laravel/homestead
==> box: Loading metadata for box 'laravel/homestead'
    box: URL: https://vagrantcloud.com/laravel/homestead
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) parallels
3) virtualbox
4) vmware_desktop

Enter your choice: 3
```

そうすると、ダウンロードしているようなメッセージが表示される。結構時間かかるから、気長に待ってあげてね。
完了すると、こんなメッセージが出る。

```
==> box: Successfully added box 'laravel/homestead' (v10.1.1) for 'virtualbox'!
```

これでBoxが準備できた。

## 2.Homesteadをインストールする

今後はHomesteadをgithubからクローンする。さっきのが外枠で、こっちが中身みたいなものと思っておけばいいか。
コマンドは、Homesteadのフォルダーを作りたいフォルダーに移動してから実行する。

```cmd
> git clone https://github.com/laravel/homestead.git lara8test
```

このコマンドだと、実行したフォルダーの下に「lara8test」というフォルダーを作成し、そこにhomesteadのもろもろをクローンしてくることになる。
実行すると、こんな感じのメッセージが出てコマンドプロンプトに戻る。

```
Cloning into 'lara8test'...
remote: Enumerating objects: 47, done.
remote: Counting objects: 100% (47/47), done.
remote: Compressing objects: 100% (43/43), done.
remote: Total 5043 (delta 23), reused 24 (delta 3), pack-reused 4996
Receiving objects: 100% (5043/5043), 1.18 MiB | 1.36 MiB/s, done.
Resolving deltas: 100% (3118/3118), done.
```

## 3.初期設定をしよう

クローンが終了したら、作成したフォルダに移動して、init.batを実行する。

```cmd
> cd lara8test
> init.bat
```

こんなメッセージが表示されて、すぐ終了する。

```
        1 個のファイルをコピーしました。
        1 個のファイルをコピーしました。
        1 個のファイルをコピーしました。
Homestead initialized!
```

init.batを実行するとHomestead.yarmが作成される。homestead.yarmには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
      to: /home/vagrant/code

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

databases:
    - homestead

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

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

よく変えたくなるところはこんなもんじゃなかろうか。
・ip
homesteadのipアドレスを指定できる。変えなくても問題ないが、複数の環境を作ったりする人は好きなipに変えるといいさ。
ちなみに複数の仮想環境を作成するときは、「name」というパラメータを追加すると、仮想環境の名前を指定することができる。書き方は「name: lara8test」みたいな感じで。:の後ろにスペース入れないと認識しなかった気がする。
・folders
laravelのプロジェクトがあるところを指定する。もうlaravelで開発している人はおなじみだね。
敢えて変える必要はない。codeの中に複数のプロジェクトを作っても、ここで指定するのはcodeまでで問題ないです。
・sites
プロジェクトの名前とサイトのある場所を指定する。サイトの名前は好きなようにつけてよい。今回はlara8.testにしておこう。サイトのある場所は、さすがにプロジェクト内のpublicフォルダを指定する。codeの下にプロジェクトフォルダを作成する場合はcodeとpublicの間に作成したプロジェクトフォルダを書くこと。
今回はlara8testというプロジェクトを作るつもりなので、下記の設定になる。

```
sites:
    - map: lara8.test
      to: /home/vagrant/code/lara8test/public
```

databases:
データベースを指定する。放っておくとhomesteadで作成されるが、普通自分でDB作るので、ここは自分で作成するDB名に変えておく。今回はlara8testか。

```
databases:
    - lara8test
```

features:
ここではいろんなオプションをインストールするよう指定できる。デフォルトでは4つしかパラメータが指定されてないけど、実はいろいろ指定できる。詳しくは[公式マニュアル](https://readouble.com/laravel/8.x/ja/homestead.html)見てね。
ここでmysql:をtrueにしておかないと、上に書いたdatabasesで設定されたパラメータが効かないから、注意だ。

だいだいこんなもんか。
必要なところを直したら、homestead.yamlを保存。

あと、テストをするときにsitesのmapで指定した名前でサイトにアクセスしたいときは、hostsにもipとmapで設定した名前を指定しておくこと。

```hosts
192.168.10.10   lara8.test
```

## プロジェクトを作成する

個人的には、これまでプロジェクト作るときってcomposer create-projectでやっていたけれど、[公式マニュアル](https://readouble.com/laravel/8.x/ja/installation.html)のインストールを見ると、インストーラをダウンロードしてやる方法が最初に書いてあるので、それでやってみる。composerはインストールしておいてね。

### 1.laravelインストーラをダウンロードする

次のコマンドでlaravelのインストーラをダウンロードします。

```cmd
> composer global require laravel/installer
```

なにやらいろいろなものがインストールされ、しれっと終わる。
終わったらインストーラを使ってインストールする。
プロジェクトを作成するフォルダーに移動して、laravel newコマンドを実行する。
ちなみにプロジェクトを作成するフォルダは、homestead.yamlのfoldersで指定したフォルダだからね。ここに作らないとhomesteadに認識されないよ。

```cmd
> laravel new lara8test
```

このコマンドだと、codeの下にlara8testっていうフォルダを作成して、そこにlaravelをインストールします。
さっきよりかなり長いメッセージが出力されて、最後に「Application ready! Build something amazing.」というメッセージが出力されてインストールが終了する。

### 2.設定する

laravelの設定は.envというファイルに設定されている。
基本変更しなくていいが、DBは微妙な設定しかされていない。
デフォルトでは下記の設定がされている
DB_DATABASE→基本的にhomestead.yamlのdatabasesが設定される。
DB_USERNAME→rootが設定される。
DB_PASSWORD→何も設定されていない。
でも、Homestradが自動的に設定するユーザー/パスワードはroot/secretだから、DB_PASSWORDにsecretを入れておかないとlaravelからDBにアクセスできない。
業務とかで使うとき、別のユーザー/パスワードを設定したいときは、mysqlでもユーザー/パスワードを設定してね。

# 起動する

ここまで設定したら、homesteadをクローンしたフォルダに移動して、vagrant upを実行しよう。

```cmd
> vagrant up
```

なにやら長い呪文が唱えられて、コマンドプロンプトに戻ったら、laravelが立ち上がっているはず。ブラウザでsitesで設定した名前かipアドレスを入力して、laravelのサイトを立ち上げてみよう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137858/8ab836a1-ce3e-8628-93ac-fad6ad324930.png)

なんだか前よりしゃれた感じ。てか前はもっとポータルっぽいイメージだったけど、今回は誤って英語サイトに入っちまった感じ？
メニューは独自で作らないといけないね。

SSHも自動で設定されているから、terateamとかでアクセス可能。ユーザIDとパスワードは「vagrant」で入れるよ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137858/cf1c86f7-53a0-bdfd-9da8-81caf4c0e8c3.png)

このままDBも確認してみよう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137858/8d29d9f9-b1cc-1752-96e1-c81711f98e87.png)

lara8testもできているね。
これで環境構築完了！
次はみんな大好き認証処理を取り込むよ。

# APPENDIX　ないしょのはまりポイント

記事ではしれっと書いたけど、実はDB作成するところで結構はまった、というか勘違いなのか、迷走しましたよ。
前はユーザも自分で指定したのを設定してくれたような気がして、laravelの.envで指定したユーザーでmysqlにアクセスしに行ったが、一向につながらない。しかも指定したDBも作られない。
homesteadでmysqlを作っているらしいところを見てみたら、ユーザーとパスワードは固定だし、databasesに指定したDBはfeaturesのmysqlをtrueにしないと設定してくれなかった。mysqlはデフォルトでインストールされるので、mysqlはあるけど指定されたテーブルがない、ってなって、「？」山盛りでしたよ。
DBはユーザー、パスワードさえわかれば、後は自力で作っていけばいいので、実務で構築するときはここまでこだわらないんだろうな。
興味のある人は、はなから自分で定義したユーザー、パスワードで設定するようhomesteadをカスタマイズしてみてね！

それじゃあ、またね。ちゃお！