Laravel Sailを利用したubuntuでのローカル環境構築

# はじめに
自己学習用にLaravelを使ったCRUD処理のあるアプリ作成のため、ローカルの環境構築してみました。今回は公式ドキュメントに記載のある、Laravel Sailを利用してみました。その際の作業ログ的な記事となります。

# 環境
- Windows11
- WSL2
- ubuntu
- Docker Desctop

# 参考にした記事
- [Laradock?もう使わないよ?? – Laravel Sail を使ってみた](https://don-bu-rakko.com/laravel-sail-introduction/)
- [Laravel 8.x インストール:公式ドキュメント](https://readouble.com/laravel/8.x/ja/installation.html)
- [Laravel 8.x Laravel Sail:公式ドキュメント](https://readouble.com/laravel/8.x/ja/sail.html)
- [【Linux】エイリアスの設定方法](https://qiita.com/_ydah/items/18d242b632e5486fe912)
- [エイリアス 【alias】:IT用語辞典](https://e-words.jp/w/%E3%82%A8%E3%82%A4%E3%83%AA%E3%82%A2%E3%82%B9.html)

ありがとうございます！

# Laravel Sailとは
[公式ドキュメント](https://readouble.com/laravel/8.x/ja/installation.html)より
>LaravelはDockerを利用する、Laravelプロジェクトを実行できる組み込みソルーションであるSailを提供しています。

>Laravel Sailは、LaravelのデフォルトのDocker構成と、操作するための軽量のコマンドラインインターフェイスです。 Sailは、Dockerの経験がなくても、PHP、MySQL、Redisを使用してLaravelアプリケーションを構築するために良い出発点を提供しています。

公式ドキュメントということで安心感がありますし、簡単そうな気がします、、、！

# Laravelプロジェクトを作成する
ターミナル（ubuntu）で以下のコマンドを実行します。
```
 curl -s https://laravel.build/example-app | bash
 ```
※example.appの部分は任意のプロジェクト（ディレクトリ）名にできます。
少し時間がかかります。

# Laravel Sailを起動する
プロジェクト作成後、作成したディレクトリに移動します。
``` 
cd example-app
 ```
その後Laravel Sailを起動します。
``` 
./vendor/bin/sail up
 ```
初回は数分かかります。
構築完了後```http://localhost```を確認するとLaravel起動画面が確認できました！

# おまけ
## Laravel Sailを起動するコマンドのエイリアスを登録する
#### エイリアスとは
[エイリアス 【alias】:IT用語辞典](https://e-words.jp/w/%E3%82%A8%E3%82%A4%E3%83%AA%E3%82%A2%E3%82%B9.html)より
>エイリアスとは、偽名、別名、通称などの意味を持つ英単語。ITの分野では、ある対象や実体を、複数の異なるシンボルや識別子で同じように参照できるする仕組みを指す。別名

長いコマンドや複数のコマンドを省略したコマンドで同じように実行できるようにするもの、みたいです。

### 設定方法
```vendor/bin/sail```と入力する代わりに、```sail```と入力するだけでSailコマンドを実行できるように設定します。

まず、以下のコマンドを実行して```.bashrc```を開きます。
```
vi ~/.bashrc
```
```.bashrc```ファイルに以下の内容を追加します。

```.bashrc
# Laravel Sail Execute
alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'
```
※[vim コマンド集 :Qiita](https://qiita.com/ktoyod/items/0a8491cdb6c0191ab0cc)
↑vimのコマンド操作に慣れてないため、こちらの記事を参考にvimファイルを編集しました。

ubuntuを再起動し、作成したディレクトリに移動してから```sail up```と実行するとLaravel Sailが起動するようになりました。

## データベースをMySQLからPostgresへ変更する
Laravel SailのデフォルトのデータベースはMySQLですが、今回はPostgresを使用したかったため、下記記事を参考にして変更しました。
[Laravel8 を標準装備の Sail + Dockerで開発環境を作る際にMySQLを使わずPostgresに変更してみる](https://monmon.jp/1044/were-going-to-change-to-postgres-instead-of-using-mysql-in-building-a-development-environment-with-larva8-the-standard-sail-docker/)
docker-compose.ymlと.envファイルの変更でできました！

#### SQLSTATE[08006] [7] could not translate host name "postgres" to address: Temporary failure in name resolution
.envのDB_HOSTをpostgresへ変更後、```php artisan migrate```をしたところ、上記のエラーが発生してしまいました。
##### 解決策
①
[Laravel SailでMySQLからPostgresに変更する方法](https://wptech.kiichiro.work/4771lv37ot/)
↑記事を参考に、```sail artisan sail:install --with=pgsql```を実行し、下記のようにDocker-compose.ymlの修正を行いました。
```yml
pgsql:
        image: 'postgres:13'
        ports:
            - '${FORWARD_DB_PORT:-5432}:5432'
        environment:
            PGPASSWORD: '${DB_PASSWORD:-secret}'
            POSTGRES_DB: '${DB_DATABASE}'
            POSTGRES_USER: '${DB_USERNAME}'
            POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}'
        volumes:
            - 'sail-pgsql:/var/lib/postgresql/data'
        networks:
            - sail
        healthcheck:
            test: ["CMD", "pg_isready", "-q", "-d", "${DB_DATABASE}", "-U", "${DB_USERNAME}"]
```
これだけではマイグレーションできませんでした、、、。

②
.envのDB_HOSTをpgsqlへ変更しました。
※sailの場合、postgresではうまくいかないみたいです、、、
```.env
DB_HOST=pgsql
```
マイグレーションできました！



## MailHogを確認する
```localhost:8025```で確認できます！

（.envファイルを確認すると、```MAIL_PORT=1025```と記載があったので、```localhost:1025```を見てみましたが、このページは動作してませんとのことで焦りました）

# おわりに
初めて自力で最初から環境構築できました！自分で調べながら作業することの積み重ねが大切だと感じました。これから今回構築した環境を使ってアプリ作りをし、また記事を書いていきたいと思います。