windowsでwsl2 + DockerでLaravelプロジェクトの開発を始めるためにやったこと

## 参考記事

- **WindowsでWSL2を使って「完全なLinux」環境を作ろう！**
https://www.kagoya.jp/howto/it-glossary/develop/wsl2_linux/
- **windowsにLinuxを入れてDocker環境を構築する**
https://zenn.dev/giana12th/articles/6cc6540e0dd306
- **WSL2のインストールを分かりやすく解説【Windows10/11】**
https://chigusa-web.com/blog/wsl2-win11/
- **Ubuntu on WSL2でのDocker Engineの最短インストール手順**
https://qiita.com/nujust/items/d7cd395baa0c5dc94fc5
- **WSL2（Ubuntu）へGitを導入**
https://continue-cloud.net/wsl2-03/
- **（おまけ）【Docker Desktop】Windowsにインストール**
[https://chigusa-web.com/blog/windowsにdockerをインストールしてpython環境を構築/](https://chigusa-web.com/blog/windows%E3%81%ABdocker%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6python%E7%92%B0%E5%A2%83%E3%82%92%E6%A7%8B%E7%AF%89/)

## 実現したこと

Docker Desktopを使用せずに、windowsでwsl2をインストールしてlinux環境へdockerをインストール

## やったこと

### windowsへwsl2のインストール

windows 11 ならコマンドプロンプトかpowershellで以下を実行

```bash
$ wsl --install
```

### **Linuxの更新**

```bash
$ sudo apt update && sudo apt upgrade
```

### **Docker Engineのインストール**

```bash
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```

### **ルート以外のユーザーでdockerコマンドを利用する設定を加える**

```bash
$ sudo usermod -aG docker $USER
```

### **systemdの有効化**

```bash
$ sudo vi /etc/wsl.conf
```

`wsl.conf` 内に以下を記述する

```
[boot]
systemd=true
```

（自分の場合はすでに書き込まれていた）

### **WSLの再起動**

ここまでの設定を反映させるため、WSLを再起動する。
WSLを閉じ、PowerShellで以下のコマンドを実行。

```bash
$ wsl --shutdown
```

### **Dockerの実行確認**

再度wslを起動して以下のコマンドを実行

```bash
$ docker run hello-world
```

以下のようなメッセージが表示されればインストール完了

```
Hello from Docker!
This message shows that your installation appears to be working correctly.
```

↑ここまでがwsl2 + Dockerのインストール

↓ここからはLaravelプロジェクトの配置

※自分の環境ではwsl2をインストール時にデフォルトでubuntuがインストールされたため以下wsl2での操作をubuntuと表記
※今回はgithubにあるLaravelプロジェクトをcloneして配置

### ubuntuの起動

windowsの「すべてのアプリ」などからubuntuを起動するか、win + Rでcmdを起動したあとタブからubuntuを選択して起動する

### ubuntuへgitのインストール

1. ubuntuのcliで以下を実行

```bash
$ sudo apt-get install git
```

1. ユーザ情報の設定

```bash
$ git config --global user.name ＜GitHubユーザ＞
$ git config --global user.email ＜GitHubへ登録したメールアドレス＞
```

1. デフォルトのエディタをVSCodeに設定

```bash
$ git config --global core.editor "code --wait"
```

### リポジトリをclone

1. ubuntuの/home/(ユーザー名)/以下でプロジェクト用のフォルダを作成 + カレントディレクトリを移動
2. URL経由でリポジトリをclone（※sshの設定が面倒だったのでURLを使用しているだけなのでURL経由が必須ではないです）
3. リポジトリ内の `docker-compose.yml` ファイルを使ってDockerコンテナを作成・起動

※この時点ではubuntuに `docker-compose` がインストールされていないと思うので以下を実行する

```bash
$ sudo apt update
$ sudo apt install docker-compose
```

その後、以下を実行する

```bash
$ docker-compose up -d
```

あとはlaravelで `composer install` を行うことになると思うが、それらのコマンドはコンテナ内で実行する

コンテナ内に入る方法は他の記事を参照してください

https://zukucode.com/2019/05/docker-bash.html

### vscodeの設定

ここまででwsl2 + Docker環境にLaravelプロジェクトを配置することができたが、vscodeでubuntu内のファイルにアクセスするには以下の拡張機能の追加が必要だった

`Remote Development` 

### Laravelのログファイルへアクセス権限付与

これでようやく作業が開始できるかと思ったが、ブラウザでlocalhostへアクセスしてみると

`The stream or file "/var/www/laravel-v10-starter/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log:` 

というエラーが発生してた。

chatGPTに投げてみると

- このエラーメッセージは、Laravelのログファイル**`laravel.log`**に書き込みを試みた際に、パーミッション（権限）が不足しているために発生しています。Laravelでは、アプリケーションの実行中に様々な情報をログファイルに記録しますが、このファイルやディレクトリに適切な書き込み権限がないと、上記のようなエラーが出ます。
    
    

ということだった。

そこでエラーの解決方法として以下を実行した

**ステップ 1: 所有者の変更**

```bash
$ sudo chown -R www-data:www-data storage bootstrap/cache
```

**ステップ 2: 書き込み権限の設定**

```bash
$ sudo chmod -R 775 storage bootstrap/cache
```

これでエラーが解消され、ようやく開発が開始できた。