Laravel初心者によるLaravel Sailの導入

Laravel Sailという「LaravelをDocker開発環境で動作させるためのツール」を知ったので導入してみることにしました。
この記事は備忘録も兼ねています。

## 導入理由
docker-compose.yml書かなくていいらしいから。楽そう。

最近職場や自宅でdockerにLaravel環境を構築し勉強を始めました。
しかし、毎回docker-compose.ymlをネットで拾ってきて、勉強のためymlを編集しているので「ぼくのかんがえたさいきょうのdocker-compose.yml」が何かわからない状態になっています。
今回もymlを探していて、その時にLaravel Sailというものを知り、基本的な機能が提供されているので、あれこれ困らずにLaravelをDocker開発環境で構築できそうと思い、導入に至りました。

<br>

## 環境

macOS
（WindowsでもMacでもLaravel Sailの導入は可能です。
自宅環境がmacOSなので、それに準じた記事になっています）

<br>

## 参考サイト
Laravelの公式サイトなので、これが一次ソースになると思います。
https://readouble.com/laravel/8.x/ja/installation.html

<br>

## 導入の流れ

- Laravelプロジェクトを作成

```
curl -s "https://laravel.build/example-app" | bash
```

example-appがプロジェクト名なので、任意の名前に変更しましょう。
下記のようにwith指定をすると、利用するサービスを選択できるようです。
`curl -s "https://laravel.build/example-app?with=mysql,redis" | bash`
とりあえず指定なしの`curl -s "https://laravel.build/example-app" | bash`を入力するとインストール開始。

<br>

- 端末のパスワードの入力

インストールが終わる頃に端末のパスワードを求められるので、自分のパソコンに設定しているパスワードを入力するようです。
https://qiita.com/kai_kou/items/0e773aaf50698dd5a93f

パスワードの入力をし、インストールが終わると下記が表示されました。

```
Thank you! We hope you build something incredible. Dive in with: cd simple-memo-app && ./vendor/bin/sail up

```

<br>

- アプリケーションディレクトリに移動してLaravel Sailを起動

インストール終わりに表示されたコマンドを入力。公式ページにも記載されているので、このコマンドで間違いない。

```
cd example-app && ./vendor/bin/sail up
```

<br>
---
### エラー関係

- zsh: no such file or directory: ./vendor/bin/sail

cd example-app && ./vendor/bin/sail up　で発生
./vendor/bin/sailが無いようです

```
zsh: no such file or directory: ./vendor/bin/sail
```

<br>

https://teratail.com/questions/347252
この記事を参考にし、以下のように試そうとしました。

```
$ composer require laravel/sail --dev
$ php artisan sail:install
$ ./vendor/bin/sail up
```

すると、zsh: command not found: composerが発生

<br>

- zsh: command not found: composer

composerがインストールされていないようなので、下記サイトを参考にインストールを試みます。
https://code-graffiti.com/install-comporser-on-mac/

```
cd ~
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
```

composer -Vでバージョンが出れば成功です。
そして再度example-appフォルダからcomposer require laravel/sail --devから行えばいけました。
php artisan sail:installに何をインストールするか聞かれたので、とりあえずmysqlにしておきました。

---

エラーが解決したので次に進みます。

```
./vendor/bin/sail up
```

をするとコンテナが起動しました。
./vendor/bin/sail up -dの方が個人的に使いやすいです。
docker-compose up -dでも起動できました。
./vendor/bin/sail downがコンテナの停止コマンドです。

`http://localhost`にブラウザでアクセスすると、Laravelの初期画面が表示され・・・

---

### エラー関係
ませんでした。
`http://localhost`にアクセスすると下記画像のようなエラーが出ました。
![スクリーンショット 2021-09-11 19.22.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485388/e6ceb2e6-aad1-3e98-12d2-d0ce9c94d8a8.png)
ちょっとぐぐるとkeyがないということで、Generate App key(赤枠で囲ったところ)を押してみると、今度はreflash showになったので、そこをクリックすると無事にLaravelが立ち上がりました。

---

<br>

## エイリアスの作成
下記のように打って起動できるようにします。

```
% cd example-app
% sail up -d
```

- vimの編集

```
% vim ~/.zshrc
```

- 一番下に追記

```
% alias sail='bash vendor/bin/sail'
```

- 設定を反映

```
% source ~/.zshrc
```

<br>

慣れれば２〜３コマンドで立ち上がりそうなので、爆速っぽいです。

<br>

## phpmyadminの設定

サイトを参考にし下記を追記。
https://qiita.com/kai_kou/items/0e773aaf50698dd5a93f
https://stackoverflow.com/questions/66195113/how-to-add-phpmyadmin-to-laravel-8-sail-docker-compose-yml

ユーザ: sail
パス　: password
かと思います。

ユーザ: root
パス　: password
でも入れるかもしれません。こちらの方が権限が強い？

```docker-compose.yml

    laravel.test:
　　（略）
    mysql:
　　（略）

    // laravel.testやmysqlと同じ深さで追記
    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        links:
            - mysql:mysql
        ports:
            - 8080:80
        environment:
            MYSQL_USERNAME: '${DB_USERNAME}'
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            PMA_HOST: mysql
        networks:
            - sail
```

<br>

## コンテナへの入り方

```
% sail shell
```

<br>

## 初期設定

```config/app.php
    /*
    | Application Timezone
    */
    'timezone' => 'Asia/Tokyo', // ← UTCをAsia/Tokyoに変更


    /*
    | Application Locale Configuration
    */
    'locale' => 'ja', // ← enをjaに変更
```

<br>

## メモ：　Node.jsとnpmのインストール

npmとは、「Node Package Manager」の略で、Node.jsのパッケージを管理するためのシステム。
下記コマンドを打つとバージョンが表示されたので、既にインストールされていました。

```
sail node -v
sail npm -v
```

<br>

## 新しいプロジェクトを作成する時

最初のLaravel Sailの導入はエラーが色々でました。
しかし、一度導入してしまえば設定は終わっているので、下記のコマンドでスムーズに立ち上がります。

```
% curl -s "https://laravel.build/example-app" | bash
% cd simple-memo-app
$ sail up -d
```

Laravel
http://localhost/

phpmyadmin
http://localhost:8080
ユーザ: sail
パス　: password

ユーザ: root
パス　: password

[メモ]
`php artisan migrate`でエラー`SQLSTATE[HY000] [1044] Access denied for `が出た場合は、envファイルをチェック。
phpmyadminに入り、DB名をチェックして修正しましょう。

```/.env
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel // ← DBの名称が違う可能性が高い
DB_USERNAME=sail
DB_PASSWORD=password
```