Laravelでは、Inertiaを使うとVue3を便利に使うことができます。Inertiaは、LaravelとVueを結ぶ接着剤のような役割を果たします。
今回は、Laravel BreezeにVue3をいれて、そのあとInertiaをいれていく手順を解説します。
既存のLaravelプロジェクトの一部で、Vue3を使いたいときに便利な方法です。
もし「認証機能まで含めて、すべてVueで作りたい!」という場合は、下記の記事で方法を解説しています。
LaravelにInertiaをインストールする方法
環境はLaravel9 Breezeパッケージを使っていきます。
まずは、普通通りLaravel Breezeでプロジェクトを作り、そのあとにInertiaを入れていきましょう
環境準備・インストールまでの方法・初期設定は、別記事にて詳しく解説しています。
「Laravelプロジェクトに慣れていない」という場合は、こちらも併せて参考にしてください。
Laravel Breezeでプロジェクトを作成
①プロジェクト作成
まずは普通にLaravelのプロジェクトを作ります。
1 |
composer create-project --prefer-dist laravel/laravel quiz |
②Breezeパッケージ追加
1 |
composer require laravel/breeze --dev |
③ Breezeインストール
1 |
php artisan breeze:install |
④ npmインストール
1 |
npm install |
⑤ npm run dev実施
1 |
npm run dev |
Inertiaのインストール(サーバーサイド)
次にInertiaを入れていきます。まずはサーバーサイド(バックエンド)側の設定です。
① サーバーサイド側のInertiaアダプタをいれます。
1 |
composer require inertiajs/inertia-laravel |
② Inertia用ミドルウェアを追加します。
1 |
php artisan inertia:middleware |
追加後、app/Http/Middlewareを見ると、HandleInertiaRequest.phpファイルが入っています。
③ Inerita用ミドルウェアをKernel.phpに追加
app/Http/Kernel.phpを開き、webの中に、下記を追加します。
1 |
\App\Http\Middleware\HandleInertiaRequests::class, |
【追加した後のスクショ】
④ テンプレートファイルの作成
デフォルトのままの設定だと、resources/viewsの直下にapp.blade.php を作り、このファイルをルートテンプレートファイルとして使うことになります。
resources/viewsの中にapp.blade.phpファイルを作り、その中に、下記コードをいれます。
(通常のテンプレートファイルは、resources/views/layoutsの中に入っていますが、これとは別に、inertia用のテンプレートファイルを作成します。)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <link href="{{ mix('/css/app.css') }}" rel="stylesheet" /> <script src="{{ mix('/js/app.js') }}" defer></script> @inertiaHead </head> <body> @inertia </body> </html> |
もしテンプレートファイルの場所や名前を変えたい場合には、app/Http/Middleware/HandleInertiaRequests.phpの下記部分も変更しておきましょう。
1 |
protected $rootView = 'app'; |
例えば、resources/views/testフォルダの中に移動させるのであれば、次のように記述します。
1 |
protected $rootView = 'test.app'; |
Inertiaのインストール(クライアントサイド)
次にクライアントサイド(フロントエンド)側の設定です。
①プロジェクトにVue3と必要なものを入れます。
1 |
npm install -D vue@next vue-loader@next @vue/compiler-sfc |
次に、クライアントサイド用のInertiaアダプタをいれます。
1 |
npm install @inertiajs/inertia @inertiajs/inertia-vue3 |
npm run devを実行します。
1 |
npm run dev |
②Inertiaアプリを起動するための設定を行います。
resources/js/app.jsファイルを開き、下記を追加します。
1 2 3 4 5 6 7 8 9 10 11 |
import { createApp, h } from 'vue' import { createInertiaApp } from '@inertiajs/inertia-vue3' createInertiaApp({ resolve: name => require(`./Pages/${name}`), setup({ el, App, props, plugin }) { createApp({ render: () => h(App, props) }) .use(plugin) .mount(el) }, }) |
コードをいれた後のファイルは、次のようになります。
既にあるコードを削除すると、blade.phpファイルが正常に動かなくなったりするのでご注意を。
【編集後のapp.js】
③ Pagesフォルダ作成
上記のように設定すると、Vueファイルは resources/js/Pages/に入れていくことになります。resources/jsの中にPagesフォルダも作っておきましょう。
④ webpackの設定
webpack.mix.jsファイルを開き、.vue() を追加します。aliasも追加しておくと便利です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
const mix = require('laravel-mix'); mix.js('resources/js/app.js', 'public/js') .postCss('resources/css/app.css', 'public/css', [ require('postcss-import'), require('tailwindcss'), require('autoprefixer'), ]) // 追加 .vue() .alias({ '@': 'resources/js', }); |
⑤ Tailwindの設定
VueでもTailwind CSSを使いたい場合は、tailwind.config.jsファイルを開き、module.exportsに下記を追加します。
1 |
'./resources/js/**/*.vue', |
【編集後のtailwind.config.js】
ルート設定
ここまでで、インストール完了です。
次に、Vueでルート設定が使えるようにしていきます。
① ziggyをインストール
LaravelのルートをVueページでも使えるようにするため、Ziggyをインストールします。
1 |
composer require tightenco/ziggy |
② app.jsファイル編集
createInertiaAppの中に、下記コードを一行追加します。
1 2 3 4 5 6 7 8 9 10 |
createInertiaApp({ resolve: name => require(`./Pages/${name}`), setup({ el, App, props, plugin }) { createApp({ render: () => h(App, props) }) .use(plugin) // 追加 .mixin({ methods: { route } }) .mount(el) }, }) |
③ app.blade.phpの中に、@routesコードを一行追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <link href="{{ mix('/css/app.css') }}" rel="stylesheet" /> {{-- 追加 --}} @routes <script src="{{ mix('/js/app.js') }}" defer></script> @inertiaHead </head> <body> @inertia </body> </html> |
テストしてみる
これで設定は完了です。テストしてみましょう。
まず、最初のページを作ってみます。
①resources/js/Pagesの中に Test.vueファイルを作ります。
ファイルの中に、下記のようにいれておきます。
1 2 3 4 5 |
<template> <div> トップページです。 </div> </template> |
②routes/web.phpファイルに、Test.vue用のルートを作ります。
1 2 3 4 5 6 |
use Inertia\Inertia; Route::get('/top', function() { return Inertia::render('Test'); }); |
【編集後のweb.php】
③ コンパイル実施
Vueファイルをコンパイルるすために、npm run devを実行します。ファイルに変更を加えるたびに npm run devを実行する必要があります。
ちょっと面倒なので、ファイル保存時に自動でコンパイルを行いたい場合は、npm run watchを実行しましょう。
1 |
npm run watch |
watchを行うと、対象ファイルを監視してくれて、変更があると、ファイルをコンパイルしてくれます。
ただnpm run watchを実行してしまうと、他のコマンドは入れられなくなりますのでご注意を。
④ サーバー立ち上げ
プロジェクト内で下記を実行して、ローカルサーバーを立ち上げてください。
1 |
php artisan serve |
⑤ 画面表示
ブラウザに http://127.0.0.1:8000/topをいれて、下記が表示されれば成功です!
さいごに
以上となります。結構、設定が盛沢山でしたね^^;
なお前回の記事では、Breezeを入れるときにInertiaをインストールしてしまう方法を解説しました。この方法だと、今回お伝えした設定はすべて自動で行ってくれるので便利です。
併せて参考にしてください。
「実際に、LaravelとInertiaとVue3で、どんなものが作れるのかな」と思ったらら、下記のサイトをクリックしてみてください。
URL:https://quiz.createmore-prj.com/play/quiz