Laravel Voltを使うと、blade.phpファイルの中に、Livewireのコードが入れられます。
Laravel Voltの使い方
まずはインストール方法から。インストールの後、4つのレベル別に、Laravel Voltの使い方をお見せします。
Laravel Voltのインストール
下記コマンドを実行します。
composer require livewire/volt
引き続き下記を実行して、Voltのサービスプロバイダーをインストールします。
php artisan volt:install
レベル① Laravel Voltでカウンターを作ってみる
まずは簡単なカウンターを作ってみます。
counterという名前のvoltファイルを作ります。
php artisan make:volt counter
resources/views/livewireの中に、counter.blade.phpファイルができます。ファイルを開き、下記のように編集します。
【counter.blade.php】
<?php
use function Livewire\Volt\{state};
// 2行追加
state(['count' => 0]);
$increment = fn () => $this->count++;
?>
<div style="margin:10px;">
{{-- 2行追加 --}}
<h1>{{ $count }}</h1>
<button wire:click="increment" style="border: 1rem solid green;">+クリックしてね</button>
</div>
resources/views/welcome.blade.phpファイルを下記のように編集して、作成したcounterファイルが表示されるようにします。
【welcome.blade.php】
<html>
<body class="antialiased">
@livewire('counter')
</body>
</html>
welcome.blade.phpファイルを表示すると、次のようにカウンターができています。【クリックしてね】を押すと、番号が増えていきます。


カウンターがあっさり作れました♪
レベル② 他のページにカウンターを組み込んでみる
ただ、レベル①の方法だとLivewireページの中にコードを入れることになります。結局2つのファイルが必要になってしまいますよね。
レベル②では、わざわざLivewireページを作らず、ひとつのファイルの中で、カウンター機能を実装していきます。
resources/views/welcome.blade.phpファイルの中に、下記コードをいれます。
【welcome.blade.php】
<?php
use function Livewire\Volt\{state};
state(['count' => 0]);
$increment = fn () => $this->count++;
?>
<html>
<body class="antialiased">
@volt('counter')
<div style="margin:10px;">
{{-- 2行追加 --}}
<h1>{{ $count }}</h1>
<button wire:click="increment" style="border: 1rem solid green;">+クリックしてね</button>
</div>
@endvolt
</body>
</html>
<?php ~ ?> の部分は、従来、app/Http/Livewireの中にいれていた部分です。Laravel Voltを使うと、このように、blade.phpファイルの中に入れられます。
トップページを開くと、レベル①と同じようにカウンターが表示されます。

レベル③ Laravel Voltでモーダル作成
もう少し高度な機能を実装してみましょう。下記の記事では、Livewireを使ってモーダルを作る方法を紹介しています。
こちらを、Laravel Voltを使って行っていきます。詳しい仕組みは、上記の記事をご覧ください。事前にLaravel Breezeもインストールしておきます。
本記事では、上記の記事でご紹介したコードを、Laravel Voltを使って書き換えていきます。
再びresources/views/welcome.blade.phpファイルを開きます。次のようにコードをいれます。
【welcome.blade.php】
<?php
use Livewire\Volt\Component;
new class extends Component {
public $showModal = false;
public function openModal()
{
$this->showModal = true;
}
public function closeModal()
{
$this->showModal = false;
}
}
?>
<x-guest-layout>
@volt
<div>
<button wire:click="openModal()" type="button" class="px-4 py-2 font-bold text-white bg-blue-500 rounded hover:bg-blue-700">
モーダルを表示
</button>
@if($showModal)
<div class="fixed z-10 inset-0 overflow-y-auto">
<div class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
<div class="fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity"></div>
<div class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full">
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
<h3 class="text-lg leading-6 font-medium text-gray-900">
モーダルタイトル
</h3>
<div class="mt-2">
<p class="text-sm text-gray-500">
モーダルの内容をここに記述します。
</p>
</div>
</div>
<div class="bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse">
<button wire:click="closeModal()" type="button" class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700">
閉じる
</button>
</div>
</div>
</div>
</div>
@endif
</div>
@endvolt
</x-guest-layout>
npm run devを実行します。トップページを開くと、モーダル機能が実装されています。

【モーダルを表示】をクリックすると、下記のようにモーダルが出てきます。

レベル④ Laravel FolioとLaravel Voltを併用
最後に、Laravel FolioとLaravel Voltを組み合わせて使ってみます。詳しくは、下記をご覧ください。
Laravel Folioを使うことで、ルート設定を記述せず、Laravel Volt用ファイルを表示できます。
まずは、Laravel Folioをインストールします。
composer require laravel/folio
php artisan folio:install
次に、resources/views/pagesの中に、modal.blade.phpファイルを作ります。そこに、レベル③で作成したコードをそのまま貼り付けます。
/modalを開くと、次のようにモーダルが表示されます。

ルート設定もLivewire用のファイルの作成も行わず、モーダルが作れてしまいます。かなり効率的ですね。
さいごに
Laravel Voltについてご紹介しました。ご紹介したことの他にも、色々とできます。詳しくは、下記の公式マニュアルを参考にしてください。
実際に使ってみて「便利だなぁ」と思う反面、Livewire用コードが多い場合には、ページの管理がしにくくなる気もしました。
プロジェクトによっては、従来のように、Livewire用コードを分けておくほうが作りやすいかもしれません。プロジェクトによって、使い分けていこうかなと思います。

使い分けられる良いところですね。
なお、Laravel Voltは、Laravel FolioやLaravel11と共に、2023年7月のLaracon(Laravelのカンファレンス)動画で紹介された新しい機能です。
Laravel11やLaravel Folioについてもご興味あれば、こちらも見てみてくださいね。






コメント