Dockerを使ったLaravel × React 環境構築(共同開発編)
Dockerを使ったLaravel × React 環境構築(共同開発)
自分が共同開発を行った際に行った手順を備忘録として残します。
今回は、Docker(sail)を使用し、フロントを「React」、バックを「Laravel」で開発しました。
LaravelとReactで開発を行うので、「Inertia.js」を使用しています。
※DBはmysqlを使用しています
3人で開発を行いましたが、全員Dockerを用いての共同開発が初めてで手こずりました💦
どこか間違いや、「こうした方が良い!」みたいなことがありましたら、容赦なく言っていただけると助かります🙇
以下の準備は終わっているものとする
- Docker Desktop のインストール
- Github
手順一覧
開発環境を作成する人の手順
- Laravelプロジェクトを作成
- 作成したLaravelプロジェクトの権限の変更
- 起動するかの確認
- phpmyadmin のコンテナを追加
- 認証機能(Laravel Breeze)のパッケージをインストール
- Githubにコードを公開し、開発メンバーに共有する
開発環境を共有してもらう側の手順
- Githubのリポジトリをクローンする
- LaravelプロジェクトをSailを使って構築する
- DB_HOSTを変更する
- Sailをバッググランドで起動する
- APP_KEYを更新する
- テーブルを作成する
- Laravel-Mixのビルド
- ビルド
開発環境を作成する人の手順
- Laravelプロジェクトの作成
ターミナルで以下コマンドを入力
curl -s https://laravel.build/ファイル名 | bash
- 権限の変更
ターミナルで以下のコマンドを入力
sudo chmod -R 777 ファイル名
- 起動するかの確認(一応)
アプリケーションへ移動する
cd ファイル名
コンテナの立ち上げ
./vendor/bin/sail up -d
localhost で画面が表示されるか確認する
表示されれば、次の作業をするためにコンテナを落とす
./vendor/bin/sail down
- phpmyadmin のコンテナを追加
docker-compose.ymlに下記コードを追記する.追記場所はselenium の下
※重要 seleniumと同じ階層に保存する(画像あり)
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
- mysqlが起動するか確認する
アプリケーションへ移動する
cd ファイル名
コンテナ立ち上げ
./vendor/bin/sail up -d
localhost で画面が表示されるか確認する
localhost:8080 でmysqlが表示されるか確認する
mysqlのログインは設定していなければ、下記の通りとなる
ユーザー名: sail パスワード: password
- 認証機能(Laravel Breeze)をアプリケーションに追加する
アプリケーションへ移動する
cd ファイル名
下記コマンドを実行し,必要なファイルをダウンロードする
./vendor/bin/sail composer require laravel/breeze --dev
下記コマンドでインストールする
./vendor/bin/sail php artisan breeze:install react
php artisanコマンドでbreezeのインストールを行いますがbreeze:installの後ろに何も設定していない場合はalpine.jsがインストールされます。reactを指定するとInertia.jsとReactがインストールされます。今回はReactを使用しての開発なので、Reactを指定。Vueを利用したい場合はreactの代わりにvueを指定します。
下記コマンドを順番に実行し、その他必要なパッケージをインスールしてビルドする
./vendor/bin/sail npm install
./vendor/bin/sail npm run build
やや時間かかる。。。
処理が終わったら下記コマンドを実行する
./vendor/bin/sail php artisan migrate
処理が終わってlocalhost に接続してみると、右上にLogin と Register が表示されていることを確認できる
localhost:8080 ではテーブルが作成されていることが確認できる
- テストユーザーデータが欲しい場合のみ
Laravel には「seeder」という機能があり,テスト用のデータを簡単に作成することができる
今回はダミーデータを 10 件作成する.database/seeders/DatabaseSeeder.php を以下のように編集する
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
// 🔽 この行をコメントから外す
\App\Models\User::factory(10)->create();
// 🔽 こちらはそのまま
// \App\Models\User::factory()->create([
// 'name' => 'Test User',
// 'email' => 'test@example.com',
// ]);
}
}
下記コマンドを実行する
./vendor/bin/sail php artisan db:seed
mysqlのusersテーブルでテストユーザーが入っていることを確認できる
-
Githubに公開する
Githubに公開する方法がわからない方は調べてください
開発環境を共有してもらう側の手順
- Githubのリポジトリをクローンする
共有されたGithubのリポジトリをクローンする
git clone YOUR_REPOSITORY_URL
- LaravelプロジェクトをSailを使って構築する
Windowsの場合は、WSL2やDockerのインストールが必要になる
Macの場合は、Dockerが必要になる
リポジトリをクローンした直後は、vendorフォルダが存在しない
このフォルダの中にはComposerで管理しているパッケージが格納されるが、Gitの管理対象外になっている
下記コマンドをコピペでコマンドで実行する
laravelsail/phpXX-composerの部分の81は、プロジェクトで使用するPHPのバージョンと合わせる必要がある
docker-compose.ymlのlaravel.testコンテナーのbuild定義を確認すれば確認できる
(81はPHP8.1を表している)
docker run --rm \
-u "$(id -u):$(id -g)" \
-v $(pwd):/var/www/html \
-w /var/www/html \
laravelsail/php81-composer:latest \
composer install --ignore-platform-reqs
vendorフォルダに、Composerのパッケージがインストールされた
- DB_HOSTを変更する
.env.example を参考にして(コピペでOK) .envファイルを作成する
.env ファイルの中身を書き換える
コンテナ内のMySQLに接続するために以下のように変更する
DB_HOST=127.0.0.1
↓
DB_HOST=mysql
- Sailをバッググランドで起動する
Sailをバッググランドで起動する
./vendor/bin/sail up -d
- APP_KEYを更新する
下記コマンドでAPP_KEYを更新する
./vendor/bin/sail php artisan key:generate
- テーブルを作成する
以下のコマンドでテーブルを作成する
./vendor/bin/sail php artisan migrate
phpMyAdminから正常にテーブルが作成されたことが確認できる
MySQLのユーザ・パスワードは.envに記載の通り
- Laravel-Mixのビルド
NPMコマンドでパッケージをインストールする
./vendor/bin/sail npm install
- ビルド
開発時なのでdevを指定する
./vendor/bin/sail npm run dev
localhost で画面が表示されるのが確認できる
Discussion