はじめに
こんにちは。DMM WEBCAMP Advent Calendar 2021 17日目を担当する@yuttana1223です!
最近1年ぶりにLaravelを使用するということになったので、そのときに学習した内容で需要がありそうな開発環境に関して書いていきます。
概要
Laravel sailでDocker環境を構築して、Breezeでログインまで行っていきます。基本的には公式ドキュメントを参考にし、便利なもののインストールや日本語化は行いますが、不必要な場合は飛ばしてください。チーム開発のことも考え、GitHubにpush後cloneしてからの扱い方まで考慮していきます。
実行環境
- macOS Big Sur バージョン 11.5.2
- docker desktop バージョン 4.1.1(インストールしていて、起動している前提)
Laravelプロジェクト作成
Laravel Sailを使用していく。
Laravel Sailは、LaravelのデフォルトのDocker構成と、操作するための軽量のコマンドラインインターフェイスです。 Sailは、Dockerの経験がなくても、PHP、MySQL、Redisを使用してLaravelアプリケーションを構築するために良い出発点を提供しています。
利用可能なサービスは、mysql
、pgsql
、mariadb
、redis
、memcached
、meilisearch
、minio
、selenium
、mailhog
になっており、with
というクエリ文字列変数で選択する。
docker imageやプロジェクトに必要なファイルをインストール
今回はmysql
を選択し、アプリ名はexample-app
を使用する。インストールには結構時間がかかるので気長に待ち、最後にmacのパスワードだけ聞かれるので入力しましょう。
# curl -s "https://laravel.build/アプリ名?with=サービス名,サービス名" | bash
curl -s "https://laravel.build/example-app?with=mysql" | bash
cd example-app
# gitの管理下に入れたい場合のみ
git init
参考: https://readouble.com/laravel/8.x/ja/installation.html
環境変数(.env)のファイルをお好みで変更
-
docker-compose.yml
にAPP_PORT
という環境変数が指定されている(デフォルトだと80番)ので、自分のPCで使っていないポート番号を追記する。 - お好みで
APP_NAME
(アプリ名)やDB_DATABASE
(データベース名)、DB_USERNAME
(データベースのユーザー名)、DB_PASSWORD
(データベースのパスワード)も変更してください。今回は特に変更せず、デフォルトのままで行う。
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:mwWgIvS9K4seI+GQ+F7DOslToBuIRgw7ibXje8A9etI=
APP_DEBUG=true
APP_URL=http://example-app.test
APP_PORT=8000 # 追記(http://localhost:8000/ で接続)
# 以下省略
言語設定(config/app.php)
-
'fallback_locale' => 'en'
は変更しなくてよい - 大文字小文字を気をつける
// 変更前
// 'timezone' => 'UTC',
// 変更後(タイムゾーンを東京に変更)
'timezone' => 'Asia/Tokyo',
// 変更前
// 'locale' => 'en',
// 変更後(言語を日本語に変更)
'locale' => 'ja',
// 変更前
// 'faker_locale' => 'en_US',
// 変更後(ダミーデータを日本語に変更)
'faker_locale' => 'ja_JP',
phpMyAdminを導入(docker-compose.yml) ※任意
- データベースをGUIからも扱うためのもので、テーブルやどんなデータが入っているかをひと目で確認できたり、簡単にデータを挿入・変更・削除したりできて便利。
- mariadbなどを使用している場合は
phpmyadmin
のdepend_on
の部分のmysql
をmariadb
などに変更する
# For more information: https://laravel.com/docs/sail
version: '3'
services:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/8.0
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.0/app
extra_hosts:
- 'host.docker.internal:host-gateway'
ports:
- '${APP_PORT:-80}:80'
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
volumes:
- '.:/var/www/html'
networks:
- sail
depends_on:
- mysql
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:
- 'sailmysql:/var/lib/mysql'
networks:
- sail
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]
retries: 3
timeout: 5s
# 追記
phpmyadmin:
image: phpmyadmin/phpmyadmin
restart: always
environment:
PMA_ARBITRARY: 1
PMA_HOST: "${DB_HOST}"
PMA_USER: "${DB_USERNAME}"
PMA_PASSWORD: "${DB_PASSWORD}"
ports:
- 8080:80
volumes:
- ./infra/docker/phpmyadmin/sessions:/sessions
networks:
- sail
depends_on:
- mysql
networks:
sail:
driver: bridge
volumes:
sailmysql:
driver: local
エラーメッセージの日本語化 ※任意
- デフォルトの英語のままでOKなら飛ばす
- 公式にもエラーメッセージの日本語化があるが、既にカスタムされているものを今回は使用。
- 次ののURLにアクセスし「https://github.com/Laravel-Lang/lang 」
- ダウンロードしてくる
- ダウンロードしてきた
lang/localesの中のja
を自分のプロジェクトのresources/lang
の直下に入れる。 - 自分のプロジェクトの
resources/lang/ja
の中のja.json
を上の階層resources/lang
直下に移動
補足: https://readouble.com/laravel/8.x/ja/validation-php.html
コンテナを起動
docker compose up -d
と同じような意味
./vendor/bin/sail up -d
「 http://localhost:8000/ 」でlaravel、「 http://localhost:8080/ 」でphpMyAdminが起動した状態になる
laravel-debugbarのインストール ※任意
デバッグをするときに便利なので入れる
docker compose exec laravel.test bash
でもコンテナに入れる
# コンテナ内に入る
./vendor/bin/sail bash
# インストール
composer require barryvdh/laravel-debugbar --dev
Laravel Breezeのインストール
- 認証に必要なので入れる
Laravel Breezeにログイン、ユーザー登録、パスワードのリセット、メールの検証、パスワードの確認など、Laravelのすべての認証機能を最小限シンプルに実装しました。Laravel Breezeのデフォルトビュー層は、Tailwind CSSでスタイルを設定したシンプルなBladeテンプレートで構成しています。
# コンテナ内で実行
composer require laravel/breeze --dev
php artisan breeze:install
# tailwind cssなどを使用しているため必要
npm install && npm run dev
# usersテーブルなどのマイグレーションを実行
php artisan migrate
これで右上のRegisterのリンクからユーザ登録ができるようになった。
GitHubにpushしたものをcloneしてからの流れ
チーム開発のときなどにGithubを使用すると思うが、そのときに注意点がある。
.gitingnore
に/vendor
と書かれているので、コマンド時に使用していた./vendor/bin/sail
が使用できない。/vendor/bin/sail
はcurl
を使用したときに現れたものである。
対策としては公式に書かれている。
PHPとComposerを含む小さなDockerコンテナを使用して、アプリケーションの依存関係をインストールする必要がある。
GitHubからcloneする
git clone リポジトリURL
# cloneしてきたプロジェクトに移動
cd example-app
環境変数(.env)を作成
- GitHubには
.env
はpushされないようになっているので、まずは.env.example
の中身をコピーして.env
ファイルを作成してから貼り付ける -
DB_CONNECTION
とDB_HOST
は使用しているデータベース名(今回はmysql
)を記述し、DB_PASSWORD
も設定(今回はpassword
)。 -
APP_NAME
、APP_PORT
、DB_DATABASE
、DB_USERNAME
はお好みで記述。
APP_NAME=Laravel
APP_ENV=local
# APP_KEYはエラーが出たときにコマンドで生成
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost
# 書かなければ80になる
APP_PORT=8000
LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
# mysqlを使用
DB_CONNECTION=mysql
# mysqlに変更
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=example_app
# userに変更
DB_USERNAME=user
# passwordに変更
DB_PASSWORD=password
# これより下は変更なし
BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DRIVER=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
MEMCACHED_HOST=127.0.0.1
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
コンテナを起動する
-
/vendor
やdockerのイメージをインストール (dockerデスクトップは起動している前提でfishを使用している場合はzshやbashに切り替える)
docker run --rm \
-u "$(id -u):$(id -g)" \
-v $(pwd):/var/www/html \
-w /var/www/html \
laravelsail/php80-composer:latest \
composer install --ignore-platform-reqs
./vendor/bin/sail up -d
http://localhost:8000/ にアクセスすると、No application encryption key has been specified.
というエラーが出るのでAPP_KEY
を作成。
# コンテナに移動
./vendor/bin/sail bash
# APP_KEYを作成
php artisan key:generate
npm install && npm run dev
php artisan migrate
http://localhost:8080/ にアクセスすると、テーブルができているのが確認できる。
以上でcloneをしてからログインまで完了!