WSL2でのLaravel開発の流れ（自分用メモ）

自分用の備忘録としてLaravel導入の流れをまとめます。
## 目次
* 環境
* WSLの準備
* Docker Desktopのインストール
* Laravelのプロジェクト作成


## 環境
* Ubuntu 20.04
* WSL2
* PHP 7.4.3
* Laravel9

## WSLの準備
1. Powershellを管理者権限で実行する。
2. 下記のコマンドを実行する。
    ```shell
    wsl --install
    ```
3. PCを再起動する。
4. 再起動すると ubuntu のターミナルが自動的に立ち上がるのでユーザ名とパスワードを設定する。

## Docker Desktopのインストール
1. 下記のURLにアクセスし、ダウンロード -> インストールする。
    https://www.docker.com/products/docker-desktop/
2. 完了したら画面の指示にしたがって windows からログアウト → ログインする（再起動でも OK）。

### Dockerの動作確認
1. Docker Desktopを起動する。

2. 「Setting（画面上部の ⚙ アイコン）」 -> 「General」 -> 「Use the WSL2 based engine」にチェックを入れる．すでにチェックが入っていてユーザが操作できない状態となっている場合があるが，その場合はそのままで OK。
    ![docker_setting01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655355/75ce4585-f44d-2bed-24c9-11629b2f8f80.png)

3. 「Setting（画面上部の ⚙ アイコン）」 -> 「Resources」 -> 「WSL INTEGRATION」の Enable Integration ... にチェックを入れ，「Ubuntu 20.04」のトグルをオンにする。
    * トグルが出てこない場合は PC を再起動する。
    ![docker_setting02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655355/39204120-13a7-c560-9cf3-3609e02e670a.png)

4. Windows ターミナルを Ubuntu で動かす。
    ![terminal_image01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655355/65e20b93-1c80-696a-7b29-a3ac176622e2.png)
    
    ![terminal_image02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655355/af50f26f-d784-c7eb-3f17-94b3d07e7484.png)

5. 下記のコマンドを実行し， docker のバージョンが表示されれば準備完了。
    ```shell
    docker -v
    ```

## Laravelプロジェクト作成
コマンド実行してプロジェクトを作成する。
下記コマンドでプロジェクトのフォルダができる。`PROJECT_NAME` 部分がプロジェクト名となる。
作成された `PROJECT_NAME` フォルダに必要なファイルが全て含まれている。
```shell
curl -s https://laravel.build/PROJECT_NAME | bash
```
```:実行結果
 _                               _
| |                             | |
| |     __ _ _ __ __ ___   _____| |
| |    / _` | '__/ _` \ \ / / _ \ |
| |___| (_| | | | (_| |\ V /  __/ |
|______\__,_|_|  \__,_| \_/ \___|_|

Warning: TTY mode requires /dev/tty to be read/writable.
    Creating a "laravel/laravel" project at "./laratter"
    Installing laravel/laravel (v8.6.2)
      - Downloading laravel/laravel (v8.6.2)
      - Installing laravel/laravel (v8.6.2): Extracting archive
    Created project in /opt/PROJECT_NAME
    > @php -r "file_exists('.env') || copy('.env.example', '.env');"
    Loading composer repositories with package information
    Updating dependencies
...
```
### 権限の変更
この方法でプロジェクトを作成するとエディタで操作する場合に権限で引っかかる場合があるので権限を変更する。
```shell
sudo chmod -R 777 PROJECT_NAME
```

### 起動
仮想コンテナを立ち上げる。
```shell
cd PROJECT_NAME
./vendor/bin/sail up -d
```

### 動作確認
ブラウザで`localhost`にアクセスし、下記画面が表示されればOK。
![laravel-firstview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655355/a481c62a-7743-08af-723b-e94652177c74.png)

### 終了時
仮想マシン（コンテナ）を終了させる場合は以下のコマンドを実行する。

コンテナが立ち上がっていると他のアプリケーションが立ち上がらなくなることがあるため，開発が終わったら下記コマンドで終了させること。
```shell
./vendor/bin/sail down
```

## エラーが出たら

### PCを再起動
なんか解決する時あるよね。

### Docker Desktopのバージョンアップ
Docker Desktop を以前からインストールしていた場合，バージョンが古いと起動しない場合はあるので最新バージョンにアップデートを行う。

### ファイヤーウォールを無効化する
途中でエラーが出る場合はファイヤーウォールで必要なファイルのダウンロードができていない場合がある。その場合は一旦ファイヤーウォールを無効化して、再度プロジェクト作成コマンドを実行する。

### M1 の Mac で ERROR: no matching manifest for linux/arm64/v8 in the manifest list entries が出る
エディタなどでdocker-compoes.ymlを開き，下記を追加する，

```yml:docker-compose.yml
platform: "linux/x86_64"
```
追記場所はこのへん．
```yml
mysql:
  image: "mysql:8.0"
  platform: "linux/x86_64"
```
>参考：https://neoighodaro.com/posts/3-running-laravel-and-docker-on-the-apple-mac-m1

### いけてそうだけどブラウザで表示できない
アクセスするときの URL を `https://localhost` から `http://localhost` に変更

## まとめ
以上、私のLaravel環境開発の流れをまとめてみました。
初心者の方でも一つ一つ丁寧にやればできると思います。