Laravel + Sail + React + Inertia + TypeScript + Vite の環境構築方法

環境

  • M2 MacOS Sonoma
  • PHP 8.1
  • Laravel 10
  • React 18
  • TypeScript
  • Vite
  • Docker Desktop
  • zsh

今から作成するLaravelアプリを入れたいディレクトリに移動

cd work

Laravelアプリを作成

今回はLaravel10を使いたかったのでこちらを参考にしました。

example-app 部分はご自身のアプリ名にしてください)

composer create-project laravel/laravel:^10.0 example-app

Laravelアプリ内に移動してVSCodeを起動

こちらはお好みでどうぞ

私はここから先はVSCodeのターミナルで叩いていきます。

cd example-app
code .

Laravel Sailを導入

Laravelで用意されているDockerが簡単に使えるものです。(こちらを参考にしました)

Docker Desktopがインストールされていることを前提にしています。

まだインストールされていない方はこちらからインストールしてください。

Laravel Sailをインストール

composer require laravel/sail --dev

Artisanコマンドを実行

php artisan sail:install

ここで

Which services would you like to install?

と聞かれたので私は「mysql」を選択しました。

エイリアスの設定(こちらを参考にしました)

本来なら ./vendor/bin/sail up というコマンドでこのまま進めていけるのですが、ずっと ./vendor/bin/sail と叩くよりも sail とだけ叩けるようになると楽だね。ということで進めるのが以下の設定になります。

今回はzshを使用しているのでそちらで説明を進めますが、bashなど他の環境の方は「bash laravel sail エイリアス」などで検索していただくと記事が出てくるかと思います。

設定ファイルを開く

vi ~/.zshrc

以下の内容を追加する

内容を記述するには「i」キーを押すと入力モードになります。

入力が完了したら「:wq」とすると入力モードから抜け、上書き保存して閉じるといった動きになります。

alias sail='sh $([ -f sail ] && echo sail || echo vendor/bin/sail)'

以下のコマンドで反映させる

source ~/.zshrc

以下のコマンドでSailが起動できるか確認してください。

sail up -d

以下のようにStartedと出ていれば成功です

出ている内容は人によって変わります。

[+] Running 2/2
  Container example-app-mysql-1         Started                                                                                                                                     0.0s 
  Container example-app-laravel.test-1  Started 

Inertia.jsをインストール

(ここからはこちら(+ こちら)を参考にしました)

sail composer require inertiajs/inertia-laravel

依存関係のインストール

sail npm install react react-dom @inertiajs/inertia @inertiajs/inertia-react
sail npm install -D typescript @types/react @types/react-dom
./node_modules/.bin/tsc --init --jsx react

クライアント側の構成

resources/js ディレクトリ

resources/ts に変更してください。

resources/ts/app.js ファイル

resources/ts/app.tsx に変更し、以下のように内容を記述してください。

import "./bootstrap";
import "../css/app.css";
import React from "react";
import { createRoot } from "react-dom/client";
import { createInertiaApp } from "@inertiajs/inertia-react";
import { resolvePageComponent } from "laravel-vite-plugin/inertia-helpers";

createInertiaApp({
    resolve: (name) =>
        resolvePageComponent(
            `./Pages/${name}.tsx`,
            import.meta.glob("./Pages/**/*.tsx")
        ),
    setup({ el, App, props }) {
        createRoot(el).render(<App {...props} />);
    },
});

tsconfig.json ファイル

以下の部分を変更してください。

{
  // ...
  "target": "esnext",
  "module": "esnext",
  "moduleResolution": "node",
  // ...
  "types": ["vite/client"]
  // ...
}

vite.config.jsファイル

現在は以下のようになっている部分を

laravel({
  input: [
      'resources/css/app.css',
      'resources/js/app.js',
  ],
  refresh: true,
}),

以下のように修正してください。

laravel(["resources/ts/app.tsx"]);

サーバー側の構成

resources/views/app.blade.php の作成

resources/views/ 配下に app.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, maximum-scale=1.0">

        <title>Laravel</title>

        @vite('resources/ts/app.tsx')
        @inertiaHead
    </head>
    <body>
        @inertia
    </body>
</html>

Inertiaミドルウェアの生成

sail php artisan inertia:middleware

app/Http/Kernel.php ファイル

app/Http/Kernel.php ファイルの web ミドルウェアに以下を追加します。

'web' => [
    // ...
    \App\Http\Middleware\HandleInertiaRequests::class,
],

実際に動作を見てみる

resources/ts/Pages/ 配下に Welcome.tsx ファイルを作成し、以下の内容を記述しましょう。

import React from "react";

const Welcome = () => {
    return <div>Welcome</div>;
};

export default Welcome;

次に、 routes/web.php に「/」ルートからBladeビューではなくReactビューを返します。

<?php

use Illuminate\Support\Facades\Route;
use Inertia\Inertia;

Route::get('/', function () {
    return Inertia::render('Welcome');
});

次に、ターミナルで sail up -d を行っていることを確認し、以下のコマンドを入力します。

sail npm run dev

これで以下のような文字が出力されたら成功です。

(数字などの内容は環境によって変わります)

> dev
> vite


  VITE v5.2.11  ready in 198 ms

    Local:   http://localhost:5173/
    Network: http://100.00.0.0:5173/
    press h + enter to show help

  LARAVEL v10.48.10  plugin v1.0.2

    APP_URL: http://localhost

ここでAPP_URL: <http://localhost> と書かれているhttp://localhost にアクセスすると、画面に「Welcome」と表示されると成功です。

お疲れ様でした!!

コメント

タイトルとURLをコピーしました