【Laravel9系】 Laravel Sail Viteを使ってReact TypeScriptの開発環境を用意する。

Laravel9系でViteが公式プラグインとして使えるようになったということでReact(TypeScript)の環境をサクッと構築したいと思います。

環境

  • Laravel 9x
  • React 18x
  • Vite 3x

Laravelをインストール

Dockerがデスクトップにインストールされていることを前提に進めます。
以下のコマンドを順に叩いていきます。

curl -s https://laravel.build/laravel_react_app | bash
cd laravel_react_app
alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'
sail up -d

http://localhostにアクセスすると初期画面が表示されるようになるかと思います。

Reactをインストール

各種Reactのパッケージをインストールします。
※Reactのバージョンは18です。

sail npm install --save-dev react react-dom @types/react @types/react-dom @vitejs/plugin-react @vitejs/plugin-react-refresh

app.tsxファイルを作成

resources/ts/app.tsxファイルを作成します。
React18からレンダリングの関数がReactDomからcreateRootに変わったようなので注意が必要です。
import も react-domから react-dom/clientに変更になっています。

import "../js/bootstrap";
import "../css/app.css";
import React from "react";
import { createRoot } from 'react-dom/client';

const App = () => {
    const title: string = "Laravel 9 Vite with TypeScript React !!";
    return <h1>{title}</h1>;
};
const container = document.getElementById('app') as HTMLInputElement;
const root = createRoot(container);
root.render(<App />);

ビューファイル編集

resources/views/welcome.blade.phpを編集します。

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Laravel</title>
        @viteReactRefresh
        @vite('resources/ts/app.tsx')
    </head>
    <body>
        <div id="app"></div>
    </body>
</html>

vite.config.tsを修正

aliasを設定しておくとimportの際にパスがわかりやすくなるので設定しておくと便利です。

import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import react from '@vitejs/plugin-react';

export default defineConfig({
    server: {
        hmr: {
            host: 'localhost',
        },
    },
    plugins: [
        laravel({
            input: [
                'resources/ts/app.tsx',
            ],
            refresh: true,
        }),
        react(),
    ],
    resolve: {
        alias: {
            '@': '/resources/ts',
        },
    },
});

詰まったところ

公式のドキュメントや他の方の記事を参考にしながら今回、環境を構築させていただいたのですが、
ビルドした際、以下のエラーが出て真っ白になってしまいました。

 http://0.0.0.0:5173/@vite/client net::ERR_ADDRESS_INVALID

解決策は以下のURLに書いていました。

https://laracasts.com/discuss/channels/vite/laravel-vite-issue?page=1&replyId=807406

どうやら以下のコードをvite.config.tsに追記してやる必要があるようです。

server: {
    hmr: {
        host: 'localhost',
    },
},

動作確認

ビルドして動作確認します。

sail npm run dev

http://localhostにアクセスしてLaravel 9 Vite with TypeScript React !!と表示されれば成功です。

コメントを残す

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。