コツコツてくてく

「続けて、考えて、試す」のサイクルは偉大

Docker + Laravel10 + React + TypeScript の開発環境を手っ取り早く用意したい人へ

結論:参考元を組み合わせて作業する

下記3つの情報を参考にすれば1~3時間で、

Docker + Laravel10(認証機能付き) + React + TypeScript の環境構築が出来ます。

下記の前提で記事を書いています。

  • Windows環境
  • docker-compose のコマンドが使える
    (こちらの記事読みながらでも出来るかもです)
  • Docker、wsl2の環境が整っている
  • Docker環境のLaravelで開発したことがある

「Docker環境でLaravelで少しでも開発したことがある」に当てはまらない人は、

Dockerを知るところから始めることをおすすめします。

qiita.com

1:まずはLaravel 10 を Docker で動かす

qiita.com

基本的に記事の説明通りに作業すれば、LaravelがDocker環境上で動かせました。

Qiita記事の著者様ありがとうございます。

これからReactを追加する際に重要となるポイントだけ先に触れておきます。

また、/src/node_modulesフォルダと/src/vendorフォルダはボリュームマウントから外してます。これは依存ライブラリ群をマウント対象から外すことで動作の高速化を狙ってします。Viteを使った開発環境ではその特性上★超重要★で、これをしないとページのロードに平気で1分とかかかります。

https://qiita.com/hitotch/items/869070c3a9f474a358ea#docker-composeyml

このボリュームマウントから 「/src/node_modules」 外す作業は、

react を導入した際に不都合があります。

どんな不都合なのかは、次の React + TypeScript 導入にて説明しますね。

2:React + TypeScript を Laravel に導入する

次に React + TypeScript を導入するために、Laravel Breeze を利用します。

readouble.com

appコンテナに入ってLaravel

利用するコマンド

  1. composer require laravel/breeze --dev
  2. php artisan breeze:install
  3. React を選択
  4. オプションで TypeScript を選択
  5. 以後はお好みで選択してインストール開始

上記のコマンドで React + TypeScript を Laravel に導入すると2つの修正が必要になります。

  1. vite.config.js
  2. docker-compose.yml
vite.config.js の修正

React + TypeScript の導入時に、vite.config.js が書き換えられてしまいます。

reactの設定を追記するために上書きされホットリロードの設定が削除されます。

再度追記すると解決します。

 server: {
  host: true,
  hmr: {
   host: 'localhost',
  },
  watch: {
   usePolling: true,
 },
},
docker-compose.yml の修正とコンテナ再ビルド

何らかの工夫をしない限り、vscode が node_modules 配下の react を認識できず、

エディタ上にずっとエラーが表示されます。

エラー:Cannot find module 'react' or its corresponding type declarations.ts(2307)

前述した「ボリュームマウントから 「/src/node_modules」 外す作業」が影響して、

エラーが表示されています。vscode が node_modules にインストールされた react を認識出来ないことが原因です。

vite でのコンパイルは通りますが、開発中にエラーが表示され続けるのはちょっと...。

 

docker-compose.ymlの設定が原因なので、下記を削除またはコメントアウト

    ports:
      - 5173:5173
    volumes:
      - ./:/src
      # - /src/node_modules
      # - /src/vendor
      - ./docker/php/php.ini:/usr/local/etc/php/php.ini

 

改めて下記コマンドを実行してモジュールをインストールします。

  1. docker compose down 
  2. docker compose up -d --build
  3. appコンテナに入る
  4. composer install
  5. npm install

これで vscode が エラーを出さなくなります。

3:表示の遅さを解決する

「ボリュームマウントから 「/src/node_modules」 外す作業」をやめたことで、

viteのホットリードが遅くなります。

私の場合はダッシュボードの表示に約40秒かかることが確認出来ました。

 

40000 msほど
ソースコードubuntu配下へ移動する

解決策としてソースコードをフォルダごとすべてubuntu配下へ移動します。

www.aska-ltd.jp

詳細は参考記事を読んでほしいのですが、wsl上にファイルを移動させることで、

ファイルの読み込み量を減らすことが出来ます。

起動しているdockerを停止して、ソースコードをコピーまたは移動させます。

ソースコードubuntu配下で起動できるようにする

移動先で下記コマンドを実行し、画面の表示を試します。

  1. docker compose up -d --build
  2. appコンテナに入る
  3. composer install
  4. npm install

npm install を実行すると、下記のエラーが出る場合があります。

root@-------:/src# npm run dev

> src@1.0.0 dev
> vite --host

/usr/bin/env: 'node': Permission denied

インストール権限がないことが原因で失敗するので、下記コマンドnpmを再インストールして解決します。

  1. curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
  2. nvm install stable --latest-npm

qiita.com

docs.npmjs.com

再インストールが出来たら改めて、下記コマンドで vite のホットリロードが動作するか確認します。

  1. npm install
  2. npm run dev

同じダッシュボード画面の表示速度は1秒未満になることが確認できました。

800ms 未満で 改善前の 約50倍速い表示に

気づき

vscode が node_modules 配下の react を認識できず、エディタ上にずっとエラーが表示される原因を突き止めるのに1時間以上かかった...。

参考元のdocker-compose.ymlの記述をちゃんと読んでいないことで、表示されたエラー情報のみを参考に検索をして、的はずれな解決策を試して時間を使っていました。

参考元の情報で環境構築する際には「参考元が何をしているか」を少しでも知ろうとする姿勢があると、不具合の原因を見つけるヒントが得られると改めて認識できました。