Dockerを使って構築した最強のLaravel開発環境をアレンジしてみた！

# はじめに
Laravelの環境構築をする際、素晴らしい環境構築の記事がありいつも参考にさせて頂いてます。
[最強のLaravel開発環境をDockerを使って構築する](https://qiita.com/ucan-lab/items/5fc1281cd8076c8ac9f4)

今回、上記で構築した環境を自分なりにアレンジしてみたいと思います。

施すアレンジは以下になります。

- docker環境の初期エイリアスの設定方法
- DB情報の変更方法


## docker環境の初期エイリアスの設定方法
docker環境を作成した時点では環境にはエイリアス(ailas)の設定がされていません。
作成した段階でエイリアスを使えるようにするにはDockerfileファイルにエイリアスを記述する必要があります。

infra/docker/php/Dockerfileに下記のように追加したいエイリアスを一番下に追加して下さい。

```Dockerfile:infra/docker/php/Dockerfile
RUN echo "alias ..='cd ..'"  >> ~/.bashrc && \
  echo "alias ...='cd ../..'"  >> ~/.bashrc && \
  echo "alias ll='ls -l'"  >> ~/.bashrc && \
  echo "alias lla='ls -la'"  >> ~/.bashrc && \
  echo "alias ..='cd ..'"  >> ~/.bashrc && \
  echo "alias ...='cd ../..'"  >> ~/.bashrc && \

# laravel
  echo "alias art='php artisan'"  >> ~/.bashrc && \
  echo "alias arts='art serve'"  >> ~/.bashrc && \
  echo "alias artr='art route:list'"  >> ~/.bashrc && \
  echo "alias migrate='art migrate'"  >> ~/.bashrc && \
  echo "alias seed='art db:seed'"  >> ~/.bashrc && \
  echo "alias rollback='art migrate:rollback'"  >> ~/.bashrc && \
  echo "alias fresh='migrate --fresh'"  >> ~/.bashrc && \
  echo "alias cc='php artisan config:clear && php artisan cache:clear && php artisan view:clear'"  >> ~/.bashrc && \

# git
  echo "alias gb='git branch'"  >> ~/.bashrc && \
  echo "alias gc='git checkout'"  >> ~/.bashrc && \
  echo "alias gcd='gc develop'"  >> ~/.bashrc && \
  echo "alias gcr='gc release'"  >> ~/.bashrc && \
  echo "alias gcs='gc stage'"  >> ~/.bashrc && \
  echo "alias gs='git status'"  >> ~/.bashrc && \
  echo "alias gp='git pull'"  >> ~/.bashrc
```

追加したら、Dockerfileの変更を反映させるために一度buildし直します。

```
$ docker-compose build app
$ docker-compose up -d
```

これでdockerコンテナ内でエイリアスコマンドが使えるはずです。


# DB情報の変更方法
環境を作った段階ですでにmysqlのDB情報はデフォルトで設定されています。
DB名を変えたい！ポートを自分で指定したい！という場合はdocker-compose.ymlファイルを編集する必要があります。

以下の例ではホストのDBポートを3331、DB名をkondateにしたいと思います。

```yml:docker-compose.yml
version: "3.9"
volumes:
  php-fpm-socket:
  db-store:
services:
  app:
    build:
      context: .
      dockerfile: ./infra/docker/php/Dockerfile
    volumes:
      - type: volume
        source: php-fpm-socket
        target: /var/run/php-fpm
        volume:
          nocopy: true
      - type: bind
        source: ./backend
        target: /work/backend
    environment:
      - DB_CONNECTION=mysql
      - DB_HOST=db
      - DB_PORT=3306
      - DB_DATABASE=${DB_NAME:-kondate} #ここを書き換える
      - DB_USERNAME=${DB_USER:-phper}
      - DB_PASSWORD=${DB_PASS:-secret}

-----------------------------------
略
-----------------------------------

  db:
    build:
      context: .
      dockerfile: ./infra/docker/mysql/Dockerfile
    ports:
      - target: 3306
        published: ${DB_PORT:-3331} #ホスト側のポート
        protocol: tcp
        mode: host
    volumes:
      - type: volume
        source: db-store
        target: /var/lib/mysql
        volume:
          nocopy: true
    environment:
      - MYSQL_DATABASE=${DB_NAME:-kondate} #ここを書き換える
      - MYSQL_USER=${DB_USER:-phper}
      - MYSQL_PASSWORD=${DB_PASS:-secret}
      - MYSQL_ROOT_PASSWORD=${DB_PASS:-secret}
```

docker-compose.ymlファイルを反映させるために以下のコマンドを実行する

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

この状態ではまだdatabaseとそれに伴うユーザーの権限がないので
DBのコンテナに入って、DBを作成とユーザーに権限を付与します。

```
# ｄｂコンテナに入る
$ make db

# mysqlにログイン(rootユーザーで入る)
bash-4.2# mysql -u root -p
Enter password:secret

# DB作成
mysql> create database kondate;

# phperユーザーに権限を与える
mysql> GRANT ALL ON kondate.* TO phper;

# phperユーザーの権限を確認
mysql> show grants for phper;
```

これでDBの作成とユーザーの権限の付与は完了です。

tableプラスなどDBクライアントツールで以下の情報で接続可能です。

```
host:127.0.0.1
username:phper
port:3331
database:kondate
password:secret
```

appコンテナに入り、migrationを実行してみましょう！
kondateデータベースにテーブルが作成されるはずです。

# 終わりに
またアレンジしたら追加していこうと思います。