【23年9月】Laravel10をとりあえず使いたい時のとりあえずの設定をする

## 実行環境

| OS | macOS Ventura 13.5 |
| --- | --- |
| shell | zsh 5.8.1 (x86_64-apple-darwin21.0) |
| middleware | Docker(24.0.6) |
| framework | laravel(10.20.0) |
|  | vite(4.4.9) |

:::note info
検証日: 2023/09/25
:::

## 本記事で得られる結果

- 日本向けの最低限の設定を行った Laravel10 動作環境
  - Laravel(10.20.0)
  - PHP(8.2.9)
  - MySQL(8.0.34)

## 前提

- Dockerインストール済み

## 手順

### Laravel

1. 公式を参照 (macOS向け)

    https://laravel.com/docs/10.x#getting-started-on-macos

1. インストール

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

    > `example-app` はプロジェクト名なので変更可能です

2. 実行確認

    ```shell
    cd example-app

    ./vender/bin/sail up
    ```

    > `Control + C` で終了

    - http://localhost からアクセス

3. エイリアス設定

    ```shell
    vim ~/.zshrc
    ```
    ```diff_shell:.zshrc
    + alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'
    ```

### タイムゾーンや文字コードの変更

1. Docker をカスタマイズ可能にする

    ```shell
    sail artisan sail:publish
    ```

2. コンテナのタイムゾーン設定

    ```diff_shell:docker/8.2/Dockerfile
    - ENV TZ=UTC
    + ENV TZ='Asia/Tokyo'
    ```

3. MySQLの文字コード設定

    日本語を利用できるようにするために初期設定ファイルを作成する

    ```shell
    touch docker/8.2/my.cnf

    vim docker/8.2/my.cnf
    ```

    ```diff_shell:docker/8.2/my.cnf
    + [mysqld]
    + character-set-server = utf8mb4
    + collation-server = utf8mb4_bin
    + 
    + [client]
    + default-character-set = utf8mb4
    ```

    docker-compose.ymlへパスを追加

    ```diff_shell:docker-compose.yml
    mysql:
        image: 'mysql/mysql-server:8.0'
        ports:
            - '${FORWARD_DB_PORT:-3306}:3306'
        environment:
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ROOT_HOST: '%'
            MYSQL_DATABASE: '${DB_DATABASE}'
            MYSQL_USER: '${DB_USERNAME}'
            MYSQL_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ALLOW_EMPTY_PASSWORD: 1
        volumes:
            - 'sail-mysql:/var/lib/mysql'
    +       - './docker/8.2/my.cnf:/etc/my.cnf'
            - './docker/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
    ```

    > `docker/8.2/Dockerfile` を利用する想定だがアップデート次第では変更される場合があるので読み替えてください

### 日本語ローカライズ

1. 設定ファイルの変更

    ```diff_php:config/app.php
    - 'locale' => 'en',
    + 'locale' => 'ja',

    - 'fallback_locale' => 'en',
    + 'fallback_locale' => 'ja',

    - 'faker_locale' => 'en_US',
    + 'faker_locale' => 'ja_JP',
    ```

2. 日本語ファイルの追加

    ```shell
    sail artisan lang:publish
    ```

    ```shell
    sail composer require laravel-lang/lang

    sail artisan lang:add ja
    ```

    > `laravel-lang/lang:^13.2` が入る想定  
    > `13.2` より低い場合に `lang:add` ができない場合がある

3. Laravel のタイムゾーン設定

    ```diff_php:config/app.php
    - 'timezone' => 'UTC',
    + 'timezone' => 'Asia/Tokyo',
    ```

### 動作確認

```shell
sail build --no-cache

sail up -d
```

- http://localhost からアクセス

## 備考

- ローカライズの注意

    ```shell
    # https://laravel-lang.com/installation/ より

    sail composer require laravel-lang/common

    # laravel-lang/lang が先に入っていると競合する場合がある
    ```

- 最初からLaravelインストールするときにロケール指定できると楽ですね

    ```diff_shell:例えば
    - curl -s "https://laravel.build/example-app" | bash
    + curl -s "https://laravel.build/example-app?lang=ja" | bash
    ```