WindowsでSail環境を構築する方法

## はじめに
仕事で急遽Laravelを使用することになったため、学習用にLaravelの開発環境を構築しました。今回はWindowsでLaravel Sail環境を構築するための手順を記していきたいと思います。SailはDockerを使用し簡単に環境構築することができ、非常に便利と思います。

:::note info
Laravel Sailについて
Sailは開発に必要なPHPやDB等、環境構築のためのDocker設定を自動で行ってくれます。Laravelプロジェクトの作成、Laravelの動作に必要な初期設定も自動で行われるため、セットアップがスムーズに完了する点が最大のメリットといえます。
:::

## 環境構築手順
### 1.WSLインストール
WSLが未インストールの場合は、Powershellを管理者として実行し、
インストールコマンドを実行します。
```powershell:WSLインストール
wsl --install
```
:::note info
WSLのインストールが必要な理由
WSLは、Windows上でLinuxを動作させるための互換レイヤーです。
Sailは、LinuxベースのDockerコンテナで動作するためWSLのインストールが必須となります。
:::
インストールコマンド実行後にWindowsの再起動を促される場合と促されない場合があるようですが、促された場合は再起動をします(促されなければそのまま進めてOKです)。

WSLの設定画面が自動で開かれますので画面の指示通り入力してください。
・Enter new UNIX username：任意のユーザー名を入力
・New password　　　　　：任意のPWを入力。入力中のPWは画面上に表示されない。

```powershell:以下のような表示でWSLのセットアップは完了です
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 5.15.153.1-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Wed Nov 13 23:48:04 JST 2024

  System load:  0.19                Processes:             55
  Usage of /:   0.1% of 1006.85GB   Users logged in:       0
  Memory usage: 19%                 IPv4 address for eth0: 172.24.136.54
  Swap usage:   0%


This message is shown once a day. To disable it please create the
/home/user/.hushlogin file.
```
### 2.Docker Desktopを起動
Docker Desktopが未インストールの場合はインストールし、起動する。
以後のLaravelプロジェクト環境のインストールコマンド実行時には、
Dockerの起動が必須となりますので注意してください。

https://www.docker.com/get-started/

またSail環境の構築にはWIndows Terminalの利用が推奨されているようです。
私はPowershellを使用しており、必須ではないのですが念のためダウンロードページのリンクを置いておきます。

https://www.microsoft.com/ja-jp/p/windows-terminal/9n0dx20hk701
### 3.ターミナルでプロジェクト作成コマンドを実行
ターミナルを起動しUbuntuタブを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519424/f734e97c-a511-4a41-ec96-1897e6bbcaab.png)

Ubuntuタブでプロジェクト作成コマンドを実行します。
```powershell:プロジェクト作成コマンド実行
# ホームディレクトリ(ユーザーのルートディレクトリ)に移動
# 初期設定や新しいプロジェクトのインストール時には、誤って重要なディレクトリで実行することを防ぎ、整理された構造でプロジェクトが作成されるようにするために、最初にホームディレクトリへ移動するのが一般的な
cd
# 以降の実行にはDocker Desktopの起動が必要

# Laravelの新PJ環境を構築するためのインストールスクリプトをダウンロードし、実行
# 初回のみ必要なファイルのDL等に10分前後かかる
curl -s "https://laravel.build/[プロジェクト名]" | bash

# 上記curlコマンド実行で Docker is not running エラーが出た場合の対処
# wslを再起動。その後再度curlを実行。
wsl --shutdown

# -------------------------------------------------------------------------
# デフォルトでは不要なものもDLされるため[PJ名]?with=で必要なサービスのみDL可能
# 利用可能なサービスは、mysql、pgsql、mariadb、redis、memcached、meilisearch、minio、selenium、mailpit
# デフォルト:mysqk、redis、meilisearch、mailpit、selenium
# -------------------------------------------------------------------------

# 下記表示でPJの作成完了
Thank you! We hope you build something incredible. Dive in with: cd [PJ] && ./vendor/bin/sail up
```

### 4.作成されたプロジェクトをエディタで開く
プロジェクトをエディタで開きます。今回エディタはVScodeを使用します。
VSCodeは拡張機能「Remote Development」の利用によってWSL経由でプロジェクトを開くことが可能となります。

https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack

:::note info
WSL経由を推奨する理由
WSLを経由することなくプロジェクトフォルダを開くことは自体は問題なく可能です。しかし、Windowsファイルシステムはファイル更新に時間がかかるため、高速なLinuxファイルシステム上で直接処理を行えるWSLを経由することを推奨します。
:::

拡張機能のインストールが完了したらターミナル(Ubuntu)で `code [プロジェクト名]/` を実行します。これによってVSCodeでプロジェクトフォルダが開かれます。
※WSL経由でPJを開いている場合はVSCode左下に「WSL:Ubuntu」と表示されます。

### 5.開発環境構築と起動コマンド実行
VSCode上部のタブからターミナルを起動し、
コマンド `./vendor/bin/sail up -d` を実行します。 

ブラウザでlocalhostにアクセスできることを確認してください。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519424/e951f53f-25f7-815f-82ba-b5b2e34babf7.png)


## まとめ
WindowsでSail環境を構築するための手順をまとめてみました。
あとはデフォルトDBやSailコマンド(エイリアス)、ロケールの設定などを行ってPJの意向に合うようカスタマイズしてみてください。

## 参考
https://www.udemy.com/course/laravel9/?srsltid=AfmBOopGWpbDItQIn41Hd6enA3o17lI2UPGuytqvNvYcSDpGdzKjE57n